Uma maneira é procurar o :
e se comportar como se fosse diferente:
#compdef foo
# put this file into a $fpath directory (typically one you create
# and prefix to that array) then 'rm ~/.zcompdump && exec zsh'
# until work-making (a temporary 'print -z "foo "' in your .zshrc
# may also speed debugging, as then you can go directly to the
# mashing-of-tab stage)
local curcontext="$curcontext" state line
local suf
typeset -A opt_args
_arguments -C -s \
'1: :->dofoo' \
&& return 0
case "$state" in
dofoo)
if compset -P '*[:]'; then
_values "parameters" $(_call_program getparam ls /)
else
if compset -S '[:]*'; then
suf=()
else
suf=( -qS ':' )
fi
_wanted "schemes" expl "scheme" compadd $suf[@] $(_call_program getscheme ls /)
fi
;;
esac
Os ls /
bits precisarão ser seus comandos apropriados, talvez com complicações adicionais para dividir adequadamente a saída em uma lista, dependendo do que esses programas emitem, etc.
Como aprendi isso: principalmente cd $fpath[-1]
e, em seguida, bisbilhotando especialmente as _chown
e _users
completions, que têm conclusão para :
handing. Mais informações .