#autoload [[ _matcher_num -gt 1 ]] && return 1 local curcontext="${curcontext/:[^:]#:/:oldlist:}" list zstyle -s ":completion:${curcontext}:" old-list list # If this is a listing widget and there is already an old list, # and either the style :oldlist:old-list is `always', or it is not `never' # and the list is not already shown, then use the existing list for listing # (even if it was generated by another widget). # Do this also if there is an old list and it was generated by the # completer named by the oldlist_list key. if [[ -n $compstate[old_list] && $list != never ]]; then if [[ $WIDGET = *list* && ( $list = always || $list != shown ) ]]; then compstate[old_list]=keep return 0 elif [[ $list = *${_lastcomp[completer]}* ]]; then [[ "$_lastcomp[insert]" = unambig* ]] && compstate[to_end]=single compstate[old_list]=keep if [[ -o automenu ]]; then compstate[insert]=menu else compadd -Qs "$SUFFIX" - "$PREFIX" fi return 0 fi fi # If this is a completion widget, and we have a completion inserted already, # and the style :oldlist:old-menu is `true', then we cycle through the # existing list (even if it was generated by another widget). if [[ -z $compstate[old_insert] && -n $compstate[old_list] ]]; then compstate[old_list]=keep elif [[ $WIDGET = *complete(|-prefix|-word) ]] && zstyle -t ":completion:${curcontext}:" old-menu; then if [[ -n $compstate[old_insert] ]]; then compstate[old_list]=keep if [[ $WIDGET = *reverse* ]]; then compstate[insert]=$(( compstate[old_insert] - 1 )) else compstate[insert]=$(( compstate[old_insert] + 1 )) fi else return 1 fi return 0 fi return 1