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