1
0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-11-19 21:44:11 +01:00

temporarily remove global aliases to avoid error message inside the evals (12942)

This commit is contained in:
Sven Wischnowsky 2000-10-10 09:00:15 +00:00
parent 7bb0338a78
commit ae4ba457c4
2 changed files with 25 additions and 4 deletions

@ -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

@ -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* ]] ||
if { [[ "$force" = *o* ]] ||
zstyle -t ":completion:${curcontext}:" subst-globs-only } &&
[[ "$subd" = "$exp"(|\(N\)) ]] && return 1
[[ "$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.