From 163b0101ed6d63c735590d561a8026d74d964401 Mon Sep 17 00:00:00 2001 From: Sven Wischnowsky Date: Wed, 4 Apr 2001 11:29:19 +0000 Subject: add -W option to _arguments, which allows to complete options after options that take an argument in the next word (13902) --- Completion/Base/Utility/_arguments | 21 +++++++++++++++++---- Completion/X/Utility/_x_arguments | 2 +- Completion/X/Utility/_xt_arguments | 2 +- 3 files changed, 19 insertions(+), 6 deletions(-) (limited to 'Completion') diff --git a/Completion/Base/Utility/_arguments b/Completion/Base/Utility/_arguments index e947dc8ad..33f4c1e33 100644 --- a/Completion/Base/Utility/_arguments +++ b/Completion/Base/Utility/_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 rawret +local oldcontext="$curcontext" hasopts rawret optarg singopt long=$argv[(I)--] if (( long )); then @@ -173,18 +173,21 @@ if (( long )); then fi subopts=() -while [[ "$1" = -(O*|[CR]) ]]; do +singopt=() +while [[ "$1" = -(O*|[CRWs]) ]]; do case "$1" in -C) usecc=yes; shift ;; -O) subopts=( "${(@P)2}" ); shift 2 ;; -O*) subopts=( "${(@P)1[3,-1]}" ); shift ;; -R) rawret=yes; shift;; + -W) optarg=yes; shift;; + -s) singopt=(-s); shift;; esac done zstyle -s ":completion:${curcontext}:options" auto-description autod -if (( $# )) && comparguments -i "$autod" "$@"; then +if (( $# )) && comparguments -i "$autod" "$singopt[@]" "$@"; then local action noargs aret expl local tried local next direct odirect equal single matcher matched ws tmp1 tmp2 tmp3 local opts subc tc prefix suffix descrs actions subcs anum @@ -335,14 +338,19 @@ if (( $# )) && comparguments -i "$autod" "$@"; then if [[ "$single" = direct ]]; then _all_labels options expl option \ compadd -QS '' - "${PREFIX}${SUFFIX}" - elif [[ "$single" = next ]]; then + elif [[ -z "$optarg" && "$single" = next ]]; then _all_labels options expl option \ compadd -Q - "${PREFIX}${SUFFIX}" elif [[ "$single" = equal ]]; then _all_labels options expl option \ compadd -QqS= - "${PREFIX}${SUFFIX}" else + tmp1=( "$next[@]" "$direct[@]" "$odirect[@]" "$equal[@]" ) + + [[ "$single" = next ]] && + tmp1=( "${(@)tmp1:#[-+]${PREFIX[-1]}((#e)|:*)}" ) + [[ "$PREFIX" != --* ]] && tmp1=( "${(@)tmp1:#--*}" ) tmp3=( "${(M@)tmp1:#[-+]?[^:]*}" ) tmp1=( "${(M@)tmp1:#[-+]?(|:*)}" ) @@ -351,6 +359,11 @@ if (( $# )) && comparguments -i "$autod" "$@"; then _describe -o option \ tmp1 tmp2 -Q -S '' -- \ tmp3 -Q + + [[ -n "$optarg" && "$single" = next && nm -eq $compstate[nmatches] ]] && + _all_labels options expl option \ + compadd -Q - "${PREFIX}${SUFFIX}" + fi single=yes else diff --git a/Completion/X/Utility/_x_arguments b/Completion/X/Utility/_x_arguments index 8f1723cc6..ba6dd2a68 100644 --- a/Completion/X/Utility/_x_arguments +++ b/Completion/X/Utility/_x_arguments @@ -17,7 +17,7 @@ else fi opts=() -while [[ $1 = -(O*|[CR]) ]]; do +while [[ $1 = -(O*|[CRWs]) ]]; do opts=($opts $1) [[ $1 = -R ]] && rawret=yes shift diff --git a/Completion/X/Utility/_xt_arguments b/Completion/X/Utility/_xt_arguments index e8dafc60c..e17653251 100644 --- a/Completion/X/Utility/_xt_arguments +++ b/Completion/X/Utility/_xt_arguments @@ -53,7 +53,7 @@ else fi opts=() -while [[ $1 = -(O*|[CR]) ]]; do +while [[ $1 = -(O*|[CRWs]) ]]; do opts=($opts $1) [[ $1 = -R ]] && rawret=yes shift -- cgit 1.4.1