about summary refs log tree commit diff
path: root/Completion
diff options
context:
space:
mode:
authorSven Wischnowsky <wischnow@users.sourceforge.net>2001-03-27 13:03:49 +0000
committerSven Wischnowsky <wischnow@users.sourceforge.net>2001-03-27 13:03:49 +0000
commite48f71e2165072a813aa91c11b61dae69afc8c3c (patch)
tree3a6db907a0de31d995bd944d595ab1b49dd445b7 /Completion
parentaa9c315cc872f86465a83dba3546ee62317297ba (diff)
downloadzsh-e48f71e2165072a813aa91c11b61dae69afc8c3c.tar.gz
zsh-e48f71e2165072a813aa91c11b61dae69afc8c3c.tar.xz
zsh-e48f71e2165072a813aa91c11b61dae69afc8c3c.zip
make _arguments return 300 only if given the -R option (13790)
Diffstat (limited to 'Completion')
-rw-r--r--Completion/Base/_arguments20
-rw-r--r--Completion/X/_x_arguments39
-rw-r--r--Completion/X/_xt_arguments72
3 files changed, 94 insertions, 37 deletions
diff --git a/Completion/Base/_arguments b/Completion/Base/_arguments
index 68a7ba848..913e73895 100644
--- a/Completion/Base/_arguments
+++ b/Completion/Base/_arguments
@@ -4,7 +4,7 @@
 # descriptions given as arguments to this function.
 
 local long cmd="$words[1]" descr mesg subopts opt usecc autod
-local oldcontext="$curcontext" hasopts
+local oldcontext="$curcontext" hasopts rawret
 
 long=$argv[(I)--]
 if (( long )); then
@@ -173,11 +173,12 @@ if (( long )); then
 fi
 
 subopts=()
-while [[ "$1" = -(O*|C) ]]; do
+while [[ "$1" = -(O*|[CR]) ]]; do
   case "$1" in
-  -C) usecc=yes; shift ;;
-  -O) subopts=( "${(@P)2}" ); shift 2 ;;
-  -O*)  subopts=( "${(@P)1[3,-1]}" ); shift ;;
+  -C)  usecc=yes; shift ;;
+  -O)  subopts=( "${(@P)2}" ); shift 2 ;;
+  -O*) subopts=( "${(@P)1[3,-1]}" ); shift ;;
+  -R)  rawret=yes; shift;;
   esac
 done
 
@@ -394,10 +395,11 @@ if (( $# )) && comparguments -i "$autod" "$@"; then
 
   [[ -z "$aret" || -z "$usecc" ]] && curcontext="$oldcontext"
 
-  [[ -n "$aret" ]] && return 300
-
-  [[ -n "$noargs" && nm -eq "$compstate[nmatches]" ]] && _message "$noargs"
-
+  if [[ -n "$aret" ]]; then
+    [[ -n $rawret ]] && return 300
+  else
+    [[ -n "$noargs" && nm -eq "$compstate[nmatches]" ]] && _message "$noargs"
+  fi
   # Set the return value.
 
   [[ nm -ne "$compstate[nmatches]" ]]
diff --git a/Completion/X/_x_arguments b/Completion/X/_x_arguments
index 23243002c..8f1723cc6 100644
--- a/Completion/X/_x_arguments
+++ b/Completion/X/_x_arguments
@@ -1,6 +1,35 @@
-#compdef -P */X11/*
+#compdef -P */X11(|R[456])/*
 
-_arguments \
-  '-display:display:_x_display' \
-  '-geometry:geometry:_x_geometry' \
-  "$@"
+local ret long xargs opts rawret nm="$compstate[nmatches]"
+
+xargs=(
+  '-display:display:_x_display'
+  '-geometry:geometry:_x_geometry'
+)
+
+(( $# )) || xargs=( "$xargs[@]" '*:default: _default' )
+
+long=$argv[(I)--]
+if (( long )); then
+  argv[long]=( "$xargs[@]" -- )
+else
+  set -- "$@" "$xargs[@]"
+fi
+
+opts=()
+while [[ $1 = -(O*|[CR]) ]]; do
+  opts=($opts $1)
+  [[ $1 = -R ]] && rawret=yes
+  shift
+done
+
+_arguments -R "$opts[@]" "$@"
+
+ret=$?
+
+if [[ "$ret" = 300 ]]; then
+  compstate[restore]=''
+  [[ -z $rawret ]] && ret=$(( nm == $compstate[nmatches] ))
+fi
+
+return ret
diff --git a/Completion/X/_xt_arguments b/Completion/X/_xt_arguments
index 02f11e226..e8dafc60c 100644
--- a/Completion/X/_xt_arguments
+++ b/Completion/X/_xt_arguments
@@ -20,26 +20,52 @@
 
 # cf. XrmParseCommand(3X11), X11R6.4/xc/lib/Xt/Initialize.c, X(5)
 
-_arguments \
-  '+rv' '-rv' '-reverse' \
-  '+synchronous' '-synchronous' \
-  '-background:background color:_colors' \
-  '-background:background color:_colors' \
-  '-bd:border color:_colors' \
-  '-bg:background color:_colors' \
-  '-bordercolor:border color:_colors' \
-  '-borderwidth:border width:_x_borderwidth' \
-  '-bw:border width:_x_borderwidth' \
-  '-display:display:_x_display' \
-  '-fg:foreground color:_colors' \
-  '-fn:font:_x_font' \
-  '-foreground:foreground color:_colors' \
-  '-geometry:geometry:_x_geometry' \
-  '-iconic' \
-  '-name:name:_x_name' \
-  '-selectionTimeout:selection timeout (milliseconds):_x_selection_timeout' \
-  '-title:title:_x_title' \
-  '-xnllanguage:locale:_x_locale' \
-  '-xrm:resource:_x_resource' \
-  '-xtsessionID:session ID:_xt_session_id' \
-  "$@"
+local ret long xargs opts rawret nm="$compstate[nmatches]"
+
+xargs=(
+  -+{rv,synchronous}
+  -{reverse,iconic}
+  '-background:background color:_x_color'
+  '-bd:border color:_x_color'
+  '-bg:background color:_x_color'
+  '-bordercolor:border color:_x_color'
+  '-borderwidth:border width:_x_borderwidth'
+  '-bw:border width:_x_borderwidth'
+  '-display:display:_x_display'
+  '-fg:foreground color:_x_color'
+  '-font:font:_x_font'
+  '-fn:font:_x_font'
+  '-foreground:foreground color:_x_color'
+  '-geometry:geometry:_x_geometry'
+  '-name:name:_x_name'
+  '-selectionTimeout:selection timeout (milliseconds):_x_selection_timeout'
+  '-title:title:_x_title'
+  '-xnllanguage:locale:_x_locale'
+  '*-xrm:resource:_x_resource'
+  '-xtsessionID:session ID:_xt_session_id'
+)
+
+long=$argv[(I)--]
+if (( long )); then
+  argv[long]=( "$xargs[@]" -- )
+else
+  set -- "$@" "$xargs[@]"
+fi
+
+opts=()
+while [[ $1 = -(O*|[CR]) ]]; do
+  opts=($opts $1)
+  [[ $1 = -R ]] && rawret=yes
+  shift
+done
+
+_arguments -R "$opts[@]" "$@"
+
+ret=$?
+
+if [[ "$ret" = 300 ]]; then
+  compstate[restore]=''
+  [[ -z $rawret ]] && ret=$(( nm == $compstate[nmatches] ))
+fi
+
+return ret