Skip to content

Commit

Permalink
Add rake task completion
Browse files Browse the repository at this point in the history
  • Loading branch information
ymendel committed Oct 21, 2012
1 parent 13fa8b2 commit 2a41db0
Showing 1 changed file with 57 additions and 0 deletions.
57 changes: 57 additions & 0 deletions ruby/rake_completion.bash
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# bash completion for rake
#
# some code from on Jonathan Palardy's http://technotales.wordpress.com/2009/09/18/rake-completion-cache/
# and http://pastie.org/217324 found http://ragonrails.com/post/38905212/rake-bash-completion-ftw
#
# For details and discussion
# http://turadg.aleahmad.net/2011/02/bash-completion-for-rake-tasks/
#
# INSTALL
#
# Place in your bash completions.d and/or source in your .bash_profile
# If on a Mac with Homebrew, try "brew install bash-completion"
#
# USAGE
#
# Type 'rake' and hit tab twice to get completions.
# To clear the cache, run rake_cache_clear() in your shell.
#

function _rake_cache_path() {
# If in a Rails app, put the cache in the cache dir
# so version control ignores it
if [ -e 'tmp/cache' ]; then
prefix='tmp/cache/'
fi
echo "${prefix}.rake_t_cache"
}

function rake_cache_store() {
rake --tasks --silent > "$(_rake_cache_path)"
}

function rake_cache_clear() {
rm -f .rake_t_cache
rm -f tmp/cache/.rake_t_cache
}

export COMP_WORDBREAKS=${COMP_WORDBREAKS/\:/}

function _rakecomplete() {
# error if no Rakefile
if [ ! -e Rakefile ]; then
echo "missing Rakefile"
return 1
fi

# build cache if missing
if [ ! -e "$(_rake_cache_path)" ]; then
rake_cache_store
fi

local tasks=`awk '{print $2}' "$(_rake_cache_path)"`
COMPREPLY=($(compgen -W "${tasks}" -- ${COMP_WORDS[COMP_CWORD]}))
return 0
}

complete -o default -o nospace -F _rakecomplete rake

1 comment on commit 2a41db0

@ymendel
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't actually working correctly, as this shows:

$ rake notes<tab><tab>
notes           notes:custom    notes:fixme     notes:optimize  notes:todo      
$ rake notes:to<tab>
$ rake notes:notes:todo

💥

Please sign in to comment.