前書き
patch当てることによって使える-Oオプション
このオプションを書いてしまうと忽ち補完ができなくなってしまうのでいじります
なお、私は-O cp932しか使わないのでそれが出るようにしか対応してません
vals配列いじれば好きに追加できます
やり方
このunzipの補完の実体はarchlinuxなら
/usr/share/zsh/functions/Completion/Unix/_zip
にあると思います
どこかわからなければ
% find $fpath -type f -exec grep -l '#compdef.* unzip' {} + /usr/share/zsh/functions/Completion/Unix/_zip
こんな感じでわかると思います。unzipを他のコマンドに変えたらそれの補完が出ると思います
後はこれを適当なディレクトリにコピーします
私は~/.zsh/functionsに置きました
後はmplayerの補完を参考にして気合で修正します
そして出来上がったのが
https://gist.github.com/silenvx/7433295
こちらです。修正箇所は
% diff -Narup _zip.orig _zip --- _zip.orig 2013-11-13 00:57:06.922524391 +0900 +++ _zip 2013-11-13 00:50:52.775261772 +0900 @@ -75,6 +75,7 @@ case $service in '-M[page output]' \ '-x[exclude the following names]' \ '-Z[zipinfo mode]:zipinfomode:->zipinfo' \ + '-O[specify a character encoding for DOS, Windows and OS/2 archives]:iconvList attachment:->iconvList' \ "(-p -f -u -l -t -z -n -o -j -C -X -q -qq -a -aa -v -L -M)1:zip file:_files -g '(#i)*.(zip|xpi|[ejw]ar)(-.)'" \ '*:file:->files' && ret=0 ;; @@ -132,6 +133,11 @@ case $state in _multi_parts / _zip_cache_list && return fi ;; + + iconvList) + vals=('cp932') + _describe -t iconvList 'iconv list' vals + ;; esac return ret
こんな感じになってます
使えるようにするため.zshrcのcompinitを読み込む前に
fpath=(~/.zsh/functions $fpath)
を書いておきます
後はzshを再起動させれば使えるようになりましたとさ
後書き
書き方が正しいのかは知りません
それと、書いてから気づいた
http://d.hatena.ne.jp/tyru/20120708/zsh_completion_for_unzip_o_option
既に同じようなことしてる人がいました。二番煎じなことしてすみません