Является заглавным словом? - завершение?
Я пытаюсь создать завершение Miststage Capistrano для ZSH:
$ cap |
production staging
$ cap production |
deploy -- Deploy a new release
deploy:bundle -- Bundle
...
Код завершения:
#compdef cap
#autoload
# /Users/pablo/.oh-my-zsh/custom/plugins/capistrano_custom/_capistrano_custom
local curcontext="$curcontext" state line ret=1
local -a _configs
_arguments -C \
'1: :->cmds' \
'2:: :->args' && ret=0
_cap_tasks() {
if [[ ! -f .cap_tasks~ ]]; then
echo "\nGenerating .cap_tasks~..." > /dev/stderr
cap -v --tasks | grep '#' | cut -d " " -f 2 > .cap_tasks~
fi
cat .cap_tasks~
}
_cap_stages() {
find config/deploy -name \*.rb | cut -d/ -f3 | sed s:.rb::g
}
case $state in
cmds)
if [[ -d config/deploy ]]; then
compadd `_cap_stages`
else
compadd `_cap_tasks`
fi
ret=0
;;
args)
compadd `_cap_tasks`
ret=0
;;
esac
return ret
Эта проблема:
#compdef cap
не работает Если я наберу cap
и [TAB] не выполняет завершение, но с другими словами (т.е. shipit
) работает отлично.
Есть идеи?
Решение:
cap действительно зарезервированное слово, и кажется, что мы не можем использовать его с #compdef cap
,
Мне интересно, как раньше работали дополнения cap и capistrano (возможно, старая версия ZSH).
- Решение dotfiles код: capistrano_custom
- Решение oh-my-zsh / PR: # 2471
Оба решения используют shipit
вместо cap
,
$ shipit |
production staging
$ shipit production |
deploy -- Deploy a new release
deploy:bundle -- Bundle
...
1 ответ
Да, cap
является встроенным ZSH Цитирование из документов Zsh:
Модуль zsh/cap используется для управления наборами возможностей POSIX.1e (POSIX.6). [...]. Встроенные модули в этом модуле:
cap [средства] Измените наборы возможностей процесса оболочки на указанные возможности, в противном случае отобразите текущие возможности оболочки.