[EMCAS] Emacs 시작 시 타이포 보완

개요



Emacs를 사용할 때 자주 명령을 잘못 잘못 버리므로 emacs의 타이포를 보완하기위한 쉘 스크립트를 만들었습니다.
EMCAS라는 단어는
  • 자신이 자주 emacs와 치고 실수하는 emcas
  • EMCAS: EMacs Completion and AliaS

  • 라는 것이 유래입니다.

    Github:
    htps : // 기주 b. 코 m / 708 야마 구치 / 에 M 또는 S

    설치



    위의 github 리포지토리를 clone하여 스크립트 파일을 source하십시오.
    git clone https://github.com/708yamaguchi/EMCAS.git
    cd EMCAS
    source emacs.aliases.bash
    

    실행 예



    EMCAS를 사용하여 치는 실수를 보간하는 모습입니다.


    보간할 수 있는 단어의 예를 나타냅니다. 어떤 단어를 보간할 수 있는지는 소스 코드을 참조하십시오.
    $ ./test.sh                                                                                          
    emcas 0nw hoge        -> emacs -nw hoge                                                              
    eamcs -wn foo -nw     -> emacs -nw foo -nw                                                           
    ema -csw -f shell     -> emacs -nw -f shell                                                          
    ems                   -> emacs                                                                       
    emac s-nw fuga hoge   -> emacs -nw fuga hoge                                                         
    emacs fuga -nw hoge   -> emacs fuga -nw hoge                                                         
    emavs -f shell -nw    -> emacs -f shell -nw                                                          
    emcs hoge fuga        -> emacs hoge fuga                                                             
    emsc hoge s-nw fuga   -> emacs hoge s-nw fuga
    

    하고 있는 일



    EMCAS 보간으로 수행하는 것은 크게 두 가지입니다. 아래에서 자세히 설명합니다.
  • 타이포워드 리스트 작성
  • 타이포 대체 함수 호출

  • 1. 타이포워드 리스트 작성



    emacs -nw 커멘드를 emacs부와 -nw부로 나누어 생각해, 각각에 대해 치고 틀린 것 같은 단어 리스트(타이포워드 리스트)를 만듭니다.
    소스 코드(emacs.aliases.bash) 안에서는, 다음과 같은 타이포워드 리스트를 만들고 있습니다.
  • emacs 부서의 타이포워드 목록
  • EMCAS_ALIASES=(
        eamcs
        eamsc
        ema
        ems
        emac
        emacs
        emasc
        emavs
        emcs
        emsc
    )
    
  • nw 부의 타이포워드 리스트
  • NW_OPTIONS=(
        c-w
        n-w
        n0w
        s-
        s-n
        s-nw
        s-w
        s-wn
        w0n
        0nw
        0wn
        0sw-
        -csw
        -nw
        -s
        -snw
        -w
        -wn
    )
    

    2. 타이포 대체 함수 호출



    emacs의 치는 실수가 있었을 때, 즉 상기의 EMCAS_ALIASES 배열에 포함되는 커멘드가 실행되었을 때, 이하의 alias에 따라 자작의 emcas 함수를 호출합니다.
    for ((i = 0; i < ${#EMCAS_ALIASES[@]}; i++))
    do
        alias ${EMCAS_ALIASES[$i]}="emcas"
    done
    

    emcas 함수에서는, 제1 인수가 상기의 NW_OPTIONS 배열에 포함되어 있으면 -nw부의 타이포라고 판정해, emacs -nw로 보간합니다(아래의 elif절).
    그렇지 않은 경우는 -nw부의 타이포가 존재하지 않는다고 판정해, 인수를 그대로 emacs 커멘드에 건네줍니다.
    function emcas(){
        if [ $# -eq 0 ]; then
            COMMAND="emacs"
        elif echo "${NW_OPTIONS[@]}" | grep '\'$1 > /dev/null; then
            COMMAND="emacs -nw ${@:2}"
        else
            COMMAND="emacs ${@:1}"
        fi
        # if EMCAS_ECHO is set, only print the command
        if [ -v EMCAS_ECHO ]; then
            echo $COMMAND
        else
            command $COMMAND
        fi
    }
    

    문제점



    EMCAS에서는 emacs 명령도 emcas에 alias하므로 예를 들어,
    emacs s0nw
    

    라고 쳤을 때, 사실은 s0nw라고 하는 텍스트를 열고 싶었다고 해도, s0nw는 -nw의 타이포라고 판단해
    emacs -nw
    

    를 실행합니다.

    이것을 피하기 위해서, emcas 함수가 제1 인수의 타이포 밖에 체크하지 않는 것을 이용해,
    emacs -nw s0nw
    

    그렇다면이 명령은 그대로 실행되므로 s0nw 파일을 엽니 다.

    좋은 웹페이지 즐겨찾기