mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-21 00:01:26 +01:00
89 lines
1.7 KiB
Text
89 lines
1.7 KiB
Text
|
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 (N)one (A)bort
|
||
|
${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
|