mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-08 12:01:21 +02:00
zsh-users/6736: widget that puts double-quotes around words before
invoking completion.
This commit is contained in:
parent
51ceda5c79
commit
474d1579fe
1 changed files with 46 additions and 0 deletions
46
Functions/Zle/quote-and-complete-word
Normal file
46
Functions/Zle/quote-and-complete-word
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#autoload
|
||||||
|
|
||||||
|
# This widget uses the completion system to double-quote the current word
|
||||||
|
# if it is not already quoted, then attempts to complete normally. If the
|
||||||
|
# normal completion fails, the quotes are removed again.
|
||||||
|
#
|
||||||
|
# To use it:
|
||||||
|
# autoload -U quote-and-complete-word
|
||||||
|
# zle -N quote-and-complete-word
|
||||||
|
# bindkey '\t' quote-and-complete-word
|
||||||
|
#
|
||||||
|
# BUG: The "undo" mechanism is confused by multiple calls to completion
|
||||||
|
# widgets from the same normal widget.
|
||||||
|
|
||||||
|
# Note: It's important that this function's name ends in "complete-word".
|
||||||
|
# The _oldlist completer does nothing unless the widget has that suffix.
|
||||||
|
|
||||||
|
quote-and-complete-word () {
|
||||||
|
setopt localoptions unset noshwordsplit noksharrays
|
||||||
|
local lbuf=$LBUFFER rbuf=$RBUFFER last=$LASTWIDGET
|
||||||
|
if [[ $last != $WIDGET ]]
|
||||||
|
then
|
||||||
|
local oldcontext=$curcontext
|
||||||
|
local curcontext="${WIDGET}:${${curcontext:-:::}#*:}"
|
||||||
|
zle complete-word
|
||||||
|
curcontext=$oldcontext
|
||||||
|
fi
|
||||||
|
zle complete-word
|
||||||
|
local ret=$?
|
||||||
|
if [[ _lastcomp[nmatches] -eq 0 && $last != $WIDGET ]]
|
||||||
|
then
|
||||||
|
LBUFFER=$lbuf RBUFFER=$rbuf
|
||||||
|
fi
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
_force_quote () {
|
||||||
|
[[ -z $compstate[quoting] ]] &&
|
||||||
|
compstate[to_end]='' &&
|
||||||
|
compadd -U -S "$SUFFIX" -I "$ISUFFIX"\" -i \""$IPREFIX" "${(Q)PREFIX}"
|
||||||
|
}
|
||||||
|
zstyle ':completion:quote-and-complete-word:*' completer _force_quote
|
||||||
|
|
||||||
|
# Handle zsh autoloading conventions
|
||||||
|
|
||||||
|
[[ -o kshautoload ]] || quote-and-complete-word "$@"
|
Loading…
Reference in a new issue