summaryrefslogtreecommitdiff
path: root/dot-oh-my-zsh/custom/plugins/zsh-autocomplete/functions/widget/.autocomplete.complete-word.completion-widget
blob: 9d14478bd0cfa28348b611b993c4d13dda5bb68c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/zsh
zmodload -F zsh/terminfo p:terminfo

local -P key_name=
case $KEYS in
  ( $'\t'           ) key_name=tab ;;
  ( $terminfo[kcbt] ) key_name=shift-tab ;;
esac

() {
  local -a match=() mbegin=() mend=()  # `zstyle` for some reason assigns these.
  local +h curcontext=${curcontext:-${WIDGET}:::}
  local +h -a comppostfuncs=( .autocomplete.complete-word.post "$comppostfuncs[@]" )

  if [[ -z $compstate[old_list] ]] || [[ $WIDGET == *menu-* && -v _autocomplete__partial_list ]] ||
      ( builtin zstyle -t ":autocomplete:${key_name}:" insert-unambiguous &&
          [[ -n $_autocomplete__unambiguous ]] ); then
    _main_complete
  else
    compstate[old_list]=keep
    [[ $key_name == shift-tab && $_lastcomp[tags] == *all-matches ]] &&
        compstate[insert]=all
    _main_complete -
  fi
}
[[ _lastcomp[nmatches] -gt 0 && -n $compstate[insert] ]] &&
    unset curcontext