summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--Completion/Core/_approximate29
-rw-r--r--Completion/Core/_match2
-rw-r--r--Completion/Core/_oldlist7
4 files changed, 28 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index 34cc8ade1..f2ef402b1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2000-04-11 Sven Wischnowsky <wischnow@informatik.hu-berlin.de>
+ * 10641: Completion/Core/_approximate, Completion/Core/_match,
+ Completion/Core/_oldlist: make _oldlist ignore list from
+ _complete_help; _match runs for every match spec from
+ matcher-list; _approximate doesn't redefine compadd if that is
+ already a function
+
* 10635: Completion/User/_make: _make uses $words[1] for command
name
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