Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

[PATCH] complete two or more options for zsh



% zsh -<TAB>

This offers zsh's options, but the following does not work:

% zsh -v -<TAB>

Here, -v can be any other option.

The reason seems to be that all the optspecs generated by
  _argument -- '*:'   (_sh: line 24)
look like
  -v[equivalent to --verbose]:   --aliases:   etc.
i.e., a ':' is appended to their ends (so the option requires
an argument).

This ':' is added by
  cache+=( "${(@)^tmp}${descr}" )   (_arguments: line 282)
where $descr is equal to ':', which comes from the helpspec '*:'
passed to _arguments. 

Not specifying a helpspec at all seems to fix the problem.
Or using '*' or '*: :  ' as a helpspec seems to work as well.

BTW, the description of _arguments in zshcompsys manpage says:

  The special
  case of `*:' means both message and action are empty, which  has
  the  effect of causing options having no description in the help
  output to be ordered in listings ahead of options  that  have  a
  description.

But even with '*:' options without description are listed after
those with description (and it has a side effect that ':' is appended
to the generated optspecs). Are there any ways to control the order
of listing?


diff --git a/Completion/Unix/Command/_sh b/Completion/Unix/Command/_sh
index 21ebfc3..1b51122 100644
--- a/Completion/Unix/Command/_sh
+++ b/Completion/Unix/Command/_sh
@@ -24,6 +24,6 @@ fi
 
 local ret=$?
 
-[[ $service == zsh ]] && _arguments -S -s -- '*:' && ret=0
+[[ $service == zsh ]] && _arguments -S -s -- && ret=0
 
 return ret






Messages sorted by: Reverse Date, Date, Thread, Author