#概要
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
補間できる単語の例を示します。どの単語を補間できるかは、ソースコードをご覧ください。
$ ./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. タイポワードリスト作成
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ファイルを開けます。