blob: 1e472229c11ee7bd65df6deae8817fc16a0d56ba (
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
emulate -L zsh
setopt extendedglob
local -a word_functions
word_functions=(backward-kill-word backward-word
capitalize-word down-case-word
forward-word kill-word
transpose-words up-case-word)
[[ -z $1 ]] && autoload -Uz read-from-minibuffer
local REPLY detail f wordstyle teststyle
if ! zle -l $word_functions[1]; then
for f in $word_functions; do
autoload -Uz $f-match
zle -N $f $f-match
done
fi
while true; do
if [[ -n $WIDGET && -z $1 ]]; then
read-from-minibuffer -k1 "Word styles (hit return for more detail):
(b)ash (n)ormal (s)hell (w)hitespace (d)efault (q)uit
(B), (N), (S), (W) as above with subword matching
${detail}? " || return 1
else
REPLY=$1
fi
detail=
case $REPLY in
([bB]*)
# bash style
wordstyle=standard
zstyle ':zle:*' word-chars ''
zstyle ':zle:*' skip-whitespace-first true
;;
([nN]*)
# normal zsh style
wordstyle=standard
zstyle ':zle:*' word-chars "$WORDCHARS"
zstyle ':zle:*' skip-whitespace-first false
;;
([sS]*)
# shell command arguments or special tokens
wordstyle=shell
zstyle ':zle:*' skip-whitespace-first false
;;
([wW]*)
# whitespace-delimited
wordstyle=space
zstyle ':zle:*' skip-whitespace-first false
;;
(d*)
# default: could also return widgets to builtins here
wordstyle=
zstyle -d ':zle:*' word-chars
zstyle -d ':zle:*' skip-whitespace-first
;;
(q*)
# quit without setting
return 1
;;
(*)
detail="\
(b)ash: Word characters are alphanumerics only
(n)ormal: Word characters are alphanumerics plus \$WORDCHARS
(s)hell: Words are command arguments using shell syntax
(w)hitespace: Words are whitespace-delimited
(d)efault: Use default, no special handling (usually same as \`n')
(q)uit: Quit without setting a new style
"
if [[ -z $WIDGET || -n $1 ]]; then
print "Usage: $0 word-style
where word-style is one of the characters in parentheses:
$detail" >&2
return 1
fi
continue
;;
esac
if [[ -n $wordstyle ]]; then
if [[ $REPLY = [[:upper:]]* ]]; then
wordstyle+=-subword
fi
zstyle ':zle:*' word-style $wordstyle
fi
return
done
|