Является заглавным словом? - завершение?

Я пытаюсь создать завершение 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).

Оба решения используют 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 [средства] Измените наборы возможностей процесса оболочки на указанные возможности, в противном случае отобразите текущие возможности оболочки.

Другие вопросы по тегам