diff options
Diffstat (limited to 'Functions/Zle/select-word-style')
-rw-r--r-- | Functions/Zle/select-word-style | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/Functions/Zle/select-word-style b/Functions/Zle/select-word-style new file mode 100644 index 000000000..288517ef1 --- /dev/null +++ b/Functions/Zle/select-word-style @@ -0,0 +1,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 (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 |