バージョン 2.5 で追加.
コンソールを使うことは開発者に多くの可能性を与えます。しかし、コマンドを完全に覚えて 記述することは退屈です。特に、異なるコマンドを緻密に繰り返しながら、新しいシェルを 開発する時などです。Completion シェルは、bash ・ zsh ・ fish などのシェルの 補完スクリプトを書くための API を提供することによって、この問題を支援します。
Completion シェルは、開発者が補完スクリプトの作成を支援するためのいくつかのサブコマンドを 含みます。それぞれオートコンプリート順序の中の異なるステップのためのものです。
最初のステップは、利用可能なシェルコマンドをプラグイン名が必要な場合は付加して出力します。 (出力結果は、このコマンド自身や他のサブコマンド全てがスペースで区切られています。) 例:
./Console/cake Completion commands
実行結果:
acl api bake command_list completion console i18n schema server test testsuite upgrade
あなたの補完スクリプトは、一連のリストから関連するコマンドを選ぶことができます。 (このコマンドや以下のサブコマンドなど)
いったん気に入ったコマンドが選ばれると、次の段階として subCommands に入ります。そして、 与えられたシェルコマンドのために利用可能なサブコマンドを出力します。例:
./Console/cake Completion subcommands bake
実行結果:
controller db_config fixture model plugin project test view
三番目で最後の options は getOptionParser で設定されるような 与えられた (サブ) コマンドのためのオプションを出力します。 (Shell から継承された デフォルトのオプションを含みます。) 例:
./Console/cake Completion options bake
実行結果:
--help -h --verbose -v --quiet -q --connection -c --theme -t
以下の bash の例は、原著作者によるものです:
# bash completion for CakePHP console
_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
COMPREPLY=( $(compgen -df -- ${cur}) )
return 0
fi
return 0
fi
opts=$(${cake} Completion fuzzy "${COMP_WORDS[@]:1}")
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
if [[ $COMPREPLY = "" ]] ; then
COMPREPLY=( $(compgen -df -- ${cur}) )
return 0
fi
return 0;
}
complete -F _cake cake Console/cake