Zsh completion is a rather complex beast, and I find the man-page very difficult to read, especially it's missing (simple) examples of all the various optspec forms etc. I haven't managed to find anything online myself yet so help would be most appreciated.
As an example here's what I'm struggling with at the moment, and the zshcompsys
man-page doesn't offer any clarifications. I have
#compdef mtt2
_arguments -s : \
'-h' '--help' \
'-V' '--version' \
':foobars:(foo bar baz)'
Now, when I type mtt2 <TAB>
I'm only offered foo
, bar
and baz
as completions, why not -h
, --help
, etc, as well?
What magic do I need to pass to _arguments
in order to be offered all possibilities?
You need to start argument that you complete with dash (I mean that argument that you type to test, not _arguments
argument). You should either look at zstyle
, try to pass -h
and others just like :foobars:
or even directly use compadd
. Examples:
#compdef test A=( -h --help -V --version foo bar baz ) compadd -a A
-h
and others just like :foobars:
:
#compdef test A=( -h --help -V --version ) _arguments \ - foobars \ ':foobars:(foo bar baz)' \ - options \ ":arguments:($A)"or
A=( -h --help -V --version foo bar baz ) _arguments \ ":::($A)"
zstyle
controls completion style. It is described in «COMPLETION SYSTEM CONFIGURATION» section in man zshcompsys
and probably has an option that will enable completing of switches, but I do not know which option controls that.I found this to be a good introduction: http://www.linux-mag.com/id/1106/
It's behind a login-wall, but you didn't specify...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With