diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2005-05-23 10:11:18 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2005-05-23 10:11:18 +0000 |
commit | 8a24c5a5ee55ddec6896540de2e042abe009ed1e (patch) | |
tree | 53f3afed4752e85ac762c4c878e82f99d47c8fea /Functions/Zle/which-command | |
parent | dc3668dd20133285416b6a3269c1d7ea81cdd57e (diff) | |
download | zsh-8a24c5a5ee55ddec6896540de2e042abe009ed1e.tar.gz zsh-8a24c5a5ee55ddec6896540de2e042abe009ed1e.tar.xz zsh-8a24c5a5ee55ddec6896540de2e042abe009ed1e.zip |
users/8856, users/8863: which-command stuff
Diffstat (limited to 'Functions/Zle/which-command')
-rw-r--r-- | Functions/Zle/which-command | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/Functions/Zle/which-command b/Functions/Zle/which-command new file mode 100644 index 000000000..6e15c32a4 --- /dev/null +++ b/Functions/Zle/which-command @@ -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 |