bashではコマンドを途中までタイプした後、tabを入力することで補完関数が呼ばれ候補が表示されます。
これは、bash-completionによって提供されている機能で、実態はシェルスクリプトの集合です。
補完時には、/usr/share/bash-completion/completions
と/etc/bash_completion.d/
に保存されている関数が適宜呼ばれています。
bash-completionが提供する関数を用いることで簡単に自前の補完関数を作ることができ、上記の2つのディレクトリのどちらかに置くか.bashrc等でsourceすることで呼び出されるようになります。
今回は、GitHub - mattn/memo: 📓 Memo Life For Youコマンドのサブコマンド補完用の関数を下記のように作成しました。 簡単な補完ですが、少しだけbashが便利になりました。
まだ実装できていませんが、Usageの出力をパースして補完候補に加えるようにすれば自分で定義したmemoのサブコマンドもスクリプトの変更無しに補完候補に加えられると思います。
# memo command completion function _completion_memo(){ local prev cur cword # get the input informations (ref: /usr/share/bash-completion/bash_completion ) _get_comp_words_by_ref -n : cur prev cword opts="new list edit cat delete grep config serve" COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) } && complete -F _completion_memo memo