_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 _get_comp_words_by_ref -n : cur more_recent=`ls -1t .rake_tasks~ $rafefile */*/*.rake 2>/dev/null | head -n 1` if [ "$more_recent" != ".rake_tasks~" ]; then rake -T | awk '{print($2)}' > .rake_tasks~ fi tasks=$(cat .rake_tasks~) COMPREPLY=($(compgen -W "$tasks" -- "$cur")) __ltrim_colon_completions "$cur" fi } complete -F _rake rake