diff options
Diffstat (limited to 'Completion/Base')
-rw-r--r-- | Completion/Base/Completer/_ignored | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/Completion/Base/Completer/_ignored b/Completion/Base/Completer/_ignored new file mode 100644 index 000000000..1ae2e2846 --- /dev/null +++ b/Completion/Base/Completer/_ignored @@ -0,0 +1,64 @@ +#autoload + +# Use ignored matches. + +[[ _matcher_num -gt 1 || $compstate[ignored] -eq 0 ]] && return 1 + +local comp + +zstyle -a ":completion:${curcontext}:" completer comp || + comp=( "${(@)_completers[1,_completer_num-1][(R)_ignored(|:*),-1]}" ) + +local _comp_no_ignore=yes tmp expl \ + _completer _completer_num \ + _matcher _c_matcher _matchers _matcher_num + +_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" != _ignored ]] && "$tmp"; then + if zstyle -s ":completion:${curcontext}:" single-ignored tmp && + [[ $compstate[old_list] != shown && + $compstate[nmatches] -eq 1 ]]; then + case "$tmp" in + show) compstate[insert]='' compstate[list]='list force' tmp='' ;; + menu) + compstate[insert]=menu + _description original expl original + compadd "$expl[@]" -S '' - "$PREFIX$SUFFIX" + ;; + esac + fi + + return 0 + fi + + (( _matcher_num++ )) + done + + (( _completer_num++ )) +done + +return 1 |