zsh の補完周りをちょっと触る
今回の内容
- 自作コマンド(
memo
コマンド)の補完を編集 - 任意のディレクトリから,
$ memo <TAB>
を入力すると,~/Dropbox/Memo
ディレクトリの中のテキストファイル名を補完する(補完リストに出す).
なぜこれをやりたいか
最終的に実現したいこと
- Dropboxを利用してメモ(テキストファイル)を各デバイスで共有したい.
- ただし,メモを配置するディレクトリは
Dropbox/Memo
とする. Dropbox/Memo
ディレクトリの位置を意識せず,任意のディレクトリからメモの確認・編集を実行したい(memo
コマンドを実装).
memo
コマンドを実装する上で
memo
コマンドの引数に確認・編集するメモの名前を与えることが考えられる.- 補完周りを弄らないとメモ名を補完なしで入力する仕様になってしまい,不便である.
- このため,
memo
の引数の補完にDropbox/Memo
ディレクトリ直下のファイル名を割当てたい. - 補完の設定方法は使ってるシェルによって違うらしいので,
zsh
用の方法で補完を設定する.
memo
コマンドの引数の補完にDropbox/Memo
ディレクトリ直下のファイル名を割当てる
以下のコードをzsh
実行時に読むファイル(.zshrc
等)に記述する.
_memo() { _values "description of completion" $(ls ~/Dropbox/Memo) } compdef _memo memo
この"description of completion"の文字列はzshの設定で補完候補の出力時に出力したりしなかったりできるが,現状どうでもいいので自分は今の所出力していない(デフォルト).
また,下記コードの実行が前提なので,.zshrc
等のファイルに下記コードが書かれているか要確認
autoload -U compinit
compinit
以下の通り,Dropbox/Memo
直下のファイル名を補完できた.
次に
- 補完の出力内容をもっといい感じにしたい.例えば,".txt"を消すとか,メモの概要を表示するとか.
memo
コマンドの中身を実装したい.(こっち優先)