_cake() { local cur prev i local cmdOpts COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} if [[ "$cur" == -* && "$prev" == "cake" ]]; then cmdOpts="-app -working -root -core" else local corePath controllers models shells corePath=( $( compgen -W '`cake |grep "\-core"`')) corePath="${corePath[1]}" shells=`cd $corePath/cake/console/libs && ls *.php | awk '{sub(/\.php/, "");print}'` controllers=`cd $corePath/app/controllers && ls *.php | awk '{sub(/_controller\.php/, "");print}'` models=`cd $corePath/app/models && ls *.php | awk '{sub(/\.php/, "");print}'` cmdOpts="$shells help" case ${COMP_WORDS[1]} in i18n) cmdOpts="" ;; api) cmdOpts="behavior cache controller component helper model view help" ;; bake) cmdOpts="all project db_config model view controller help" ;; acl) cmdOpts="create delete setParent getPath check grant deny inherit view initdb help" ;; console) cmdOpts="" ;; schema) if [[ "$cur" == -* ]]; then cmdOpts="-connection -path -file -s -dry -f" else cmdOpts="view generate dump run help" fi ;; esac for (( i=2; i<=$COMP_CWORD-1; ++i )) ; do opt=${COMP_WORDS[$i]} cmdOpts="" case $i in 2) case ${COMP_WORDS[1]} in bake) case $opt in all) cmdOpts=$models ;; model) cmdOpts="help" ;; controller) cmdOpts="help" ;; view) cmdOpts=$controllers ;; esac ;; schema) case $opt in run) cmdOpts="create update" ;; esac ;; esac ;; 3) if [[ ${COMP_WORDS[1]} == "bake" && ${COMP_WORDS[2]} == "controller" ]]; then cmdOpts="scaffold admin" fi if [[ ${COMP_WORDS[1]} == "schema" && ${COMP_WORDS[2]} == "run" ]]; then cmdOpts=$controllers fi ;; 4) if [[ ${COMP_WORDS[1]} == "bake" && ${COMP_WORDS[2]} == "controller" ]]; then case ${COMP_WORDS[4]} in scaffold) cmdOpts="admin" ;; admin) cmdOpts="scaffold" ;; esac fi ;; esac done COMPREPLY=( $( compgen -W '$cmdOpts' -- $cur )) fi } [ "$have" ] && complete -F _cake cake