diff options
Diffstat (limited to 'Completion')
-rw-r--r-- | Completion/Core/_approximate | 29 | ||||
-rw-r--r-- | Completion/Core/_match | 2 | ||||
-rw-r--r-- | Completion/Core/_oldlist | 7 |
3 files changed, 22 insertions, 16 deletions
diff --git a/Completion/Core/_approximate b/Completion/Core/_approximate index 0815a308e..840c1729a 100644 --- a/Completion/Core/_approximate +++ b/Completion/Core/_approximate @@ -10,7 +10,7 @@ [[ _matcher_num -gt 1 || "${#:-$PREFIX$SUFFIX}" -le 1 ]] && return 1 -local _comp_correct _correct_expl comax cfgacc +local _comp_correct _correct_expl comax cfgacc redef local oldcontext="${curcontext}" opm="$compstate[pattern_match]" zstyle -s ":completion:${curcontext}:" max-errors cfgacc || cfgacc='2 numeric' @@ -40,17 +40,20 @@ _tags corrections original # to stick the `(#a...)' in the right place (after an # ignored prefix). -compadd() { - [[ ${argv[(I)-[a-zA-Z]#U[a-zA-Z]#]} -eq 0 && - "${#:-$PREFIX$SUFFIX}" -le _comp_correct ]] && return +if (( ! $+functions[compadd] )); then + redef=yes + compadd() { + [[ ${argv[(I)-[a-zA-Z]#U[a-zA-Z]#]} -eq 0 && + "${#:-$PREFIX$SUFFIX}" -le _comp_correct ]] && return - if [[ "$PREFIX" = \~*/* ]]; then - PREFIX="${PREFIX%%/*}/(#a${_comp_correct})${PREFIX#*/}" - else - PREFIX="(#a${_comp_correct})$PREFIX" - fi - builtin compadd "$_correct_expl[@]" "$@" -} + if [[ "$PREFIX" = \~*/* ]]; then + PREFIX="${PREFIX%%/*}/(#a${_comp_correct})${PREFIX#*/}" + else + PREFIX="(#a${_comp_correct})$PREFIX" + fi + builtin compadd "$_correct_expl[@]" "$@" + } +fi _comp_correct=1 @@ -81,7 +84,7 @@ while [[ _comp_correct -le comax ]]; do [[ "$compstate[list]" != list* ]] && compstate[list]="$compstate[list] force" fi - unfunction compadd + [[ -n "$redef" ]] && unfunction compadd compstate[pattern_match]="$opm" return 0 @@ -91,7 +94,7 @@ while [[ _comp_correct -le comax ]]; do (( _comp_correct++ )) done -unfunction compadd +[[ -n "$redef" ]] && unfunction compadd compstate[pattern_match]="$opm" return 1 diff --git a/Completion/Core/_match b/Completion/Core/_match index 18dab7423..3059935d8 100644 --- a/Completion/Core/_match +++ b/Completion/Core/_match @@ -9,7 +9,7 @@ # expand-or-complete function because otherwise the pattern will # be expanded using globbing. -[[ _matcher_num -gt 1 ]] && return 1 +### Shouldn't be needed any more: [[ _matcher_num -gt 1 ]] && return 1 local tmp opm="$compstate[pattern_match]" ret=0 orig ins diff --git a/Completion/Core/_oldlist b/Completion/Core/_oldlist index bcb3e148a..e28a66d83 100644 --- a/Completion/Core/_oldlist +++ b/Completion/Core/_oldlist @@ -13,7 +13,8 @@ zstyle -s ":completion:${curcontext}:" old-list list # 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 [[ -n $compstate[old_list] && $list != never && + $LASTWIDGET != _complete_help ]]; then if [[ $WIDGET = *list* && ( $list = always || $list != shown ) ]]; then compstate[old_list]=keep return 0 @@ -33,8 +34,10 @@ fi # 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 +if [[ -z $compstate[old_insert] && -n $compstate[old_list] && + $LASTWIDGET != _complete_help ]]; then compstate[old_list]=keep + return 0 elif [[ $WIDGET = *complete(|-prefix|-word) ]] && zstyle -t ":completion:${curcontext}:" old-menu; then if [[ -n $compstate[old_insert] ]]; then |