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