summaryrefslogtreecommitdiff
path: root/Completion/Base/Utility
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Base/Utility')
-rw-r--r--Completion/Base/Utility/_describe4
-rw-r--r--Completion/Base/Utility/_guard2
-rw-r--r--Completion/Base/Utility/_multi_parts4
-rw-r--r--Completion/Base/Utility/_pick_variant30
-rw-r--r--Completion/Base/Utility/_sep_parts4
-rw-r--r--Completion/Base/Utility/_sequence5
6 files changed, 29 insertions, 20 deletions
diff --git a/Completion/Base/Utility/_describe b/Completion/Base/Utility/_describe
index 76ab1d995..c12eb0eab 100644
--- a/Completion/Base/Utility/_describe
+++ b/Completion/Base/Utility/_describe
@@ -108,10 +108,10 @@ while _tags; do
fi
if [[ -n $_mats ]]; then
- compadd "$_opts[@]" "${(@)_expl:/-J/-2V}" -D $_strs -O $_mats - \
+ compadd "$_opts[@]" -2 -o nosort "${_expl[@]}" -D $_strs -O $_mats - \
"${(@)${(@M)${(@P)_mats}##([^:\\]|\\?)##}//\\(#b)(?)/$match[1]}"
else
- compadd "$_opts[@]" "${(@)_expl:/-J/-2V}" -D $_strs - \
+ compadd "$_opts[@]" -2 -o nosort "${_expl[@]}" -D $_strs - \
"${(@)${(@M)${(@P)_strs}##([^:\\]|\\?)##}//\\(#b)(?)/$match[1]}"
fi
done
diff --git a/Completion/Base/Utility/_guard b/Completion/Base/Utility/_guard
index ff62981ce..1cbd4f39b 100644
--- a/Completion/Base/Utility/_guard
+++ b/Completion/Base/Utility/_guard
@@ -2,7 +2,7 @@
local garbage
-zparseopts -K -D -a garbage M: J: V: 1 2 n F: X:
+zparseopts -K -D -a garbage M+: J+: V+: 1 2 o+: n F: X+:
[[ "$PREFIX$SUFFIX" != $~1 ]] && return 1
diff --git a/Completion/Base/Utility/_multi_parts b/Completion/Base/Utility/_multi_parts
index 12ff965ed..8a77ff0f0 100644
--- a/Completion/Base/Utility/_multi_parts
+++ b/Completion/Base/Utility/_multi_parts
@@ -14,8 +14,8 @@ typeset -U tmp1 matches
# Get the options.
zparseopts -D -a sopts \
- 'J+:=group' 'V+:=group' 'X+:=expl' 'P:=opts' 'F:=opts' \
- S: r: R: q 1 2 n f 'M+:=matcher' 'i=imm'
+ 'J+:=group' 'V+:=group' 'x+:=expl' 'X+:=expl' 'P:=opts' 'F:=opts' \
+ S: r: R: q 1 2 o+: n 'f=opts' 'M+:=matcher' 'i=imm'
sopts=( "$sopts[@]" "$opts[@]" )
if (( $#matcher )); then
diff --git a/Completion/Base/Utility/_pick_variant b/Completion/Base/Utility/_pick_variant
index 9099e3599..9d705cf10 100644
--- a/Completion/Base/Utility/_pick_variant
+++ b/Completion/Base/Utility/_pick_variant
@@ -1,6 +1,6 @@
#autoload
-local output cmd pat
+local output cmd pat pre
local -a var
local -A opts
@@ -13,29 +13,37 @@ while [[ $1 = *=* ]]; do
var+=( "${1%%\=*}" "${1#*=}" )
shift
done
-if (( $+_cmd_variant[$opts[-c]] )); then
- (( $+opts[-r] )) && eval "${opts[-r]}=${_cmd_variant[$opts[-c]]}"
- [[ $_cmd_variant[$opts[-c]] = "$1" ]] && return 1
+
+if (( ${#precommands:|builtin_precommands} )); then
+ pre=command
+elif (( $+opts[-b] && ( $precommands[(I)builtin] || $+builtins[$opts[-c]] ) )); then
+ (( $+opts[-r] )) && : ${(P)opts[-r]::=$opts[-b]}
return 0
+elif (( $precommands[(I)builtin] )); then
+ pre=builtin
+else
+ # Neither builtin nor command-forcing precommand specified,
+ # so no prefix is needed.
+ pre=
fi
-if [[ $+opts[-b] -eq 1 && -n $builtins[$opts[-c]] ]]; then
- _cmd_variant[$opts[-c]]=$opts[-b]
- (( $+opts[-r] )) && eval "${opts[-r]}=${_cmd_variant[$opts[-c]]}"
+if [[ $pre != builtin ]] && (( $+_cmd_variant[$opts[-c]] )); then
+ (( $+opts[-r] )) && : ${(P)opts[-r]::=${_cmd_variant[$opts[-c]]}}
+ [[ $_cmd_variant[$opts[-c]] = "$1" ]] && return 1
return 0
fi
-output="$(_call_program variant $opts[-c] "${@[2,-1]}" </dev/null 2>&1)"
+output="$(_call_program variant $pre $opts[-c] "${@[2,-1]}" </dev/null 2>&1)"
for cmd pat in "$var[@]"; do
if [[ $output = *$~pat* ]]; then
- (( $+opts[-r] )) && eval "${opts[-r]}=$cmd"
+ (( $+opts[-r] )) && : ${(P)opts[-r]::=$cmd}
_cmd_variant[$opts[-c]]="$cmd"
return 0
fi
done
-(( $+opts[-r] )) && eval "${opts[-r]}=$1"
-_cmd_variant[$opts[-c]]="$1"
+(( $+opts[-r] )) && : ${(P)opts[-r]::=$1}
+[[ $pre != builtin ]] && _cmd_variant[$opts[-c]]="$1"
return 1
diff --git a/Completion/Base/Utility/_sep_parts b/Completion/Base/Utility/_sep_parts
index de836a696..6fcf54ec4 100644
--- a/Completion/Base/Utility/_sep_parts
+++ b/Completion/Base/Utility/_sep_parts
@@ -22,8 +22,8 @@ local matchflags opt group expl nm=$compstate[nmatches] opre osuf opts matcher
# Get the options.
-zparseopts -D -a opts \
- 'J+:=group' 'V+:=group' P: F: S: r: R: q 1 2 n 'X+:=expl' 'M+:=matcher'
+zparseopts -D -a opts 'J+:=group' 'V+:=group' P: F: S: r: R: q 1 2 o+: n \
+ 'x+:=expl' 'X+:=expl' 'M+:=matcher'
# Get the string from the line.
diff --git a/Completion/Base/Utility/_sequence b/Completion/Base/Utility/_sequence
index f52955f46..c1ff32184 100644
--- a/Completion/Base/Utility/_sequence
+++ b/Completion/Base/Utility/_sequence
@@ -8,9 +8,10 @@
# -d : duplicate values allowed
local curcontext="$curcontext" nm="$compstate[nmatches]" pre qsep nosep minus
-local -a sep num pref suf end uniq dedup
+local -a opts sep num pref suf cont end uniq dedup
-zparseopts -D -a opts s:=sep n:=num p:=pref i:=pref P:=pref I:=suf S:=suf q=suf r:=suf R:=suf C:=cont d=uniq M: J: X: x:
+zparseopts -D -a opts s:=sep n:=num p:=pref i:=pref P:=pref I:=suf S:=suf \
+ q=suf r:=suf R:=suf C:=cont d=uniq M+: J+: V+: 1 2 o+: X+: x+:
(( $#cont )) && curcontext="${curcontext%:*}:$cont[2]"
(( $#sep )) || sep[2]=,