zsh での Capistrano と Ruby on Rails 関連の補完

tool > zsh
| | コメント(0) | トラックバック(0)

これは何か

スクリプト (_cap)

「cap」コマンドに対して補完を行います。

#compdef cap

typeset -A opt_args
local context state line
local opts tasks

opts=()
_call_program opts cap --help 2>/dev/null |
sed -e '1d;s/^ \+/{/;s/, /,/;s/ .*  /}"[/;s/\(".*\)$/\1]"/;/{[^}]*$/s/{//;/{[^,]*}/s/{\|}//g;' |
while read l; do
	echo $(eval echo -e $l) | sed -e 's/ --/\n--/'
done |
while read l; do
	if expr $l : '^-f\|^--f' > /dev/null; then
		l=$( echo $l | sed -e 's/\[/+[/;s/$/:file:_files -/;' )
	fi
	opts+=($l)
done

tasks=$(
	_call_program tasks $words -T 2>/dev/null |
	grep '^cap ' | sed -e 's/^cap //;s/ .*//'
)

local arguments_args
arguments_args=($opts)
arguments_args+=(":tasks:($tasks)")

_arguments $arguments_args && return 0

return 0

スクリプト (_generate)

「script/generate」と「script/destroy」コマンドに対して補完を行います。

#compdef generate destroy

typeset -A opt_args
local context state line

local -a opts
local actions

opts=()
actions=""
_call_program opts $words[1] --help 2>/dev/null |
sed -e '1d;s/^ \+/{/;s/, /,/;s/ .*  /}"[/;s/\(".*\)$/\1]"/;/{[^}]*$/s/{//;/{[^,]*}/s/{\|}//g;/Installed Generators/,/^$/s/^/___/;/Installed Generators/d;/^___$/d;/^$/d' |
while read l; do
	if expr $l : '^\{' > /dev/null; then
		echo $(eval echo -e $l) | sed -e 's/ --/\n--/'
	else
		echo $l
	fi
done |
while read l; do
	if expr $l : '^___' > /dev/null; then
		actions=$actions$(echo -e $l | sed -e 's/.*://;s/,//g;s/\n//;')
	elif expr $l : '^-' > /dev/null; then
		if expr $l : '^-f\|^--f' > /dev/null; then
			l=$( echo $l | sed -e 's/\[/+[/;s/$/:file:_files -/;' )
		fi
		opts+=($l)
	fi
done

local arguments_args
arguments_args=($opts)
arguments_args+=(":actions:($actions)")
arguments_args+=("*:file:_files -/")

_arguments $arguments_args && return 0

return 0

設定例

スクリプトを $HOME/.zsh/func/_cap や $HOME/.zsh/func/_generate に保存をして、.zshrc を以下のように設定します

fpath=($fpath $HOME/.zsh/func)
autoload -Uz compinit
compinit

トラックバック(0)

このブログ記事を参照しているブログ一覧: zsh での Capistrano と Ruby on Rails 関連の補完

このブログ記事に対するトラックバックURL: http://tec.toi-planning.net/mtos/mt-tb.cgi/914

コメントする