mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-03 10:21:46 +02:00
users/8856, users/8863: which-command stuff
This commit is contained in:
parent
dc3668dd20
commit
8a24c5a5ee
4 changed files with 66 additions and 1 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2005-05-23 Peter Stephenson <pws@csr.com>
|
||||||
|
|
||||||
|
* users/8863: Doc/Zsh/contrib.yo, Functions/Zle/which-command:
|
||||||
|
enhanced which-command that traces the final command better.
|
||||||
|
|
||||||
|
* users/8856: Src/Zle/zle_tricky.c: which-command shouldn't expand
|
||||||
|
aliases before passing first argument.
|
||||||
|
|
||||||
2005-05-22 Bart Schaefer <schaefer@zsh.org>
|
2005-05-22 Bart Schaefer <schaefer@zsh.org>
|
||||||
|
|
||||||
* unposted: Completion/Base/Widget/_complete_debug: add a colon
|
* unposted: Completion/Base/Widget/_complete_debug: add a colon
|
||||||
|
|
|
@ -858,6 +858,18 @@ example(zle -N insert-last-assignment smart-insert-last-word
|
||||||
zstyle :insert-last-assignment match '[[:alpha:]][][[:alnum:]]#=*'
|
zstyle :insert-last-assignment match '[[:alpha:]][][[:alnum:]]#=*'
|
||||||
bindkey '\e=' insert-last-assignment)
|
bindkey '\e=' insert-last-assignment)
|
||||||
)
|
)
|
||||||
|
tindex(which-command)
|
||||||
|
item(tt(which-command))(
|
||||||
|
This function is a drop-in replacement for the builtin widget
|
||||||
|
tt(which-command). It has enhanced behaviour, in that it correctly
|
||||||
|
detects whether or not the command word needs to be expanded as an
|
||||||
|
alias; if so, it continues tracing the command word from the expanded
|
||||||
|
alias until it reaches the command that will be executed.
|
||||||
|
|
||||||
|
The style tt(whence) is available in the context tt(:zle:$WIDGET); this
|
||||||
|
may be set to an array to give the command and options that will be used to
|
||||||
|
investigate the command word found. The default is tt(whence -c).
|
||||||
|
)
|
||||||
enditem()
|
enditem()
|
||||||
|
|
||||||
subsect(Styles)
|
subsect(Styles)
|
||||||
|
|
42
Functions/Zle/which-command
Normal file
42
Functions/Zle/which-command
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
zmodload -i zsh/parameter zsh/zutil
|
||||||
|
|
||||||
|
zle -I
|
||||||
|
|
||||||
|
local -a whencecmd wds
|
||||||
|
|
||||||
|
# Set the whence style to your favourite function
|
||||||
|
# (but NOT which-command!)
|
||||||
|
zstyle -a :zle:$WIDGET whence whencecmd || whencecmd=(whence -c --)
|
||||||
|
|
||||||
|
wds=(${(z)LBUFFER})
|
||||||
|
local wd barewd
|
||||||
|
local -A seen
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
wd=${wds[1]}
|
||||||
|
barewd=${(Q)wd}
|
||||||
|
|
||||||
|
if [[ $barewd != $wd || -n $seen[$barewd] ]]; then
|
||||||
|
# quoted or already expanded, see if original word is an alias...
|
||||||
|
if [[ -z $seen[$barewd] && -n $aliases[$wd] ]]; then
|
||||||
|
# yes, so we need to decode that, with no extra expansion...
|
||||||
|
$whencecmd $wd
|
||||||
|
seen[$wd]=1
|
||||||
|
wds=(${(z)aliases[$wd]})
|
||||||
|
continue
|
||||||
|
else
|
||||||
|
# use unquoted word, don't expand alias
|
||||||
|
(unalias -- $barewd 2>/dev/null; $whencecmd $barewd)
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# turn on globsubst for =ls etc.
|
||||||
|
$whencecmd ${~barewd}
|
||||||
|
if [[ -n $aliases[$barewd] && -z $seen[$barewd] ]]; then
|
||||||
|
# Recursively expand aliases
|
||||||
|
seen[$barewd]=1
|
||||||
|
wds=(${(z)aliases[$barewd]})
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
break
|
||||||
|
done
|
|
@ -2390,9 +2390,12 @@ int
|
||||||
processcmd(UNUSED(char **args))
|
processcmd(UNUSED(char **args))
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
int m = zmult;
|
int m = zmult, na = noaliases;
|
||||||
|
|
||||||
|
if (!strcmp(bindk->nam, "which-command"))
|
||||||
|
noaliases = 1;
|
||||||
s = getcurcmd();
|
s = getcurcmd();
|
||||||
|
noaliases = na;
|
||||||
if (!s)
|
if (!s)
|
||||||
return 1;
|
return 1;
|
||||||
zmult = 1;
|
zmult = 1;
|
||||||
|
|
Loading…
Reference in a new issue