diff options
author | Bart Schaefer <barts@users.sourceforge.net> | 2003-10-27 01:50:47 +0000 |
---|---|---|
committer | Bart Schaefer <barts@users.sourceforge.net> | 2003-10-27 01:50:47 +0000 |
commit | 474d1579fe4ce89a42e18d08841fe6eb5ffc6c4c (patch) | |
tree | 8d43d74514be4c1a04eb35662b4d45139283efcf | |
parent | 51ceda5c792fdad3ae07b0268e86517a4e20f31d (diff) | |
download | zsh-474d1579fe4ce89a42e18d08841fe6eb5ffc6c4c.tar.gz zsh-474d1579fe4ce89a42e18d08841fe6eb5ffc6c4c.tar.xz zsh-474d1579fe4ce89a42e18d08841fe6eb5ffc6c4c.zip |
zsh-users/6736: widget that puts double-quotes around words before
invoking completion.
-rw-r--r-- | Functions/Zle/quote-and-complete-word | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/Functions/Zle/quote-and-complete-word b/Functions/Zle/quote-and-complete-word new file mode 100644 index 000000000..e2646dbaa --- /dev/null +++ b/Functions/Zle/quote-and-complete-word @@ -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 "$@" |