1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[EMCAS] Emacs起動時のタイポを補完する

Last updated at Posted at 2019-08-30

#概要
Emacsを使う時に頻繁にコマンドを打ち間違えてしまうので、emacsのタイポを補完するためのshell scriptを作りました。
EMCASという単語は、

  • 自分が頻繁にemacsと打ち間違えるemcas
  • EMCAS: EMacs Completion and AliaS

というのが由来です。

Github:
https://github.com/708yamaguchi/EMCAS

#インストール
上記のgithubリポジトリをcloneして、スクリプトファイルをsourceしてください。

git clone https://github.com/708yamaguchi/EMCAS.git
cd EMCAS
source emacs.aliases.bash

#実行例
EMCASを使って打ち間違いを補間する様子です。
emcas.gif

補間できる単語の例を示します。どの単語を補間できるかは、ソースコードをご覧ください。

$ ./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の補間で行っていることは、大きく分けて2つです。以下で詳しく説明します。

  1. タイポワードリスト作成
  2. タイポ置き換え関数の呼び出し

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関数では、第一引数が上記の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関数が第一引数のタイポしかチェックしないことを利用して、

emacs -nw s0nw

とすれば、このコマンドはそのまま実行されるので、s0nwファイルを開けます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?