{{toc}}

!私的補完ファイルの使い方

補完ファイルは _emacs のように `_` から始まるファイル名にして、$fpath のパスが通っているディレクトリに保存すれば、次回 zsh 起動時 (つまり端末起動時) から利用できる。

要するに、.zshrc に
 fpath=($HOME/.zsh/myfunc $fpath)
と書いておいて ~/.zsh/myfunc に作った自作補完ファイルを置いて、
 autoload -U compinit ; compinit
を呼べばよろしい。

!単純な補完ファイルの書き方

最も単純なものは以下のような構造となる。ここでは emacs の --help,-q,--no-init-file,-u,--user の 5 つのオプションしか定義していない。

 #compdef emacs
 
 _arguments -C -s \
   '--help[display help message]' \
   '(--no-init-file -q)'{--no-init-file,-q}'[load neither ~/.emacs nor default.el]' \
   '(-u --user)'{-u,--user}'[load ~USER/.emacs instead of your own]:user name:_users' \
   '*:file:_files' && return 0
 return 1

要点
* #compdef の行は適用するコマンドを書く。上の例では、emacs にしか適用されないが、#compdef emacs mule と書き換えれば、mule コマンドにも同様の補完がなされる。もちろん、補完ファイルではなく、.zshrc に
 compdef _emacs mule
と書いておくことでも、mule コマンドに emacs と同様の補完が行える。
* _arguments 関数の元で、(emacs の)オプションを羅列していく。
* 最後の '*:file:_files' && return 0 はファイルを補完するという意味。通常はこれでいいだろう。なお、拡張子などで補完ファイルを絞りたい場合は '*:file:_files -g "*.(c|cc|h)"' のようにすればよい。

_arguments での引数のフォーマットは
 '(引数排他リスト)-引数[説明]:zstyle 命令'
のような形で、引数排他リスト、説明、zstyle 命令の部分は省略可能。

例えば '-a ファイル' のように補完するには、
 '-a[description]:file:_files'
とする。

参考文献
http://www.linux-mag.com/2002-07/power_01.html
([[日本語訳|http://www.ayu.ics.keio.ac.jp/~mukai/translate/write_zsh_functions.html]])

!Fedora Core 用補完ファイルパッチ

*{{attach_anchor(zsh-4.2.5-complete-fedora-ja.20050415.patch.bz2)}} 7f7f29fc288f25602abaabc42e8ca1a8
*{{attach_anchor(zsh-4.2.0-complete-fedora-ja.20040804.patch.bz2)}} ecc82047f7c78112e86af698885ea249
*{{attach_anchor(zsh-4.2.1-complete-fedora-ja.20041005.patch.bz2)}} 06fa2b35b3faab582d65ce1d92f99620
*{{attach_anchor(zsh-4.2.4-complete-fedora-ja.20050218.patch.bz2)}} b9d10949c60fb521962c72d3551925c8

コンパイル前のソースに当てて使ってください。特に UTF-8 とか使っていないので、fedora 以外でも普通に動きます。
ソースのディレクトリ (zsh-4.2.?/) で patch -p1 してください。

*zsh-4.2.5-complete-fedora-ja.20050415
**iconvの補完を4.2.5用にやや修正
**suをオプション補完するようにした
*zsh-4.2.4-complete-fedora-ja.20050218
**rpmbuild の補完で .nosrc.rpm も補完するようにした
**javaのクラス補完をちょこっと高速化(>>790参照)
**firefox 1.0 の補完に対応
*zsh-4.2.1-complete-fedora-ja.20041005
**CVS版を流用していた cvs,subversion,mplayer は抜いた
**(>>560=553様提供) プロセス補完の不具合修正
**(>>627=623様提供) 非GNU な iconv の不具合修正
**(>>563様提供) vim の補完リストの追加
**(>>686様提供) mplayer の補完の不具合修正
**rpm のパッケージ名を /var/log/rpmpkgs から拾うようにした
*zsh-4.2.0-complete-fedora-ja.20040804
**xlsfonts の補完リスト
**mozilla-firefox の時、プロファイルを .mozilla/firefox から拾う (firefox 0.9 用)
**emacs の補完リスト
**'kill #[TAB]' としたときに自分の全プロセスを補完するように
**_webbrowser に htmlview を追加
**tar で bzip2 を扱うオプション 'j' の追加
**lha の補完リスト
**最近の rpm コマンドに合わせた ( rpmbuild での補完)
**LaTeX 関連のコマンドで p* という形のコマンドも補完できるように
**ホスト名を補完する時に .ssh/known_hosts からホスト名を拾うように
**(>>39 様提供) appletviewer の補完の補正パッチをマージ
**(>>258 様提供) gcc で .cpp の補完
**cvs,subversion,mplayer 補完の修正 (CVS版を流用)
**その他少々

以上の >>??? 様 は 2ch の[[zsh その3|http://pc5.2ch.net/test/read.cgi/unix/1080002786/]]のレス番号の書込者に対応します