Bash completion for cake files

Nov 1, 2011 · bash · cake · coffeescript

To implement bash(1) tab completion for Cakefile task names all you need to do is add this completion function and command to your ~/.bashrc file:

# Task name completion for cake files.
function _cake() {
    local cur tasks
    cur="${COMP_WORDS[COMP_CWORD]}"
    tasks=$(cake 2>/dev/null | awk '{print $2}')
    if [ $COMP_CWORD -eq 1 ]; then
        # Task name completion for first argument.
        COMPREPLY=( $(compgen -W "$tasks" $cur) )
    else
        # File name completion for other arguments.
        COMPREPLY=( $(compgen -f $cur) )
    fi
}
complete -o default -F _cake cake c

Now it you type cake <Tab> at the bash command prompt you will get a list of tasks from the current Cakefile. As with all bash completions, if you start typing a name and press Tab then bash will complete the name for you.

To cut down key strokes I’ve also added a c alias for cake to ~/.bashrc:

alias c='cake'

This recipe was taken from An introduction to bash completion: part 2 and modified for cake.

See also my subsequent post Bash completion for Jake files.

« Previous Next »