mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-01 05:16:05 +01: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>
|
||||
|
||||
* 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:]]#=*'
|
||||
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()
|
||||
|
||||
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))
|
||||
{
|
||||
char *s;
|
||||
int m = zmult;
|
||||
int m = zmult, na = noaliases;
|
||||
|
||||
if (!strcmp(bindk->nam, "which-command"))
|
||||
noaliases = 1;
|
||||
s = getcurcmd();
|
||||
noaliases = na;
|
||||
if (!s)
|
||||
return 1;
|
||||
zmult = 1;
|
||||
|
|
Loading…
Reference in a new issue