about summary refs log tree commit diff
path: root/Completion/Base/_arguments
diff options
context:
space:
mode:
authorSven Wischnowsky <wischnow@users.sourceforge.net>2000-05-11 08:54:47 +0000
committerSven Wischnowsky <wischnow@users.sourceforge.net>2000-05-11 08:54:47 +0000
commit8e7e17237ea013a271ec41471bfcd40a2e39584a (patch)
tree5babcfb8dbd029bb11b63ea0c2c30a66a29e4b9c /Completion/Base/_arguments
parentd3620a02dfad71562320a90315175855b44ed4de (diff)
downloadzsh-8e7e17237ea013a271ec41471bfcd40a2e39584a.tar.gz
zsh-8e7e17237ea013a271ec41471bfcd40a2e39584a.tar.xz
zsh-8e7e17237ea013a271ec41471bfcd40a2e39584a.zip
allow internally-mutually exclusive sets in _argument_sets; fixes for _argument_sets and the C-code for it (11320)
Diffstat (limited to 'Completion/Base/_arguments')
-rw-r--r--Completion/Base/_arguments33
1 files changed, 25 insertions, 8 deletions
diff --git a/Completion/Base/_arguments b/Completion/Base/_arguments
index 0637b2cd5..ed7bd98d7 100644
--- a/Completion/Base/_arguments
+++ b/Completion/Base/_arguments
@@ -163,11 +163,13 @@ done
 zstyle -s ":completion:${curcontext}:options" auto-description autod
 
 if (( $# )) && comparguments "$multi[@]" "$autod" "$@"; then
-  local nm="$compstate[nmatches]" action noargs aret expl local
+  local action noargs aret expl local
   local next direct odirect equal single match matched ws tmp1 tmp2 tmp3
   local opts subc tc prefix suffix descrs actions subcs
   local origpre="$PREFIX" origipre="$IPREFIX"
 
+  [[ -z "$ismulti" ]] && local nm="$compstate[nmatches]"
+
   if comparguments -D descrs actions subcs; then
     if comparguments -O next direct odirect equal; then
       opts=yes
@@ -314,17 +316,32 @@ if (( $# )) && comparguments "$multi[@]" "$autod" "$@"; then
 	    tmp1=( "${(M@)tmp1:#[-+]?(|:*)}" )
 	    tmp2=( "${PREFIX}${(@M)^${(@)${(@)tmp1%%:*}#[-+]}:#?}" )
 
-            _describe -o option \
-                      tmp1 tmp2 -Q -S '' -- \
-		      tmp3 -Q
+	    if [[ -n "$ismulti" ]]; then
+	      _ms_opt=yes
+	      _ms_soptmid=( "$_ms_soptmid[@]" "$tmp1[@]" )
+	      _ms_soptmidadd=( "$_ms_soptmidadd[@]" "$tmp2[@]" )
+	      _ms_soptend=( "$_ms_soptend[@]" "$tmp3[@]" )
+	    else
+              _describe -o option \
+                        tmp1 tmp2 -Q -S '' -- \
+		        tmp3 -Q
+            fi
           fi
           single=yes
         else
           next=( "$next[@]" "$odirect[@]" )
-          _describe -o option \
-            next -Q -M "$match" -- \
-            direct -QS '' -M "$match" -- \
-            equal -QqS= -M "$match"
+	  if [[ -n "$ismulti" ]]; then
+	    _ms_opt=yes
+	    _ms_match="$_ms_match $match"
+	    _ms_optnext=( "$_ms_optnext[@]" "$next[@]" )
+	    _ms_optdirect=( "$_ms_optdirect[@]" "$direct[@]" )
+	    _ms_optequal=( "$_ms_optequal[@]" "$equal[@]" )
+	  else
+            _describe -o option \
+                      next -Q -M "$match" -- \
+                      direct -QS '' -M "$match" -- \
+                      equal -QqS= -M "$match"
+          fi
         fi
 	PREFIX="$prevpre"
 	IPREFIX="$previpre"