Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[PATCH] comparguments: support zsh-style '-' terminator with -S -S
- X-seq: zsh-workers 54659
- From: dana <dana@xxxxxxx>
- To: zsh-workers@xxxxxxx
- Subject: [PATCH] comparguments: support zsh-style '-' terminator with -S -S
- Date: Mon, 01 Jun 2026 21:15:13 -0500
- Archived-at: <https://zsh.org/workers/54659>
- Feedback-id: i9be146f9:Fastmail
- List-id: <zsh-workers.zsh.org>
_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