foxshell/fn/-z4h-main-complete
2025-07-04 11:48:40 -05:00

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