summaryrefslogtreecommitdiff
path: root/plugins/capistrano
diff options
context:
space:
mode:
authorPablo Cantero <pablo@pablocantero.com>2014-01-26 10:18:04 -0200
committerPablo Cantero <pablo@pablocantero.com>2014-01-26 10:40:34 -0200
commit16ae4e127f6af2f8f3332025ce46d45ab5bcadac (patch)
tree237a6c27470a3d7ecb3b7abaf25d29d4227517ce /plugins/capistrano
parente2838f75f0be001cf34da321c9c712d48699e518 (diff)
downloadzsh-16ae4e127f6af2f8f3332025ce46d45ab5bcadac.tar.gz
zsh-16ae4e127f6af2f8f3332025ce46d45ab5bcadac.tar.bz2
zsh-16ae4e127f6af2f8f3332025ce46d45ab5bcadac.zip
Adds support capistrano multistage completion
Diffstat (limited to 'plugins/capistrano')
-rw-r--r--plugins/capistrano/_capistrano53
-rw-r--r--plugins/capistrano/capistrano.plugin.zsh11
2 files changed, 57 insertions, 7 deletions
diff --git a/plugins/capistrano/_capistrano b/plugins/capistrano/_capistrano
index 3cadf3d54..7a74b3732 100644
--- a/plugins/capistrano/_capistrano
+++ b/plugins/capistrano/_capistrano
@@ -1,10 +1,49 @@
-#compdef cap
+#compdef xcap cap
#autoload
-if [[ -f config/deploy.rb || -f Capfile ]]; then
- if [[ ! -f .cap_tasks~ || config/deploy.rb -nt .cap_tasks~ ]]; then
- echo "\nGenerating .cap_tasks~..." > /dev/stderr
- cap -v --tasks | grep '#' | cut -d " " -f 2 > .cap_tasks~
+# Added `xcap` 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
+ xcap -v --tasks | 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
- compadd `cat .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
diff --git a/plugins/capistrano/capistrano.plugin.zsh b/plugins/capistrano/capistrano.plugin.zsh
new file mode 100644
index 000000000..9a4a2cc34
--- /dev/null
+++ b/plugins/capistrano/capistrano.plugin.zsh
@@ -0,0 +1,11 @@
+# Added `xcap` because `cap` is a reserved word. `cap` completion doesn't work.
+# http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002fcap-Module
+
+func xcap() {
+ if [ -f Gemfile ]
+ then
+ bundle exec cap $*
+ else
+ cap $*
+ fi
+}