diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | Completion/Core/_expand | 26 |
2 files changed, 25 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog index 8c193b3a1..6eb800b4e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2000-10-10 Sven Wischnowsky <wischnow@zsh.org> + * 12942: Completion/Core/_expand: temporarily remove global + aliases to avoid error message inside the evals + * 12941: Src/Zle/compmatch.c: follow-up to 12930, make it first try exact character matches, but enable it to go back to try match specs if it fails after accepting such character matches diff --git a/Completion/Core/_expand b/Completion/Core/_expand index 44dfa4789..eaa75fb23 100644 --- a/Completion/Core/_expand +++ b/Completion/Core/_expand @@ -12,6 +12,7 @@ setopt localoptions nonomatch [[ _matcher_num -gt 1 ]] && return 1 local exp word sort expr expl subd suf=" " force opt asp tmp opre pre epre +local gal (( $# )) && while getopts gsco opt; do @@ -48,6 +49,12 @@ zstyle -t ":completion:${curcontext}:" accept-exact || ( "$word" = *\$[a-zA-Z0-9_]## && ${#parameters[(I)${word##*\$}*]} -ne 1 ) ]] && return 1 } +# We have to temporarily remove the global aliases because they can make +# the evals fail. + +gal=( ${(kv)galiases} ) +(( $#gal )) && builtin unalias ${(k)galiases} + # In exp we will collect the expansions. exp=("$word") @@ -83,14 +90,20 @@ subd=("$exp[@]") (( $#exp )) || exp=("$subd[@]") -[[ $#exp -eq 1 && "${exp[1]//\\}" = "${word//\\}"(|\(N\)) ]] && return 1 +if [[ $#exp -eq 1 && "${exp[1]//\\}" = "${word//\\}"(|\(N\)) ]]; then + galiases=( $gal ) + return 1 +fi # With subst-globs-only we bail out if there were no glob expansions, # regardless of any substitutions -{ [[ "$force" = *o* ]] || - zstyle -t ":completion:${curcontext}:" subst-globs-only } && - [[ "$subd" = "$exp"(|\(N\)) ]] && return 1 +if { [[ "$force" = *o* ]] || + zstyle -t ":completion:${curcontext}:" subst-globs-only } && + [[ "$subd" = "$exp"(|\(N\)) ]]; then + galiases=( $gal ) + return 1 +fi zstyle -s ":completion:${curcontext}:" keep-prefix tmp || tmp=changed if [[ "$word" = [\~\$]*/* && "$tmp" = (yes|true|on|1|changed) ]]; then @@ -101,7 +114,12 @@ if [[ "$word" = [\~\$]*/* && "$tmp" = (yes|true|on|1|changed) ]]; then [[ "$tmp" != changed || $#exp -gt 1 || "${opre}${exp[1]#${pre}}" != "$word" ]] && exp=( ${opre}${^exp#${pre}} ) fi + + galiases=( $gal ) + [[ $#exp -eq 1 && "$exp[1]" = "$word" ]] && return 1 +else + galiases=( $gal ) fi # Now add as matches whatever the user requested. |