Existe um programa que chamei de luarocks
que apresenta uma lista de subcomandos como build
, install
e make
, com sinalizadores após eles. No final, um comando gostaria do seguinte:
# luarocks install varargs --server=https://example.com/'
$ luarocks make ./varargs.rockspec
$ luarocks pack ./varargs.rockspec
O comando zsh autocomplete _arguments
é capaz de obter uma lista de sinalizadores como -s
e --long
e criar descrições para eles, como os seguintes:
_arguments "-s[short flag]" "--long[long flag]"
No entanto, isso não funciona bem se um subcomando como install
for incluído no comando, portanto, quando você digitar luarocks install <tab>
, não haverá lista de sinalizadores. Como posso deixar _argument
ignorar quaisquer subcomandos que não estejam incluídos na lista de sinalizadores?
Para referência, aqui está o meu código atual:
#compdef luarocks
local curcontext="$curcontext" state line
typeset -A opt_args
local -a lr_commands
lr_commands=(
build config doc
download help install lint
list make new_version pack
path purge remove search
show unpack upload write_rockspec
)
local -a generic_args
generic_args=(
"--long[long]"
"-s[short]"
)
_arguments \
'1: :->cmd'\
'*: :->args'
case $state in
cmd)
_arguments "1:Commands:($lr_commands)"
;;
args)
_arguments $generic_args
;;
esac
Tags zsh autocomplete