Capistrano completion in zsh
I've decided to try out zsh for a while, and while I already get completions for most everything I want, out of the box, I am missing completions for Capistrano tasks.
I had been using brynary's Bash Capistrano completion script. I was able to find a mailing list post about setting up Capistrano task completions for zsh, but it didn't quite work for me. (show_tasks isn't a valid task.) I also didn't like throwing the .cap_tasks file in the top-level of the project. I already had a ~/.zsh_cache/ directory for caching zsh's completions, so I decided to modify the script I found to put the cache file there, instead.
_cap_does_task_list_need_generating () { if [ ! -f cap_tasks ]; then return 0; else accurate=$(stat -f%m ~/.zsh_cache/cap_tasks-$(echo $PWD | sha512sum)) 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 cap -T | grep '^cap' | cut -d' ' -f2 >! ~/.zsh_cache/cap_tasks-$(echo $PWD | sha512sum) fi compadd `cat ~/.zsh_cache/cap_tasks-$(echo $PWD | sha512sum)` fi } compdef _cap cap
I have the above in ~/.zsh.d/S50_capistrano, which automatically gets loaded on startup.
for zshrc_snipplet in ~/.zsh.d/S[0-9][0-9]*[^~] ; do source $zshrc_snipplet done
