Hi!
The doc page for _alternative (citing `info zsh`, menu item `Completion
Functions') states:
_alternative [ -O NAME ] [ -C NAME ] SPEC ...
<...>
The tags to use and the action to perform if a tag is requested are
described using the SPECs which are of the form:
'TAG:DESCR:ACTION'. The TAGs are offered using _tags and if the
tag is requested, the ACTION is executed with the given description
DESCR. The ACTIONs are those accepted by the _arguments function
(described below), excluding the '->STATE' and '=...' forms.
<...>
Later on, the text for _arguments advises to escape the separating
colons between the match candidate and its description in a (( ))
action spec, due to more complex spec parsing and further optional
fields. A thorough reader of the docs might think the same is
required by _alternative as well.
I've been looking at the implementation of _alternative lately; the
function splits its specs into exactly 3 fields, delimited by `:'. The
following seems to be true:
* the first field is delimited by the first colon;
* the second field spans from after the first field's delimiter to the
nearest colon;
* the rest of the spec is interpreted as the action field, unlike
the specs for _arguments.
This means that the following completion function should offer either
letters from the set (a b c y z) or hexadecimal digits with their
decimal equivalents as descriptions:
function _ooo {
_alternative \
'letters:letter:(a b c y z)' \
'digits:digit:(( 0:0 1:1 2:2 3:3 4:4 5:5 6:6 7:7 8:8 9:9 A:10 B:11 C:12 D:13 E:14 F:15 ))'
}
It does for me in a `zsh -f` instance.
Is this intentional? If yes, should we fix the doc paragraph
on _alternative?
Thanks in advance!
Attachment:
signature.asc
Description: PGP signature