Autocomplete sinalizadores após um subcomando

2

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
    
por Lawful Lazy 30.12.2016 / 23:53

0 respostas