120 lines
3.2 KiB
Bash
120 lines
3.2 KiB
Bash
#!/usr/bin/env zsh
|
|
|
|
# Based on _main_complete from Zsh 5.8.
|
|
|
|
local IFS=$' \t\n\0'
|
|
eval "$_comp_setup"
|
|
|
|
local func funcs ret=1 tmp _compskip format nm call match min max i num \
|
|
_completers _completer _completer_num curtag _comp_force_list \
|
|
_matchers _matcher _c_matcher _matcher_num _comp_tags _comp_mesg \
|
|
mesg str context state state_descr line opt_args val_args \
|
|
curcontext="$curcontext" \
|
|
_last_nmatches=-1 _last_menu_style _def_menu_style _menu_style sel \
|
|
_tags_level=0 \
|
|
_saved_exact="${compstate[exact]}" \
|
|
_saved_lastprompt="${compstate[last_prompt]}" \
|
|
_saved_list="${compstate[list]}" \
|
|
_saved_insert="${compstate[insert]}" \
|
|
_saved_colors="$ZLS_COLORS" \
|
|
_saved_colors_set=${+ZLS_COLORS} \
|
|
_ambiguous_color=
|
|
|
|
local _comp_priv_prefix ZLS_COLORS ZLS_COLOURS
|
|
unset _comp_priv_prefix ZLS_COLORS ZLS_COLOURS
|
|
|
|
local -a precommands
|
|
local -ar builtin_precommands=(- builtin eval exec nocorrect noglob time)
|
|
typeset -U _lastdescr _comp_ignore _comp_colors
|
|
|
|
[[ -z "$curcontext" ]] && curcontext=:::
|
|
|
|
if [[ -z "$compstate[quote]" ]]; then
|
|
if [[ -o equals ]] && compset -P 1 '='; then
|
|
compstate[context]=equal
|
|
elif [[ "$PREFIX" != */* && "$PREFIX[1]" = '~' ]]; then
|
|
compset -p 1
|
|
compstate[context]=tilde
|
|
fi
|
|
fi
|
|
|
|
compstate[list]=
|
|
compstate[exact]=
|
|
compstate[insert]=unambiguous
|
|
|
|
_completers=(_complete)
|
|
|
|
_completer_num=1
|
|
|
|
integer SECONDS=0
|
|
TRAPINT () {
|
|
zle -M "Killed by signal in ${funcstack[2]} after ${SECONDS}s"
|
|
zle -R
|
|
return 130
|
|
}
|
|
TRAPQUIT () {
|
|
zle -M "Killed by signal in ${funcstack[2]} after ${SECONDS}s"
|
|
zle -R
|
|
return 131
|
|
}
|
|
|
|
funcs=("$compprefuncs[@]")
|
|
compprefuncs=()
|
|
for func in "$funcs[@]"; do
|
|
"$func"
|
|
done
|
|
|
|
for tmp in "$_completers[@]"; do
|
|
if [[ -n "$call" ]]; then
|
|
_completer="${tmp}"
|
|
elif [[ "$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
|
|
_comp_mesg=
|
|
if [[ -n "$call" ]]; then
|
|
if "${(@)argv[3,-1]}"; then
|
|
ret=0
|
|
break 2
|
|
fi
|
|
elif "$tmp"; then
|
|
ret=0
|
|
break 2
|
|
fi
|
|
(( _matcher_num++ ))
|
|
done
|
|
[[ -n "$_comp_mesg" ]] && break
|
|
(( _completer_num++ ))
|
|
done
|
|
|
|
curcontext="${curcontext/:[^:]#:/::}"
|
|
nm=$compstate[nmatches]
|
|
|
|
if [[ -n $compstate[quote] ]]; then
|
|
typeset -g _z4h_in_quotes=1
|
|
fi
|
|
|
|
# typeset -pm '_z4h_words|_z4h_descrs|_z4h_scaffolds|compstate' >&2
|
|
|
|
funcs=("$comppostfuncs[@]")
|
|
comppostfuncs=()
|
|
for func in "$funcs[@]"; do
|
|
"$func"
|
|
done
|
|
|
|
return ret
|