Travailler avec la console donne au développeur beaucoup de possibilités mais devoir complètement connaître et écrire ces commandes peut être fastidieux. Spécialement lors du développement de nouveaux shells où les commandes diffèrent à chaque itération. Les Shells de complétion aident à ce niveau-là en fournissant une API pour écrire les scripts de complétion pour les shells comme bash, zsh, fish etc…
Les Shells de complétion se composent d’un certain nombre de sous-commandes qui permettent au développeur de créer son propre script de complétion. Chacun pour une étape différente dans le processus d’autocomplétion.
Pour les premières étapes, les commandes affichent les Commandes de Shell disponibles, y compris le nom du plugin quand il est valable. (Toutes les possibilités retournées, pour celle-ci et les autres sous-commandes, sont séparées par un espace.) Par exemple:
bin/cake Completion commands
Retourne:
acl api bake command_list completion console i18n schema server test testsuite upgrade
Votre script de complétion peut sélectionner les commandes pertinentes de cette liste pour continuer avec. (Pour celle-là et les sous-commandes suivantes.)
Une fois que la commande préférée a été choisie, les Sous-commandes apparaissent à la deuxième étape et affiche la sous-commande possible pour la commande de shell donnée. Par exemple:
bin/cake Completion subcommands bake
Retourne:
controller db_config fixture model plugin project test view
En troisième et dernière option, les options de sortie pour une (sous) commande donnée comme définies dans getOptionParser. (Y compris les options par défaut héritées du Shell.) Par exemple:
bin/cake Completion options bake
Retourne:
--help -h --verbose -v --quiet -q --everything --connection -c --force -f --plugin -p --prefix --theme -t
Vous pouvez passer un autre argument représentant une sous-commande du shell : cela vous retournera les options spécifiques à cette sous-commande.
Tout d’abord, assurez-vous que la librairie bash-completion est installée. Si elle ne l’est pas, vous pouvez le faire en exécutant la commande suivante:
apt-get install bash-completion
Créez un fichier cake dans /etc/bash_completion.d/ et placez-y le Contenu du fichier bash d’autocomplétion.
Sauvegardez le fichier et rédémarrez la console.
Note
Si vous utilisez MacOS X, vous pouvez installer la librairie
bash-completion en utilisant homebrew avec la commande suivante :
brew install bash-completion
. Le répertoire cible du fichier cake
devra être /usr/local/etc/bash_completion.d/.
Voici le code que vous devez saisir dans le fichier cake (préalablement créé au bon emplacement pour bénéficier de l’autocomplétion quand vous utilisez la console CakePHP:
#
# Fichier de completion Bash pour la console CakePHP
#
_cake()
{
local cur prev opts cake
COMPREPLY=()
cake="${COMP_WORDS[0]}"
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
if [[ "$cur" == -* ]] ; then
if [[ ${COMP_CWORD} = 1 ]] ; then
opts=$(${cake} Completion options)
elif [[ ${COMP_CWORD} = 2 ]] ; then
opts=$(${cake} Completion options "${COMP_WORDS[1]}")
else
opts=$(${cake} Completion options "${COMP_WORDS[1]}" "${COMP_WORDS[2]}")
fi
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
if [[ ${COMP_CWORD} = 1 ]] ; then
opts=$(${cake} Completion commands)
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
if [[ ${COMP_CWORD} = 2 ]] ; then
opts=$(${cake} Completion subcommands $prev)
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
if [[ $COMPREPLY = "" ]] ; then
_filedir
return 0
fi
return 0
fi
opts=$(${cake} Completion fuzzy "${COMP_WORDS[@]:1}")
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
if [[ $COMPREPLY = "" ]] ; then
_filedir
return 0
fi
return 0;
}
complete -F _cake cake bin/cake
Une fois activée, l’autocompletion peut être utilisée de la même manière que pour les autres commandes natives du système, en utilisant la touche TAB. Trois types d’autocompletion sont fournis. Les examples de retour qui suivent proviennent d’une installation fraîche de CakePHP.
Exemple de rendu pour l’autocomplétion des commandes:
$ bin/cake <tab>
bake i18n schema_cache routes
console migrations plugin server
Exemple de rendu pour l’autocomplétion des sous-commandes:
$ bin/cake bake <tab>
behavior helper shell
cell mailer shell_helper
component migration template
controller migration_snapshot test
fixture model
form plugin
Exemple de rendu pour l’autocomplétion des options d’une sous-commande:
$ bin/cake bake -<tab>
-c --everything --force --help --plugin -q -t -v
--connection -f -h -p --prefix --quiet --theme --verbose