ゆっくり開発

開発したい時に開発するブログ

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直下のファイル名を補完できた.

f:id:uttnaoki:20180704034836p:plain:w200

次に

  • 補完の出力内容をもっといい感じにしたい.例えば,".txt"を消すとか,メモの概要を表示するとか.
  • memoコマンドの中身を実装したい.(こっち優先)