Zsh completion arguments: Difference between revisions

From wikinotes
Line 5: Line 5:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
_arguments \
_arguments \
   {-h,--help}'[show help]' \  # short/long form (no value)
   {-h,--help}'[show help]' \
   '-o[output file]:::_files  # short form w/ following value (a file)
      # param: -h/--help
      # desc:  show help
      # value:  (no value)
   '-o[output file]:::_files \
      # param:  -o
      # desc:   output file
      # value:  complete any file
</syntaxhighlight>
</syntaxhighlight>
</blockquote><!-- Flag Arguments -->
</blockquote><!-- Flag Arguments -->

Revision as of 21:28, 24 July 2021

Arguments Params

Flag Arguments

_arguments \
   {-h,--help}'[show help]' \
       # param:  -h/--help
       # desc:   show help
       # value:  (no value)
   '-o[output file]:::_files \
       # param:  -o
       # desc:   output file
       # value:  complete any file

Positional Arguments

_arguments \
    '1:user:_users' \              # 1st positional arg (required)
    '2:priority:(low med high)' \  # 2nd positional arg (required) (complete to low/med/high)
    '3::group:_groups' \           # 3nd positional arg (optional)

Value for last defined Param

:${message}:${action}   # reqd completion for prev command
::${message}:${action}  # optional completion for prev command
_arguments \
    {-h,--help}'[show help]' \
    '*::extra:(foo bar baz)' \  # any extra parameters, (complete to (foo bar baz))
    ':value:(foo bar baz)'      # after prev param (extra), always complete one of these words

Rest Arguments

Any arguments not consumed earlier use this completer.

*:${message}:${action}    # 
*::${message}:${action}   # 
*:::${message}:${action}  #

State Setting/Parsing

The -C argument enables state-setting.
This lets you determine the parser that gets used based on the state you set.

local state               # scope state locally

_arguments -C \
    '*:extra:->my-state'  # sets `$state='my-state'`

case $state in
    (my-state)
        _arguments '1:foo:(one two three four)'
        ;;
esac