zsh
is great but its completion system is very diverse. And the documentation lacks good examples. Is there a template for completing for a specific application. Th
Simple completion needs are better addressed with _describe
, it pairs an array holding completion options and a description for them (you can use multiple array/description pairs, check the manual).
(_arguments
is great but too complex.)
[...]
First create a file
echo "foo\nbar\nbaz\nwith spac e s\noh:noes\noh\:yes" >! ~/simple-complete
Then create a file _simple
somewhere in your $fpath
:
#compdef simple
# you may wish to modify the expansion options here
# PS: 'f' is the flag making one entry per line
cmds=( ${(uf)"$(< ~/simple-complete)"} )
# main advantage here is that it is easy to understand, see alternative below
_describe 'a description of the completion options' cmds
# this is the equivalent _arguments command... too complex for what it does
## _arguments '*:foo:(${cmds})'
then
function simple() { echo $* }
autoload _simple # do not forget BEFORE the next cmd!
compdef _simple simple # binds the completion function to a command
simple [TAB]
it works. Just make sure the completion file _simple
is placed somewhere in your fpath
.
Notice that :
in the option list is supposed to be used for separating an option from their (individual) description (oh:noes
). So that won't work with _describe
unless you quote it (oh\:yes
). The commented out _arguments
example will not use the :
as a separator.