Completion Shell

    The Completion Shell consists of a number of sub commands to assist thedeveloper creating its completion script. Each for a different step in theautocompletion process.

    For the first step commands outputs the available Shell Commands, includingplugin name when applicable. (All returned possibilities, for this and the othersub commands, are separated by a space.) For example:

    Returns:

    1. acl api bake command_list completion console i18n schema server test testsuite upgrade

    Your completion script can select the relevant commands from that list tocontinue with. (For this and the following sub commands.)

    subCommands

    Once the preferred command has been chosen subCommands comes in as the secondstep and outputs the possible sub command for the given shell command. Forexample:

    1. bin/cake Completion subcommands bake

    As the third and final options outputs options for the given (sub) command asset in getOptionParser. (Including the default options inherited from Shell.)For example:

    1. bin/cake Completion options bake

    Returns:

    1. --help -h --verbose -v --quiet -q --everything --connection -c --force -f --plugin -p --prefix --theme -t

    You can also pass an additional argument being the shell sub-command : it willoutput the specific options of this sub-command.

    First, make sure the bash-completion library is installed. If not, you do itwith the following command:

    Create a file named cake in /etc/bash_completion.d/ and put the inside it.

    Note

    If you are using MacOS X, you can install the bash-completion libraryusing homebrew with the command .The target directory for the cake file will be/usr/local/etc/bash_completion.d/.

    Bash Completion file content

    This is the code you need to put inside the cake file in the correct locationin order to get autocompletion when using the CakePHP console:

    1. #
    2. # Bash completion file for CakePHP console
    3. #
    4.  
    5. _cake()
    6. {
    7. local cur prev opts cake
    8. COMPREPLY=()
    9. cake="${COMP_WORDS[0]}"
    10. prev="${COMP_WORDS[COMP_CWORD-1]}"
    11.  
    12. if [[ "$cur" == -* ]] ; then
    13. if [[ ${COMP_CWORD} = 1 ]] ; then
    14. opts=$(${cake} Completion options)
    15. elif [[ ${COMP_CWORD} = 2 ]] ; then
    16. opts=$(${cake} Completion options "${COMP_WORDS[1]}")
    17. else
    18. opts=$(${cake} Completion options "${COMP_WORDS[1]}" "${COMP_WORDS[2]}")
    19. fi
    20.  
    21. COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
    22. return 0
    23. fi
    24.  
    25. if [[ ${COMP_CWORD} = 1 ]] ; then
    26. opts=$(${cake} Completion commands)
    27. COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
    28. return 0
    29. fi
    30.  
    31. if [[ ${COMP_CWORD} = 2 ]] ; then
    32. opts=$(${cake} Completion subcommands $prev)
    33. if [[ $COMPREPLY = "" ]] ; then
    34. _filedir
    35. return 0
    36. fi
    37. return 0
    38. fi
    39.  
    40. opts=$(${cake} Completion fuzzy "${COMP_WORDS[@]:1}")
    41. COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
    42. if [[ $COMPREPLY = "" ]] ; then
    43. _filedir
    44. return 0
    45. fi
    46. return 0;
    47. }
    48.  
    49. complete -F _cake cake bin/cake

    Once enabled, the autocompletion can be used the same way than for otherbuilt-in commands, using the TAB key.Three type of autocompletion are provided. The following output are from a fresh CakePHP install.

    Sample output for commands autocompletion:

    1. $ bin/cake <tab>
    2. bake i18n schema_cache routes
    3. console migrations plugin server

    Subcommands

    Sample output for subcommands options autocompletion:

    1. $ bin/cake bake -<tab>
    2. -c --everything --force --help --plugin -q -t -v
    3. --connection -f -h -p --prefix --quiet --theme --verbose