summary refs log tree commit diff
path: root/Completion
diff options
context:
space:
mode:
Diffstat (limited to 'Completion')
-rw-r--r--Completion/Base/_regex_arguments15
-rw-r--r--Completion/Debian/_apt21
-rw-r--r--Completion/X/_xset60
-rw-r--r--Completion/X/_xwit152
4 files changed, 148 insertions, 100 deletions
diff --git a/Completion/Base/_regex_arguments b/Completion/Base/_regex_arguments
index 1fc43f6a7..635cd0e5f 100644
--- a/Completion/Base/_regex_arguments
+++ b/Completion/Base/_regex_arguments
@@ -81,20 +81,7 @@ _regex_arguments () {
 	_ra_left="$_ra_line[_ra_p1 + 1, _ra_p2]"
 	_ra_right="$_ra_line[_ra_p2 + 1, -1]"
 	compset -p $(( $#PREFIX - $#_ra_line + $_ra_p1 ))
-	tmp=("${(@)_ra_actions%%:*}")
-	if (( $#tmp )); then
-	  _tags "$tmp[@]"
-	  while _tags; do
-	    for _ra_com in "$_ra_actions[@]"; do
-	      if _requested "${_ra_com%%:*}"; then
-		while _next_label "${_ra_com%%:*}" expl "${${_ra_com#*:}%%:*}"; do
-		  eval "${_ra_com#*:*:}"
-		done
-		[[ nm -ne "$compstate[nmatches]" ]] && break 2
-	      fi
-	    done
-	  done
-	fi
+	(( $#_ra_actions )) && _alternative "$_ra_actions[@]"
       fi
       ;;
     3) _message "invalid regex";;
diff --git a/Completion/Debian/_apt b/Completion/Debian/_apt
index 9a109fdb6..f4e35fe32 100644
--- a/Completion/Debian/_apt
+++ b/Completion/Debian/_apt
@@ -50,9 +50,8 @@ _apt_arguments () {
   # skip --
   [[ 0 -lt $# ]] && shift
 
-  comp_hasarg="\
-  case \$current_option in
-  ${comp_hasarg}esac"
+  comp_hasarg="{case \$current_option in
+  ${comp_hasarg}esac}"
 
   local short_seq false true bool bool_prefix intlevel word word1 nul qnul
   local comp_bool comp_intlevel comp_configfile comp_arbitem comp_long comp_opt
@@ -75,13 +74,13 @@ _apt_arguments () {
   nul=$'\0'
   qnul="\$'\\0'"
 
-  comp_bool='compadd "$expl[@]" '"$bool"
-  comp_intlevel= #"_message 'intlevel'"
-  comp_configfile='_files "$expl[@]"'
-  comp_arbitem= #"_message 'Foo::Bar=bar'"
+  comp_bool="($bool)"
+  comp_intlevel=
+  comp_configfile='_files'
+  comp_arbitem=
 
   comp_short=\
-'if [[ $PREFIX = -'"$short_seq"' ]]; then
+'{if [[ $PREFIX = -'"$short_seq"' ]]; then
   _apt_consume_short ${PREFIX[2,-1]}
   tmp1=(${(M)${(s:,:)${(kj:,:)num_options[(R)*~0]}}:#-?})
   tmp2=(${PREFIX}${^tmp1#-})
@@ -89,7 +88,7 @@ _apt_arguments () {
 elif [[ -z "$PREFIX" ]]; then
   tmp1=(${(M)${(s:,:)${(kj:,:)num_options[(R)*~0]}}:#-?})
   _describe -o option tmp1
-fi'
+fi}'
 
   comp_long=\
 'tmp1="${(j:|:)${(@)${(@M)${(@s:,:)${(@kj:,:)num_options[(R)*~0]}}:#--*}#--}}"
@@ -106,7 +105,9 @@ tmp2=("$tmp2[@]" $_ra_left${(M)^short_bool:#$~tmp1} $_ra_left${(M)^short_intleve
 tmp3=("$tmp3[@]" $_ra_left${(M)^short_hasarg:#$~tmp1} $_ra_left${(M)^short_configfile:#$~tmp1} $_ra_left${(M)^short_arbitem:#$~tmp1})
 _describe -o option tmp2 -- tmp3 -S='
 
-  comp_opt='{ ! zstyle -T ":completion:${curcontext}:options" prefix-needed || [[ "$PREFIX" = -* ]] }'" && { $comp_short; $comp_long }"
+  comp_opt='{{ ! zstyle -T ":completion:${curcontext}:options" prefix-needed || [[ "$PREFIX" = -* ]] }'" && { $comp_short; $comp_long }}"
+  comp_short="{$comp_short}"
+  comp_long="{$comp_long}"
 
   regex_short=()
   regex_long=()
diff --git a/Completion/X/_xset b/Completion/X/_xset
index 9f94713bb..e96b35aa8 100644
--- a/Completion/X/_xset
+++ b/Completion/X/_xset
@@ -44,67 +44,67 @@ Font Path:
 
 _regex_arguments _xset_parse \
   "/$word/" \
-  \( "/-d(isplay|)$nul/" "$guard" "/$word/" ':option-display:display:_x_display "$expl[@]"' \
+  \( "/-d(isplay|)$nul/" "$guard" "/$word/" ':option-display:display:_x_display' \
   \| "/-c$nul/" "$guard" \
   \| "/c$nul/" "$guard" \
-    \( "/(on|off)$nul/" ':option-c-bool:click:compadd "$expl[@]" on off' \
-    \| "/[0-9]##$nul/" ':option-c-volume:volume:_message volume' \
+    \( "/(on|off)$nul/" ':option-c-bool:click:(on off)' \
+    \| "/[0-9]##$nul/" ':option-c-volume:volume:' \
     \| \) \
   \| "/-b$nul/" "$guard" \
   \| "/b$nul/" "$guard" \
-    \( "/(on|off)$nul/" ':option-b-bool:bell:compadd "$expl[@]" on off' \
-    \| "/[0-9]##$nul/" ':option-b-volume:bell volume:_message volume' \
-      \( "/[0-9]##$nul/" ':option-b-pitch:bell pitch:_message pitch' \
-	\( "/[0-9]##$nul/" ':option-b-duration:bell duration:_message duration' \
+    \( "/(on|off)$nul/" ':option-b-bool:bell:(on off)' \
+    \| "/[0-9]##$nul/" ':option-b-volume:bell volume:' \
+      \( "/[0-9]##$nul/" ':option-b-pitch:bell pitch:' \
+	\( "/[0-9]##$nul/" ':option-b-duration:bell duration:' \
 	\| \) \
       \| \) \
     \| \) \
   \| "/bc$nul/" "$guard" \
   \| "/-bc$nul/" "$guard" \
-  \| "/fp$nul/" "$guard" "/$word/" ':option-fp:font path:compadd "$expl[@]" default rehash' \
-  \| "/(fp[+=]|[+]fp)$nul/" "$guard" "/$word/" ':option-fp-add:font path:compset -P "*,"; _xset_compfpadd' \
-  \| "/(fp-|-fp)$nul/" "$guard" "/$word/" ':option-fp-del:font path:compset -P "*,"; _xset_compfpdel' \
+  \| "/fp$nul/" "$guard" "/$word/" ':option-fp:font path:(default rehash)' \
+  \| "/(fp[+=]|[+]fp)$nul/" "$guard" "/$word/" ':option-fp-add:font path:{compset -P "*,"; _xset_compfpadd}' \
+  \| "/(fp-|-fp)$nul/" "$guard" "/$word/" ':option-fp-del:font path:{compset -P "*,"; _xset_compfpdel}' \
   \| "/-led$nul/" "$guard" \
-    \( "/[0-9]##$nul/" ':option-led-number:led number:_message "led number"' \
+    \( "/[0-9]##$nul/" ':option-led-number:led number:' \
     \| \) \
   \| "/led$nul/" "$guard" \
-    \( "/(on|off)$nul/" ':option-led-bool:led:compadd "$expl[@]" on off' \
-    \| "/[0-9]##$nul/" ':option-led-number:led number:_message "led number"' \
+    \( "/(on|off)$nul/" ':option-led-bool:led:(on off)' \
+    \| "/[0-9]##$nul/" ':option-led-number:led number:' \
     \| \) \
   \| "/m(ouse|)$nul/" "$guard" \
-    \( "/default$nul/" ':option-mouse-default:mouse parameter:compadd "$expl[@]" default' \
-    \| "/[0-9]##(/[0-9]##|)$nul/" ':option-mouse-mult-div:accel_mult/accel_div:_message accel_mult/accel_div' \
-      \( "/[0-9]##$nul/" ':option-mouse-threshold:threshold:_message threshold' \
+    \( "/default$nul/" ':option-mouse-default:mouse parameter:(default)' \
+    \| "/[0-9]##(/[0-9]##|)$nul/" ':option-mouse-mult-div:accel_mult/accel_div:' \
+      \( "/[0-9]##$nul/" ':option-mouse-threshold:threshold:' \
       \| \) \
     \| \) \
   \| "/[-+]dpms$nul/" "$guard" \
   \| "/dpms$nul/" "$guard" \
-    \( "/[0-9]##$nul/" ':option-dpms-standby:standby timeout:_message "standby timeout"' \
-      \( "/[0-9]##$nul/" ':option-dpms-suspend:suspend timeout:_message "suspend timeout"' \
-	\( "/[0-9]##$nul/" ':option-dpms-off:off timeout:_message "off timeout"' \
+    \( "/[0-9]##$nul/" ':option-dpms-standby:standby timeout:' \
+      \( "/[0-9]##$nul/" ':option-dpms-suspend:suspend timeout:' \
+	\( "/[0-9]##$nul/" ':option-dpms-off:off timeout:' \
 	\| \) \
       \| \) \
-    \| "/force/" ':option-dpms-force:force DPMS state:compadd "$expl[@]" force' \
-       "/(on|standby|suspend|off)$nul/" ':option-dpms-state:DPMS state:compadd "$expl[@]" on standby suspend off' \
+    \| "/force$nul/" ':option-dpms-force:force DPMS state:(force)' \
+       "/(on|standby|suspend|off)$nul/" ':option-dpms-state:DPMS state:(on standby suspend off)' \
     \) \
   \| "/s$nul/" "$guard" \
     \( "/(blank|noblank|expose|noexpose|default|on|activate|reset)$nul/" \
-       ':option-s:screen saver:compadd "$expl[@]" blank noblank expose noexpose default on activate reset off' \
-    \| "/off$nul/" \( "/off$nul/" ':option-s-off-period:period off:compadd "$expl[@]" off' \| \) \
-    \| "/[0-9]##$nul/" ':option-s-timeout:length:_message length' \
-      \( "/[0-9]##$nul/" ':option-s-period:period:_message period' \
+       ':option-s:screen saver:(blank noblank expose noexpose default on activate reset off)' \
+    \| "/off$nul/" \( "/off$nul/" ':option-s-off-period:period off:(off)' \| \) \
+    \| "/[0-9]##$nul/" ':option-s-timeout:length:' \
+      \( "/[0-9]##$nul/" ':option-s-period:period:' \
       \| \) \
     \| \) \
   \| "/-r$nul/" "$guard" \
-    \( "/[0-9]##$nul/" ':option-r-keycode:keycode:_message keycode' \
+    \( "/[0-9]##$nul/" ':option-r-keycode:keycode:' \
     \| \) \
   \| "/r$nul/" "$guard" \
-    \( "/(on|off)$nul/" ':option-r-autorepeat:autorepeat:compadd "$expl[@]" on off' \
-    \| "/[0-9]##$nul/" ':option-r-keycode:keycode:_message keycode' \
+    \( "/(on|off)$nul/" ':option-r-autorepeat:autorepeat:(on off)' \
+    \| "/[0-9]##$nul/" ':option-r-keycode:keycode:' \
     \| \) \
   \| "/p$nul/" "$guard" \
-    "/[0-9]##$nul/" ':option-p-pixel:pixel:_message pixel' \
-    "/$word/" ':option-p-color:color:_x_color "$expl[@]"' \
+    "/[0-9]##$nul/" ':option-p-pixel:pixel:' \
+    "/$word/" ':option-p-color:color:_x_color' \
   \| "/(-|)k$nul/" "$guard" \
   \| "/(-|)q$nul/" "$guard" \
   \| "/[]/" ':options:options:_xset_compopts' \
diff --git a/Completion/X/_xwit b/Completion/X/_xwit
index 7ec216e76..3dbce455f 100644
--- a/Completion/X/_xwit
+++ b/Completion/X/_xwit
@@ -3,7 +3,7 @@
 local word=$'[^\0]#\0'
 local nul=$'\0'
 
-local guard='-_xwit_guard -${match[1]%?}'
+local guard='-_xwit_guard ${match[1]%?}'
 
 _xwit_guard () {
   local opt="$1" o
@@ -15,58 +15,108 @@ _xwit_guard () {
 }
 
 _xwit_compopts () {
-  compadd "$expl[@]" - ${(k)no[(R)*~0]} ||
-    compadd "$expl[@]" - ${(k)no}
+  local expl
+  local opt tmp
+
+  tmp=()
+  for opt in ${(k)no[(R)*~0]}
+  do
+    if (( $+desc[$opt] )); then
+      tmp=("$tmp[@]" "$opt:$desc[$opt]")
+    else
+      tmp=("$tmp[@]" "$opt")
+    fi
+  done
+  _describe -o options tmp -- ||
+  _describe -o options allopts --
+
+#  compadd "$expl[@]" - ${(k)no[(R)*~0]} ||
+#    compadd "$expl[@]" - ${(k)no}
 }
 
 _regex_arguments _xwit_parse \
   "/$word/" \
-  \( \
-    "/-/+" \
-    \( "/display$nul/" "$guard" "/$word/" ':option-display:display:_x_display' \
-    \| "/(sync|pop|open|iconify|unmap|root|current|select|(no|)(save|backingstore|saveunder))$nul/" "$guard" \
-    \| "/resize$nul/" "$guard" \
-       "/$word/" ':option-resize-width:width:_message width' \
-       "/$word/" ':option-resize-height:height:_message height' \
-    \| "/rows$nul/" "$guard" "/$word/" ':option-rows:rows:_message rows' \
-    \| "/columns$nul/" "$guard" "/$word/" ':option-columns:columns:_message columns' \
-    \| "/move$nul/" "$guard" \
-       "/$word/" ':option-move-x:x:_message x' \
-       "/$word/" ':option-move-y:y:_message y' \
-    \| "/rmove$nul/" "$guard" \
-       "/$word/" ':option-rmove-x:x:_message x' \
-       "/$word/" ':option-rmove-y:y:_message y' \
-    \| "/warp$nul/" "$guard" \
-       "/$word/" ':option-warp-x:x:_message x' \
-       "/$word/" ':option-warp-y:y:_message y' \
-    \| "/rwarp$nul/" "$guard" \
-       "/$word/" ':option-rwarp-x:x:_message x' \
-       "/$word/" ':option-rwarp-y:y:_message y' \
-    \| "/colormap$nul/" "$guard" \
-       "/$word/" ':option-colormap:colormapid:_x_colormapid' \
-    \| "/(name|label)$nul/" "$guard" \
-       "/$word/" ':option-name:name:_x_name "$expl[@]"' \
-    \| "/iconname$nul/" "$guard" \
-       "/$word/" ':option-name:iconname:_x_name "$expl[@]"' \
-    \| "/bitmap$nul/" "$guard" \
-       "/$word/" ':option-bitmap:bitmap file:_files "$expl[@]" -g \*.xbm' \
-    \| "/mask$nul/" "$guard" \
-       "/$word/" ':option-mask:mask file:_files "$expl[@]" -g \*.xbm' \
-    \| "/iconmove$nul/" "$guard" \
-       "/$word/" ':option-iconmove-x:x:_message x' \
-       "/$word/" ':option-iconmove-y:y:_message y' \
-    \| "/id$nul/" "$guard" "/$word/" ':option-id:window id:_x_window' \
-    \| "/(no|)keyrepeat$nul/" "$guard" \
-        \( "/[0-9]##$nul/" ':option-keyrepeat-keycode:keycode:[[ -prefix [0-9]# ]] && _message keycode' \
-	  \( "/-$nul/" "/[0-9]##$nul/" ':option-keyrepeat-last-keycode:last keycode:[[ -prefix [0-9]# ]] && _message "last keycode"' \| \) \) \# \
-    \| "/names$nul/" "$guard" \
-       "/$word/" ':option-names:window name:_x_window -n' \# \
-    \| "/[]/" ':options:option:_xwit_compopts' \
-    \) \
+  \( "/-display$nul/" "$guard" "/$word/" ':option-display:display:_x_display' \
+  \| "/-(sync|pop|open|iconify|unmap|root|current|select|(no|)(save|backingstore|saveunder))$nul/" "$guard" \
+  \| "/-resize$nul/" "$guard" \
+     "/$word/" ':option-resize-width:width:' \
+     "/$word/" ':option-resize-height:height:' \
+  \| "/-rows$nul/" "$guard" "/$word/" ':option-rows:rows:' \
+  \| "/-columns$nul/" "$guard" "/$word/" ':option-columns:columns:' \
+  \| "/-move$nul/" "$guard" \
+     "/$word/" ':option-move-x:x:' \
+     "/$word/" ':option-move-y:y:' \
+  \| "/-rmove$nul/" "$guard" \
+     "/$word/" ':option-rmove-x:x:' \
+     "/$word/" ':option-rmove-y:y:' \
+  \| "/-warp$nul/" "$guard" \
+     "/$word/" ':option-warp-x:x:' \
+     "/$word/" ':option-warp-y:y:' \
+  \| "/-rwarp$nul/" "$guard" \
+     "/$word/" ':option-rwarp-x:x:' \
+     "/$word/" ':option-rwarp-y:y:' \
+  \| "/-colormap$nul/" "$guard" \
+     "/$word/" ':option-colormap:colormapid:_x_colormapid' \
+  \| "/-(name|label)$nul/" "$guard" \
+     "/$word/" ':option-name:name:_x_name' \
+  \| "/-iconname$nul/" "$guard" \
+     "/$word/" ':option-name:iconname:_x_name' \
+  \| "/-bitmap$nul/" "$guard" \
+     "/$word/" ':option-bitmap:bitmap file:_files -g *.xbm' \
+  \| "/-mask$nul/" "$guard" \
+     "/$word/" ':option-mask:mask file:_files -g *.xbm' \
+  \| "/-iconmove$nul/" "$guard" \
+     "/$word/" ':option-iconmove-x:x:' \
+     "/$word/" ':option-iconmove-y:y:' \
+  \| "/-id$nul/" "$guard" "/$word/" ':option-id:window id:_x_window' \
+  \| "/-(no|)keyrepeat$nul/" "$guard" \
+      \( "/[0-9]##$nul/" ':option-keyrepeat-keycode:keycode:{[[ -prefix [0-9]# ]] && _message keycode}' \
+	\( "/-$nul/" "/[0-9]##$nul/" \
+	   ':option-keyrepeat-last-keycode:last keycode:{[[ -prefix [0-9]# ]] && _message "last keycode"}' \| \) \) \# \
+  \| "/-names$nul/" "$guard" \
+     "/$word/" ':option-names:window name:_x_window -n' \# \
+  \| "/[]/" ':options:option:_xwit_compopts' \
   \) \#
 
 _xwit () {
-  typeset -A no eo
+  local expl allopts
+  typeset -A desc no eo
+
+  desc=(
+    -display 'specify display'
+    -sync 'synchronous mode'
+    -pop 'pop up window'
+    -open 'pop up window'
+    -iconify 'iconify window'
+    -unmap 'iconify window by unmapping'
+    -root 'select the root window'
+    -current 'select the window under current pointer'
+    -select 'select the window interactively'
+    -save 'activate screen saver'
+    -backingstore 'enable backingstore'
+    -saveunder 'enable saveunder'
+    -nosave 'reset screen saver'
+    -nobackingstore 'disable backingstore'
+    -nosaveunder 'disable saveunder'
+    -resize 'resize window'
+    -rows 'resize window rows'
+    -columns 'resize window columns'
+    -move 'move window'
+    -rmove 'move window relatively'
+    -warp 'warp pointer'
+    -rwarp 'warp pointer relatively'
+    -colormap 'install colormap'
+    -name 'specify window name'
+    -label 'specify window name'
+    -iconname 'specify icon name'
+    -bitmap 'specify icon bitmap'
+    -mask 'specify icon mask'
+    -iconmove 'move icon'
+    -id 'select the window by window-ID'
+    -keyrepeat 'enable keyrepeat'
+    -nokeyrepeat 'disable keyrepeat'
+    -names 'select the window by name'
+  )
 
   no=(
     -display 1
@@ -102,6 +152,16 @@ _xwit () {
     -names 1
   )
 
+  allopts=()
+  for opt in ${(k)no}
+  do
+    if (( $+desc[$opt] )); then
+      allopts=("$allopts[@]" "$opt:$desc[$opt]")
+    else
+      allopts=("$allopts[@]" "$opt")
+    fi
+  done
+
   eo=(
     -root    '-root -current -select -id -names'
     -current '-root -current -select -id -names'