svnの補完関数を書こう(1) -準備編-

svnの補完関数を書いてみよう。まずは、ディレクトリ等の準備から。

補完関数はfpathに記述されたディレクトリから自動でロードされる。なので、まずfpathに好きなディレクトリを設定する。

# .zshrc
fpath=(~/config/fun $fpath)

そして、そのディレクトリに_svnという名前のファイルを置く。

#compdef svn colorsvn
local expl

_description files expl "compressed file"
_files "$expl[@]" -g "*.gz"

内容は、gnuzipの補完関数をそのまま写しただけの適当なやつです。
あと、一行目でどのコマンドに対する補完を行うかを指定している。なので、これを消すとうまく動かない。

このあと、zshを再起動させるとsvnのあとに拡張子がgzのファイルが補完されるようになる。

$ svn ^D
compressed files
baz.gz      foo.tar.gz

あとは、この_svnの中身を書き換えていくことになる。

おまけ

デバッグ用の設定。必要に応じてロードするようにしている。

# 表示を冗長にする
zstyle ':completion:*' verbose yes
zstyle ':completion:*:descriptions' format '%B%d%b'
zstyle ':completion:*:messages' format '%d'
zstyle ':completion:*:warnings' format 'No matches for: %d'
zstyle ':completion:*' group-name ''
 
# C-X hで現在のコンテキストが表示される
bindkey '^Xh' _complete_help
 
# ~/config/fun以下の補完関数を全部再ロード
r() {
  local f
  f=(~/config/fun/*(.))
  unfunction $f:t 2> /dev/null
  autoload -U $f:t
  compinit -u
}