summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBart Schaefer <barts@users.sourceforge.net>2003-10-27 01:50:47 +0000
committerBart Schaefer <barts@users.sourceforge.net>2003-10-27 01:50:47 +0000
commit474d1579fe4ce89a42e18d08841fe6eb5ffc6c4c (patch)
tree8d43d74514be4c1a04eb35662b4d45139283efcf
parent51ceda5c792fdad3ae07b0268e86517a4e20f31d (diff)
downloadzsh-474d1579fe4ce89a42e18d08841fe6eb5ffc6c4c.tar.gz
zsh-474d1579fe4ce89a42e18d08841fe6eb5ffc6c4c.zip
zsh-users/6736: widget that puts double-quotes around words before
invoking completion.
-rw-r--r--Functions/Zle/quote-and-complete-word46
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 "$@"