blob: e2646dbaa6c7aa383a8cea4bf50f77c8dbdce934 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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 "$@"
|