2011/03/07

zshでperlbrewを補完するようにしたので…

 zshの補完ってホントに便利ですよねー
堕落しきった俺には、もはやperlbrewのサブコマンドを入力することさえ困難なのです。

 というわけで、perlbrewのzshでのコマンド補完(改) - LAPISLAZULI HILL#Hatena のルールを利用させてもらって、補完できるようにしました。

 でも、このルールは若干古くなっていたので、ちょこっと修正しまった↓
具体的には、switchとuseの補完候補にinstalledサブコマンド(listサブコマンドの古いやつ)を使うようになっていたので、修正しています。

#compdef perlbrew
typeset -A opt_args
local context state line
_arguments -C \
'(- 1 *)'{-h,--help}'[prints help]' \
'(-f --force)'{-f,--force}'[Force installation of a perl]' \
'(-q --quiet)'{-q,--quiet}'[Log output to a log file rather than STDOUT. This is the default.]' \
'(-v --verbose)'{-v,--verbose}'[Log output to STDOUT rather than a logfile]' \
'-D=-[pass through switches to the perl Configure script]' \
'(-as)'-as+'[Install a given perl under an alias.]:alias name' \
'1: :->cmds' \
'(1 *): :->args' && return 0
case $state in
cmds)
local -a cmds
cmds=( init install switch list use off help mirror version )
_describe -t commands 'perlbrew command' cmds && ret=0
;;
args)
case $line[1] in
switch | use)
local -a versions
versions=(system $(_call_program commands perlbrew list 2>/dev/null | perl -ne '!m{\*|^\s*/} && s/\n/ / && print'))
_wanted versions expl 'perl version' compadd $versions && ret=0
;;
install)
if ( [[ ${+_perlbrew_installs} -eq 0 ]] || _cache_invalid PERLBREW_installs ) && ! _retrieve_cache PERLBREW_installs; then
_perlbrew_installs=($(_call_program commands curl -L0 http://search.cpan.org/dist/perl/ 2>/dev/null |perl -ne 'm{^\s*<option value="[^"]+/(perl-[^"]+)/">} && print "$1\n"'))
_store_cache PERLBREW_installs _perlbrew_installs
fi
_wanted releases expl 'perl release' compadd -a _perlbrew_installs && ret=0
;;
*)
(( ret )) && _message 'no more arguments'
;;
esac
;;
esac
return ret
view raw _perlbrew hosted with ❤ by GitHub

 あとついでに、install候補も補完できるようにしときました。(※CPANからリストを取ってくるので、最初の補完には時間がかかりますが(>_<;)) これで、いちいちバージョンを調べなくても気軽にいろんなperlを試せますね!


 zshの補完関数はじめて書いたけど、こんなんでいいのかな?

3/11追記

 App-perlbrew-0.17にアップデートしたら、switch候補がちゃんと動かなくなったぽいので、修正しました。

0 件のコメント:

コメントを投稿