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

[PATCH] comparguments: support zsh-style '-' terminator with -S -S



_arguments has -S to stop completing options after '--' and drop it from
$line etc. but it doesn't have a similar thing for '-', used by zsh's
own built-ins and zparseopts (without -G)

this updates comparguments so that if -S is given twice both '-' and
'--' are treated as the parsing terminator. and it updates all of the
applicable zsh completion definitions to do that. (these remain
compatible with older versions of zsh)

ps: related to this, i realised that our conventional use of -A '-*' is
actually wrong -- it should be -A '-?*' instead. otherwise you get
erroneous behaviour like `cmd - -<TAB>` offering options (unless you use
-S -S now, in which case it takes precedence). i may fix all of those in
a future patch, didn't touch them here

dana


diff --git a/Doc/Zsh/compsys.yo b/Doc/Zsh/compsys.yo
index 7f748ad73..9d20ea116 100644
--- a/Doc/Zsh/compsys.yo
+++ b/Doc/Zsh/compsys.yo
@@ -3702,6 +3702,10 @@ example(foobar -x -- -y)
 
 the `tt(-x)' is considered an option, the `tt(-y)' is considered an
 argument, and the `tt(-)tt(-)' is considered to be neither.
+
+If this option is given twice (as tt(-S -S)), a single `tt(-)' is also
+treated this way.  This is useful for completing zsh's own builtins as
+well as functions that use tt(zparseopts) for option parsing.
 )
 item(tt(-A) var(pat))(
 Do not complete options after the first non-option

diff --git a/Src/Zle/computil.c b/Src/Zle/computil.c
index 43018c2e5..44bd61712 100644
--- a/Src/Zle/computil.c
+++ b/Src/Zle/computil.c
@@ -921,7 +921,8 @@ struct cadef {
     char *nonarg;		/* pattern for non-args (-A argument) */
 };
 
-#define CDF_SEP 1		/* -S was specified: -- terminates options */
+#define CDF_SEP  1		/* -S was specified: -- terminates options */
+#define CDF_ZSEP 2		/* -S -S was specified: - terminates options */
 
 /* Description for an option. */
 
@@ -1255,7 +1256,7 @@ parse_cadef(char *nam, char **args)
 	    if (*p == 's')
 		single = 1;
 	    else if (*p == 'S')
-		flags |= CDF_SEP;
+		flags |= (flags & CDF_SEP) ? CDF_ZSEP : CDF_SEP;
 	    else if (*p == 'A') {
 		if (p[1]) {
 		    nonarg = p + 1;
@@ -2118,8 +2119,9 @@ ca_parse_line(Cadef d, Cadef all, int multi, int first)
 	    ca_inactive(d, argxor, cur - 1, 0);
 	    argxor = NULL;
 	}
-	if ((d->flags & CDF_SEP) && cur != compcurrent && state.actopts &&
-		!strcmp(line, "--")) {
+	if (cur != compcurrent && state.actopts &&
+		(((d->flags & CDF_SEP) && !strcmp(line, "--")) ||
+		((d->flags & CDF_ZSEP) && !strcmp(line, "-")))) {
 	    ca_inactive(d, NULL, cur, 1);
 	    state.actopts = 0;
 	    continue;

diff --git a/Test/Y03arguments.ztst b/Test/Y03arguments.ztst
index 200c83e8c..6e423bfe5 100644
--- a/Test/Y03arguments.ztst
+++ b/Test/Y03arguments.ztst
@@ -373,20 +373,35 @@
 
  tst_arguments -S -x ':word:()'
  comptest $'tst -- -\t'
-0:disallowed option after --
+0:-S: disallowed option after --
 >line: {tst -- -}{}
 
+ tst_arguments -S -x ':word:()'
+ comptest $'tst - -\t'
+0:-S: allowed option after -
+>line: {tst - -x }{}
+
  tst_arguments -S -x ':word:()'
  comptest $'tst - --\eB\C-b\t'
-0:allowed option before --
+0:-S: allowed option before --
 >line: {tst -x }{ --}
 
  tst_arguments -S '1:one' '2:two'
  comptest $'tst -- -- \t'
-0:only first of duplicate -- is ignored
+0:-S: only first of duplicate -- is ignored
 >line: {tst -- -- }{}
 >DESCRIPTION:{two}
 
+ tst_arguments -S -S -x ':word:()'
+ comptest $'tst -- -\t'
+0:-S -S: disallowed option after --
+>line: {tst -- -}{}
+
+ tst_arguments -S -S -x ':word:()'
+ comptest $'tst - -\t'
+0:-S -S: disallowed option after -
+>line: {tst - -}{}
+
  tst_arguments -x :word
  comptest $'tst word -\t'
 0:option after a word

diff --git a/Completion/Zsh/Function/__arguments b/Completion/Zsh/Function/__arguments
index af7710971..1264d372b 100644
--- a/Completion/Zsh/Function/__arguments
+++ b/Completion/Zsh/Function/__arguments
@@ -32,7 +32,7 @@ else
     '-W[(rarely needed) enable single-letter option stacking with arguments in the same word (-x X -y == -xXy)]' \
     "-C[modify \$curcontext for \`->action' (instead of \$context)]" \
     "-R[when \`->action' matches, return 300]" \
-    "-S[honour \`--' as end-of-options guard]" \
+    "*-S[honour \`--' (and \`-' if given twice) as end-of-options guard]" \
     "-A[do not complete options after non-options]:pattern matching unknown options (e.g., '-*')" \
     '-O[pass elements of array variable to function calls in actions]:array variable name:_parameters -g array' \
     "-M[specify matchspec for completing option names and values]:matchspec for completing option names and values [ 'r\\:|[_-]=* r\\:|=*' ]" \

diff --git a/Completion/Zsh/Command/_alias b/Completion/Zsh/Command/_alias
index 617627cbe..86e9a88f0 100644
--- a/Completion/Zsh/Command/_alias
+++ b/Completion/Zsh/Command/_alias
@@ -3,7 +3,7 @@
 local curcontext="$curcontext" state line expl type suf
 typeset -A opt_args
 
-_arguments -C -s -A "-*" -S \
+_arguments -C -s -A "-*" -S -S : \
   '(-r +r -s +s)-+g[list or define global aliases]' \
   '(-g +g -s +s)-+r[list or define regular aliases]' \
   '(-r +r -g +g)-+s[list or define suffix aliases]' \
diff --git a/Completion/Zsh/Command/_bindkey b/Completion/Zsh/Command/_bindkey
index df9c8f225..81016fe4f 100644
--- a/Completion/Zsh/Command/_bindkey
+++ b/Completion/Zsh/Command/_bindkey
@@ -10,7 +10,7 @@
 local state expl line curcontext="$curcontext" ret=1
 typeset -A opt_args
 
-_arguments -C -s -S \
+_arguments -C -s -S -S : \
   '(-v -a -M -l -D -A -N -p)-e[select emacs keymap and bind it to main]' \
   '(-e -a -M -l -D -A -N -p)-v[select viins keymap and bind it to main]' \
   '(-e -v -M -l -D -A -N -p)-a[select vicmd keymap]' \
diff --git a/Completion/Zsh/Command/_command b/Completion/Zsh/Command/_command
index 503f860a2..02ff985c3 100644
--- a/Completion/Zsh/Command/_command
+++ b/Completion/Zsh/Command/_command
@@ -1,6 +1,6 @@
 #compdef command
 
-_arguments \
+_arguments -S : \
   '-v[indicate result of command search]:*:command:_path_commands' \
   '-V[show result of command search in verbose form]:*:command:_path_commands' \
   '(-)-p[use default PATH to find command]' \
diff --git a/Completion/Zsh/Command/_compadd b/Completion/Zsh/Command/_compadd
index 4456cf71e..e42e1dd36 100644
--- a/Completion/Zsh/Command/_compadd
+++ b/Completion/Zsh/Command/_compadd
@@ -88,7 +88,7 @@ case $service in
   ;;
 esac
 
-_arguments -C -s -S -A "-*" $args && ret=0
+_arguments -C -s -S -S -A "-*" : $args && ret=0
 
 if [[ -n $state ]]; then
   if (( $+opt_args[-a] )); then
diff --git a/Completion/Zsh/Command/_dirs b/Completion/Zsh/Command/_dirs
index 0281f3736..489366f08 100644
--- a/Completion/Zsh/Command/_dirs
+++ b/Completion/Zsh/Command/_dirs
@@ -1,6 +1,6 @@
 #compdef dirs
 
-_arguments -s \
+_arguments -s -S -S : \
   '(-)-c[clear the directory stack]' \
   '(* -c)-l[display directory names in full]' \
   '(* -c)-v[display numbered list of directory stack]' \
diff --git a/Completion/Zsh/Command/_disable b/Completion/Zsh/Command/_disable
index da3803039..c4cc00243 100644
--- a/Completion/Zsh/Command/_disable
+++ b/Completion/Zsh/Command/_disable
@@ -6,7 +6,7 @@ ali_arr=(${(k)aliases} ${(k)galiases})
 sali_arr=(${(k)saliases})
 func_arr=(${(k)functions})
 
-_arguments -C -s -A "-*" -S \
+_arguments -C -s -A "-*" -S -S : \
   "(-f -r -s -p)-a[act on regular or global aliases]:*:regular or global alias:compadd -k ali_arr" \
   "(-a -r -s -p)-f[act on functions]:*:function:compadd -k func_arr" \
   "(-a -f -s -p)-r[act on reserved words]:*:reserved-word:compadd -k reswords" \
diff --git a/Completion/Zsh/Command/_emulate b/Completion/Zsh/Command/_emulate
index a16738cdb..3477bc556 100644
--- a/Completion/Zsh/Command/_emulate
+++ b/Completion/Zsh/Command/_emulate
@@ -1,6 +1,6 @@
 #compdef emulate
 
-_arguments -s -S -A '-*' : \
+_arguments -s -S -S -A '-*' : \
   '(2 3)-l[list options to be set or unset]' \
   '(2 3)-L[set local_options and local_traps as well]' \
   '-R[reset all options instead of only those needed for script portability]' \
diff --git a/Completion/Zsh/Command/_enable b/Completion/Zsh/Command/_enable
index b62619d89..c581e49a3 100644
--- a/Completion/Zsh/Command/_enable
+++ b/Completion/Zsh/Command/_enable
@@ -6,7 +6,7 @@ ali_arr=(${(k)dis_aliases} ${(k)dis_galiases})
 sali_arr=(${(k)dis_saliases})
 func_arr=(${(k)dis_functions})
 
-_arguments -C -s -A "-*" -S \
+_arguments -C -s -A "-*" -S -S : \
   "(-f -r -s -p)-a[act on regular or global aliases]:*:alias:compadd -k ali_arr" \
   "(-a -r -s -p)-f[act on functions]:*:function:compadd -k func_arr" \
   "(-a -f -s -p)-r[act on reserved words]:*:reserved-word:compadd -k dis_reswords" \
diff --git a/Completion/Zsh/Command/_exec b/Completion/Zsh/Command/_exec
index 2498b57c0..76f11b69d 100644
--- a/Completion/Zsh/Command/_exec
+++ b/Completion/Zsh/Command/_exec
@@ -1,6 +1,6 @@
 #compdef exec
 
-_arguments -s -S -A '-*' : \
+_arguments -s -S -S -A '-*' : \
   '-a+[set argv\[0\] to specified string]:argv[0] string' \
   '-c[clear environment]' \
   '-l[simulate login shell (prepend - to argv\[0\])]' \
diff --git a/Completion/Zsh/Command/_fc b/Completion/Zsh/Command/_fc
index 626d35956..fc35114f5 100644
--- a/Completion/Zsh/Command/_fc
+++ b/Completion/Zsh/Command/_fc
@@ -12,7 +12,7 @@ words=( "${(@)words[1,CURRENT-1]:#*=*}" "${(@)words[CURRENT,-1]}" )
 (( CURRENT -= cur ))
 
 fc_common=(
-  -s -S
+  -s -S -S :
   '(-A -R -W -p -P)-I[include internal (new) events only]'
   '(-A -R -W -p -P)-L[include local events only]'
   '(-A -R -W -p -P)-r[reverse order of the events]'
diff --git a/Completion/Zsh/Command/_hash b/Completion/Zsh/Command/_hash
index d4bb59d28..b7af750c2 100644
--- a/Completion/Zsh/Command/_hash
+++ b/Completion/Zsh/Command/_hash
@@ -9,7 +9,7 @@ common_args=( \
 
 case ${service} in
   hash)
-    _arguments -C -s -S \
+    _arguments -C -s -S -S : \
       '(-f -m -v)-r[empty hash table]' \
       '(-f -r)-m[treat arguments as patterns]' \
       '(-f -r -m)-v[list entries as they are added]' \
@@ -18,7 +18,7 @@ case ${service} in
       '(-d -f -r -m -v -L)*:hash:->hashval' && ret=0
   ;;
   rehash)
-    _arguments -C -s ${common_args[@]} && return 0
+    _arguments -C -s -S -S : ${common_args[@]} && return 0
   ;;
 esac
 
diff --git a/Completion/Zsh/Command/_jobs_builtin b/Completion/Zsh/Command/_jobs_builtin
index 70804cf0f..46146986b 100644
--- a/Completion/Zsh/Command/_jobs_builtin
+++ b/Completion/Zsh/Command/_jobs_builtin
@@ -1,6 +1,6 @@
 #compdef jobs
 
-_arguments -C -s \
+_arguments -C -s -S -S : \
   "(-d -l -p -r -s *)-Z[specify string to replace shell's argument and environment with]:string" \
   '(-Z)-d[show directory from which each job was started]' \
   '(-Z)-l[list process IDs]' \
diff --git a/Completion/Zsh/Command/_kill b/Completion/Zsh/Command/_kill
index 3b5c02151..24bf67fac 100644
--- a/Completion/Zsh/Command/_kill
+++ b/Completion/Zsh/Command/_kill
@@ -3,7 +3,7 @@
 local curcontext="$curcontext" line state ret=1
 typeset -A opt_args
 
-_arguments -C \
+_arguments -C -s -S -S : \
   '(-s -l -L 1)-n[specify signal number]:signal number' \
   '(-l -L)-q[send the specified integer with the signal using sigqueue]:value' \
   '(-n -l -L 1)-s[specify signal name]:signal:_signals -s' \
diff --git a/Completion/Zsh/Command/_print b/Completion/Zsh/Command/_print
index 0610cd4cf..506bf8ca6 100644
--- a/Completion/Zsh/Command/_print
+++ b/Completion/Zsh/Command/_print
@@ -19,7 +19,7 @@ if [[ $service = print ]]; then
     rest='*: :_default'
   fi
 
-  _arguments -C -s -A "-*" -S \
+  _arguments -C -s -A "-*" -S -S : \
     '-r[ignore escape conventions of echo]' \
     '(-r -b -f -m -s -S -l -N -o -O -i -c -u -p -z -D -P)-R[emulate BSD echo (no escapes, -n & -e flags only)]' \
     '-b[recognise bindkey escape sequences]' \
diff --git a/Completion/Zsh/Command/_prompt b/Completion/Zsh/Command/_prompt
index ef6aac355..e44d02e0f 100644
--- a/Completion/Zsh/Command/_prompt
+++ b/Completion/Zsh/Command/_prompt
@@ -1,6 +1,6 @@
 #compdef prompt
 
-_arguments -s \
+_arguments -s -S : \
   '-l[list themes]:*:' \
   '-c[show selected theme]:*:' \
   "-h[help]::prompt theme:($prompt_themes):*:" \
diff --git a/Completion/Zsh/Command/_read b/Completion/Zsh/Command/_read
index 1f733b0e8..e71531c31 100644
--- a/Completion/Zsh/Command/_read
+++ b/Completion/Zsh/Command/_read
@@ -6,7 +6,7 @@ local pflag
 (:>&p) 2>/dev/null &&
   pflag='(-q -s -u -z)-p[input is read from the coprocess]'
 
-_arguments -s -A "-*" -S \
+_arguments -s -A "-*" -S -S : \
   '-r[raw mode]' \
   '(-p -k -s -u -z)-q[read y or n character from terminal]' \
   '(-q)-k+[specify number of characters to read]:: :_guard "[0-9]#" "number of characters"' \
diff --git a/Completion/Zsh/Command/_set b/Completion/Zsh/Command/_set
index 720c667a9..5939b48af 100644
--- a/Completion/Zsh/Command/_set
+++ b/Completion/Zsh/Command/_set
@@ -1,6 +1,6 @@
 #compdef set
 
-noglob _arguments -s -S \
+noglob _arguments -s -S -S : \
   - list '+[list names of parameters]' - others \
   '-o+[set specified option]:option:_options' \
   '+o+[unset specified option]:option:_options' \
diff --git a/Completion/Zsh/Command/_strftime b/Completion/Zsh/Command/_strftime
index a57a76ce4..fce1f5d95 100644
--- a/Completion/Zsh/Command/_strftime
+++ b/Completion/Zsh/Command/_strftime
@@ -6,7 +6,7 @@ if (( words[(I)-r] )); then
   two='date string'
 fi
 
-_arguments -S -A '-*' -s \
+_arguments -S -S -A '-*' -s : \
   '-n[omit trailing newline]' \
   '-q[run quietly]' \
   '(3)-r[reverse lookup using strptime]' \
diff --git a/Completion/Zsh/Command/_tcpsys b/Completion/Zsh/Command/_tcpsys
index 1240ffbf8..c22a2c3a8 100644
--- a/Completion/Zsh/Command/_tcpsys
+++ b/Completion/Zsh/Command/_tcpsys
@@ -21,7 +21,7 @@ case $service in
   else
     argargs+=(':host:_hosts' ':port:_ports' '*:session:->session')
   fi
-  _arguments -C $argargs
+  _arguments -C -s -S : $argargs
   ;;
 esac
 
diff --git a/Completion/Zsh/Command/_typeset b/Completion/Zsh/Command/_typeset
index 99b9e7e0d..895a3aa5d 100644
--- a/Completion/Zsh/Command/_typeset
+++ b/Completion/Zsh/Command/_typeset
@@ -93,7 +93,7 @@ for ((i=1;i<=$#use;++i)); do
   args+=( ${allargs[${use[$i]}${${(s::)use[$i]}[(r)[dUurRtT]]:+$func}]} )
 done
 
-_arguments -C -s -A "-*" -S "${args[@]}" '*::vars:= ->vars_eq' && ret=0
+_arguments -C -s -A "-*" -S -S : "${args[@]}" '*::vars:= ->vars_eq' && ret=0
 
 if [[ "$state" = vars_eq ]]; then
   if [[ $func = f ]]; then
diff --git a/Completion/Zsh/Command/_unhash b/Completion/Zsh/Command/_unhash
index ff0c03f49..97ccd098a 100644
--- a/Completion/Zsh/Command/_unhash
+++ b/Completion/Zsh/Command/_unhash
@@ -1,6 +1,6 @@
 #compdef unhash
 
-_arguments -s -S \
+_arguments -s -S -S : \
   '(-a -f -s *)-d[remove named directories]:*:named directory:compadd -k nameddirs' \
   '(-d -f -s *)-a[remove aliases]:*:alias:_aliases' \
   '(-a -d -f *)-s[remove suffix aliases]:*:suffix alias:_aliases -s s' \
diff --git a/Completion/Zsh/Command/_vared b/Completion/Zsh/Command/_vared
index e7072ca6d..493bae698 100644
--- a/Completion/Zsh/Command/_vared
+++ b/Completion/Zsh/Command/_vared
@@ -1,6 +1,6 @@
 #compdef vared
 
-_arguments -s -A "-*" \
+_arguments -s -S -S -A "-*" : \
   '(-a)-A[edit associative array]' \
   '(-A)-a[edit array parameter]' \
   "-c[create parameter or change type]" \
diff --git a/Completion/Zsh/Command/_which b/Completion/Zsh/Command/_which
index 7eb5129ab..95ad5ab2d 100644
--- a/Completion/Zsh/Command/_which
+++ b/Completion/Zsh/Command/_which
@@ -15,14 +15,14 @@ xarg='-x+[specify spaces to use for indentation in function expansion]: :_number
 
 case ${service} in
   whence)
-    _arguments -C -s -A "-*" -S \
+    _arguments -C -s -A "-*" -S -S : \
       '(-c -w)-v[verbose output]' \
       '(-v -w)-c[csh-like output]' \
       "${cargs[@]}" "$farg" "$aarg" "$xarg" && ret=0
   ;;
-  where) _arguments -C -s -A "-*" -S "${cargs[@]}" "$xarg" && ret=0;;
-  which) _arguments -C -s -A "-*" -S "${cargs[@]}" "$aarg" "$xarg" && ret=0;;
-  type) _arguments -C -s -A "-*" -S "${cargs[@]}" "$aarg" "$farg" && ret=0;;
+  where) _arguments -C -s -A "-*" -S -S : "${cargs[@]}" "$xarg" && ret=0;;
+  which) _arguments -C -s -A "-*" -S -S : "${cargs[@]}" "$aarg" "$xarg" && ret=0;;
+  type) _arguments -C -s -A "-*" -S -S : "${cargs[@]}" "$aarg" "$farg" && ret=0;;
 esac
 
 if [[ "$state" = command ]]; then
diff --git a/Completion/Zsh/Command/_zattr b/Completion/Zsh/Command/_zattr
index e48047f6c..c7033de71 100644
--- a/Completion/Zsh/Command/_zattr
+++ b/Completion/Zsh/Command/_zattr
@@ -4,24 +4,24 @@ local context state line expl ret=1 REPLY
 
 case $service in
 zgetattr)
-_arguments \
+_arguments -S -S : \
   '1:file:_files' \
   '2:attribute:->attrs' \
   '3:parameter'
 ;;
 zsetattr)
-_arguments \
+_arguments -S -S : \
   '1:file:_files' \
   '2:attribute:->attrs' \
   '3:value'
 ;;
 zdelattr)
-_arguments \
+_arguments -S -S : \
   '1:file:_files' \
   '2:attribute:->attrs'
 ;;
 zlistattr)
-_arguments \
+_arguments -S -S : \
   '1:file:_files' \
   '2:parameter'
 ;;
diff --git a/Completion/Zsh/Command/_zcompile b/Completion/Zsh/Command/_zcompile
index 727ead3b1..f1d1e9ac9 100644
--- a/Completion/Zsh/Command/_zcompile
+++ b/Completion/Zsh/Command/_zcompile
@@ -3,7 +3,7 @@
 local state line expl curcontext="$curcontext" ret=1
 typeset -A opt_args
 
-_arguments -C -s \
+_arguments -C -s -S -S -A '-*' : \
   "(-t -c -m -a)-U[don't expand aliases]" \
   '(-t -M)-R[mark as read]' \
   '(-t -R)-M[mark as mapped]' \
diff --git a/Completion/Zsh/Command/_zed b/Completion/Zsh/Command/_zed
index f84993d73..25763d3fb 100644
--- a/Completion/Zsh/Command/_zed
+++ b/Completion/Zsh/Command/_zed
@@ -1,11 +1,11 @@
 #compdef zed fned histed
 
 case $service in
-(fned) _arguments -S : ':shell function:_functions';;
-(histed) _arguments -S : \
+(fned) _arguments -S -S : ':shell function:_functions';;
+(histed) _arguments -S -S : \
 	'1:history file:_files' \
 	'2:history size: ';;
-(zed) _arguments -S : \
+(zed) _arguments -s -S -S -A '-*' : \
         '(-h 1 3 4)-f[edit function]' \
         '(-h 1 3 4)-x+[specify spaces to use for indentation in function expansion]:spaces' \
         '(-f -x 1 2)-h[edit history]' \
diff --git a/Completion/Zsh/Command/_zle b/Completion/Zsh/Command/_zle
index 97ec8c875..ec83c38fa 100644
--- a/Completion/Zsh/Command/_zle
+++ b/Completion/Zsh/Command/_zle
@@ -15,7 +15,7 @@ compwids=(accept-and-menu-complete
 
 opts=(-A -C -D -F -L -M -N -R -T -U -a -c -l -r \* :)
 
-_arguments -s -S \
+_arguments -s -S -S : \
     "($opts)-A[define widget alias]:old widget:->widget :new widget:->widget" \
     "($opts)-C[define completion widget]:new widget name:->comp-widget :completion widget:->builtin-comp-widget :widget shell function:->function" \
     "($opts)-D[delete widget]:*:widget:->widget" \
@@ -36,14 +36,14 @@ _arguments -s -S \
     '(-)*::widget args:->args' && ret=0
 
 [[ $state == listing ]] &&
-  _arguments -s -S '!-l' \
+  _arguments -s -S -S : '!-l' \
     "(-a)-L[list as commands]" \
     "(-L)-a[list all widgets]" \
     '*:widget name:->widget' && ret=0
 
 case "$state[1]" in
   (args)
-    _arguments \
+    _arguments -s -S : \
       '(-N)-n[numeric prefix]:number:' \
       '(-n)-N[reset numeric prefix]' \
       '-K[specify temporary keymap]:keymap:compadd -a keymaps' \
@@ -67,7 +67,7 @@ case "$state[1]" in
       compadd -M 'r:|-=* r:|=*' -k "widgets[(I)(.|)(${(j(|))compwids})]" && ret=0
     ;;
   (redisplay)
-    _arguments -s -S '!-R' \
+    _arguments -s -S -S : '!-R' \
       "-c[clear listing]" \
       ":status line" "*:strings to list" && ret=0
     ;;
diff --git a/Completion/Zsh/Command/_zmodload b/Completion/Zsh/Command/_zmodload
index f3e38c0f6..3acb75c6e 100644
--- a/Completion/Zsh/Command/_zmodload
+++ b/Completion/Zsh/Command/_zmodload
@@ -4,7 +4,7 @@ local suf comp state line expl curcontext="$curcontext" ret=1 NORMARG
 typeset -A opt_args
 suf=()
 
-_arguments -n -C -S -s \
+_arguments -n -C -S -S -s -A '-*' : \
   '(-R -P -i -u -d -a -b -c -I -p -f -e -F -m)-A[create module aliases]' \
   '(-)-R[remove module aliases]' \
   '(-A -R -F -L -m -P -l -e)-u[unload module]' \
diff --git a/Completion/Zsh/Command/_zmv b/Completion/Zsh/Command/_zmv
index df5cb5113..8b4b60897 100644
--- a/Completion/Zsh/Command/_zmv
+++ b/Completion/Zsh/Command/_zmv
@@ -1,6 +1,6 @@
 #compdef zmv zln zcp
 
-_arguments -s -S -A '-*' \
+_arguments -s -S -S -A '-*' : \
   '(-C -L -s -p)-M[force mv]' \
   '(-M -L -s -p)-C[force cp]' \
   '(-M -C -p)-L[force ln]' \
diff --git a/Completion/Zsh/Command/_zparseopts b/Completion/Zsh/Command/_zparseopts
index cc5e28a9a..72dc787a4 100644
--- a/Completion/Zsh/Command/_zparseopts
+++ b/Completion/Zsh/Command/_zparseopts
@@ -4,7 +4,7 @@ local ret=1
 local -a context line state state_descr alts opts
 local -A opt_args
 
-_arguments -A '-*' : \
+_arguments -S -S -A '-*' : \
   '-a+[specify array in which to store parsed options]:array:_parameters -g "*array*~*readonly*"' \
   '-A+[specify association in which to store parsed options]:association:_parameters -g "*association*~*readonly*"' \
   '-D[remove parsed options from positional parameters]' \
diff --git a/Completion/Zsh/Command/_zpty b/Completion/Zsh/Command/_zpty
index 99251aa0a..75393ecf1 100644
--- a/Completion/Zsh/Command/_zpty
+++ b/Completion/Zsh/Command/_zpty
@@ -3,7 +3,7 @@
 local state line list names expl sep curcontext="$curcontext"
 typeset -A opt_args
 
-_arguments -C -s -S \
+_arguments -C -s -S -S -A '-*' : \
   '(-r -w -t -n -L -d)-e[echo input characters]' \
   '(-r -w -t -n -L -d)-b[io to pseudo-terminal blocking]' \
   '(-r -w -t -n -L -e -b)-d[delete command]:*:name:->name' \
diff --git a/Completion/Zsh/Command/_zsocket b/Completion/Zsh/Command/_zsocket
index eeed9f1d8..bf0298b17 100644
--- a/Completion/Zsh/Command/_zsocket
+++ b/Completion/Zsh/Command/_zsocket
@@ -1,6 +1,6 @@
 #compdef zsocket
 
-_arguments -s -w -A "-*" \
+_arguments -s -w -S -S -A "-*" : \
   '-v[verbose output]' \
   '-d[target file descriptor]:fd:_file_descriptors' \
   - outbound \




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