diff options
Diffstat (limited to 'oh-my-zsh/plugins/capistrano/_capistrano')
| -rw-r--r-- | oh-my-zsh/plugins/capistrano/_capistrano | 49 | 
1 files changed, 49 insertions, 0 deletions
diff --git a/oh-my-zsh/plugins/capistrano/_capistrano b/oh-my-zsh/plugins/capistrano/_capistrano new file mode 100644 index 0000000..a79e47b --- /dev/null +++ b/oh-my-zsh/plugins/capistrano/_capistrano @@ -0,0 +1,49 @@ +#compdef capit +#autoload + +# Added `capit` because `cap` is a reserved word. `cap` completion doesn't work. +# http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002fcap-Module + +local curcontext="$curcontext" state line ret=1 +local -a _configs + +_arguments -C \ +  '1: :->cmds' \ +  '2:: :->args' && ret=0 + +_cap_tasks() { +  if [[ -f config/deploy.rb || -f Capfile ]]; then +    if [[ ! -f .cap_tasks~ ]]; then +      capit --tasks | sed 's/\(\[\)\(.*\)\(\]\)/\2:/' | awk '{command=$2; $1=$2=$3=""; gsub(/^[ \t\r\n]+/, "", $0); gsub(":", "\\:", command); print command"["$0"]"}' > .cap_tasks~ +    fi + +    OLD_IFS=$IFS +    IFS=$'\n' +    _values 'cap commands' $(< .cap_tasks~) +    IFS=$OLD_IFS +    # zmodload zsh/mapfile +    # _values ${(f)mapfile[.cap_tasks~]} +  fi +} + +_cap_stages() { +  compadd $(find config/deploy -name \*.rb | cut -d/ -f3 | sed s:.rb::g) +} + +case $state in +  cmds) +    # check if it uses multistage +    if [[ -d config/deploy ]]; then +      _cap_stages +    else +      _cap_tasks +    fi +    ret=0 +    ;; +  args) +    _cap_tasks +    ret=0 +    ;; +esac + +return ret  | 
