From e48f71e2165072a813aa91c11b61dae69afc8c3c Mon Sep 17 00:00:00 2001 From: Sven Wischnowsky Date: Tue, 27 Mar 2001 13:03:49 +0000 Subject: make _arguments return 300 only if given the -R option (13790) --- Completion/Base/_arguments | 20 +++++++------ Completion/X/_x_arguments | 39 +++++++++++++++++++++---- Completion/X/_xt_arguments | 72 +++++++++++++++++++++++++++++++--------------- 3 files changed, 94 insertions(+), 37 deletions(-) (limited to 'Completion') 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 -- cgit 1.4.1