# Zsh tab completion for capistrano

**URL:** <https://www.ruby-forum.com/t/zsh-tab-completion-for-capistrano/92720>\
**Category:** Deployment\
**Created:** [April 23, 2007, 2:07pm UTC](https://www.ruby-forum.com/t/zsh-tab-completion-for-capistrano/92720 "2007-04-23T14:07:52Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![jon](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/3bc359/32.png) [@jon](https://www.ruby-forum.com/u/jon)\
**Post date:** [April 23, 2007, 2:07pm UTC](https://www.ruby-forum.com/t/zsh-tab-completion-for-capistrano/92720/1 "2007-04-23T14:07:52Z")

</div>

I got tired of typing out things like “cap production  
restart\_mongrel\_cluster” (and can never remember whether it’s  
restart\_mongrel\_cluster or mongrel\_cluster\_restart"), so I hacked  
together a capistrano tab-completion script. Thought others might be  
interested, so here it is :

######################

# To use, save as .cap\_completion.zsh in your home dir, and add

“source .cap\_completion.zsh” to your .zshrc file

# 99% of this is ripped straight from

[http://weblog.rubyonrails.com/2006/3/9/fast-rake-task-completion-for-zsh](http://weblog.rubyonrails.com/2006/3/9/fast-rake-task-completion-for-zsh)

# Any broken stuff is probably mine.

\_cap\_does\_task\_list\_need\_generating () {  
if [! -f .cap\_tasks]; then return 0;  
else  
accurate=$(stat -f%m .cap\_tasks)  
changed=$(stat -f%m config/deploy.rb)  
return $(expr $accurate ‘\>=’ $changed)  
fi  
}

\_cap () {  
if [-f config/deploy.rb]; then  
if \_cap\_does\_task\_list\_need\_generating; then  
echo “\nGenerating .cap\_tasks…” \> /dev/stderr  
cap show\_tasks -q | cut -d " " -f 1 | sed -e ‘/^ \*$/D’ -e ‘1,2D’

> .cap\_tasks  
> fi  
> compadd `cat .cap_tasks`  
> fi  
> }

compdef \_cap cap  
######################

Would love to see any improvements - my script-fu is weak.

Jon
