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
|
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 read-from-minibuffer
local REPLY detail f
if ! zle -l $word_functions[1]; then
for f in $word_functions; do
autoload -U $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
${detail}? " || return 1
else
REPLY=$1
fi
detail=
case $REPLY in
(b*)
# bash style
zstyle ':zle:*' word-style standard
zstyle ':zle:*' word-chars ''
;;
(n*)
# normal zsh style
zstyle ':zle:*' word-style standard
zstyle ':zle:*' word-chars "$WORDCHARS"
;;
(s*)
# shell command arguments or special tokens
zstyle ':zle:*' word-style shell
;;
(w*)
# whitespace-delimited
zstyle ':zle:*' word-style space
;;
(d*)
# default: could also return widgets to builtins here
zstyle -d ':zle:*' word-style
zstyle -d ':zle:*' word-chars
;;
(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
return
done
|