_rake() { local cur prev rakef i COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} rakef="Rakefile" if [[ "$prev" == "-f" ]]; then _filedir return 0 fi if [[ "$cur" == *=* ]]; then prev=${cur/=*/} cur=${cur/*=/} if [[ "$prev" == "--rakefile=" ]]; then _filedir -o nospace return 0 fi fi if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '-n -H -I -N -P -q -f\ -r -s -T -t -h -v -V\ --dry-run --help '--libdir=' --nosearch --prereqs --quiet\ '--rakefile=' '--require=' --silent --tasks --trace --usage\ --verbose --version'\ -- $cur )) else for (( i=0; i < ${#COMP_WORDS[@]}; i++)); do case "${COMP_WORDS[i]}" in -f) eval rakef=${COMP_WORDS[i+1]} break ;; --rakefile=*|--rakefile\=*) eval rakef=${COMP_WORDS[i]/*=/} break ;; esac done [ ! -f $rakef ] && return 0 COMPREPLY=( $( rake -s -f "$rakef" -T | \ awk -F ' ' '/^rake / { print $2 }' | \ command grep "^$cur" )) fi } && complete -F _rake $filenames rake