2007年10月1日月曜日

bashの補完機能を拡張してみた

 bashにはインテリジェントな補完機能があり、ubuntuだとデフォルトでさまざまな補完定義の書かれた bash_completion が有効になっているはず。
 なっていなければ ~/.bashrc に、
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
と追記しておこう。
 この便利な補完機能だけど、自分で設定できる。が、ものすごく賢く設定できるだけに /etc/bash_completion 見てもよく分からないw

ちょうどnkfのロングオプションをよく使うんだけど、よく忘れるw のでいい機会だったので試しに作ってみた。

# nkf completion

_nkf()
{
local cur

COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}

# options completion
if [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -o default -W '-j -s -e -w -J -S -E -W \
--help --version --overwrite --jis --euc --sjis \
--utf8 --utf16 --mime --base64 --guess \
--hiragana --katakana --katakana-hiragana' -- $cur ) )
else
COMPREPLY=( $( compgen -o default $cur ) )
fi
}
complete -F _nkf nkf
のような感じで、~/.bashrc に追記。
source ~/.bashrc
で即反映させて、試しに、
nkf --
と打ってTABキーを押すと、
~$ nkf --
--base64 --jis --sjis
--euc --katakana --utf16
--guess --katakana-hiragana --utf8
--help --mime --version
--hiragana --overwrite
とロングオプションが補完候補として表示される。便利だね♪

上のは適当に書いただけなので誰かリファインして本家にマージしてください><

しかしあれだね、bashの補完機能を自分で作ることに関しての情報がほとんど無いね。あっても bash_completion に関する情報ばかり。bashの補完定義を自分でどんどん簡単に作れればどんどん便利になっていくね。

0 件のコメント: