68 lines
1.6 KiB
Plaintext
68 lines
1.6 KiB
Plaintext
|
#autoload
|
||
|
|
||
|
# Try to ignore the suffix. A bit like e-o-c-prefix.
|
||
|
|
||
|
[[ _matcher_num -gt 1 || -z "$SUFFIX" ]] && return 1
|
||
|
|
||
|
local comp curcontext="$curcontext" tmp suf="$SUFFIX" \
|
||
|
_completer \
|
||
|
_matcher _c_matcher _matchers _matcher_num
|
||
|
integer ind
|
||
|
|
||
|
if ! zstyle -a ":completion:${curcontext}:" completer comp; then
|
||
|
comp=( "${(@)_completers[1,_completer_num-1]}" )
|
||
|
ind=${comp[(I)_prefix(|:*)]}
|
||
|
(( ind )) && comp=("${(@)comp[ind,-1]}")
|
||
|
fi
|
||
|
|
||
|
if zstyle -t ":completion:${curcontext}:" add-space; then
|
||
|
ISUFFIX=" $SUFFIX"
|
||
|
else
|
||
|
ISUFFIX="$SUFFIX"
|
||
|
fi
|
||
|
SUFFIX=''
|
||
|
|
||
|
local _completer_num=1
|
||
|
|
||
|
for tmp in "$comp[@]"; do
|
||
|
if [[ "$tmp" = *:-* ]]; then
|
||
|
_completer="${${tmp%:*}[2,-1]//_/-}${tmp#*:}"
|
||
|
tmp="${tmp%:*}"
|
||
|
elif [[ $tmp = *:* ]]; then
|
||
|
_completer="${tmp#*:}"
|
||
|
tmp="${tmp%:*}"
|
||
|
else
|
||
|
_completer="${tmp[2,-1]//_/-}"
|
||
|
fi
|
||
|
curcontext="${curcontext/:[^:]#:/:${_completer}:}"
|
||
|
|
||
|
zstyle -a ":completion:${curcontext}:" matcher-list _matchers ||
|
||
|
_matchers=( '' )
|
||
|
|
||
|
_matcher_num=1
|
||
|
_matcher=''
|
||
|
for _c_matcher in "$_matchers[@]"; do
|
||
|
if [[ "$_c_matcher" == +* ]]; then
|
||
|
_matcher="$_matcher $_c_matcher[2,-1]"
|
||
|
else
|
||
|
_matcher="$_c_matcher"
|
||
|
fi
|
||
|
|
||
|
if [[ "$tmp" != _prefix ]] && "$tmp"; then
|
||
|
[[ compstate[nmatches] -gt 1 ]] && return 0
|
||
|
compadd -U -i "$IPREFIX" -I "$ISUFFIX" - "${compstate[unambiguous]%$suf}x"
|
||
|
compstate[list]=
|
||
|
if [[ -n $compstate[unambiguous] ]]; then
|
||
|
compstate[insert]=unambiguous
|
||
|
else
|
||
|
compstate[insert]=0
|
||
|
fi
|
||
|
return 0
|
||
|
fi
|
||
|
(( _matcher_num++ ))
|
||
|
done
|
||
|
(( _completer_num++ ))
|
||
|
done
|
||
|
|
||
|
return 1
|