1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-10-25 17:20:25 +02:00

users/17132: skip-whitespace-first style for compatibility with bash etc.

in widgets using forward-word-match
This commit is contained in:
Peter Stephenson 2012-06-04 16:40:42 +00:00
parent 07933936f3
commit 5b32dece55
4 changed files with 101 additions and 76 deletions

View file

@ -1,3 +1,10 @@
2012-06-04 Peter Stephenson <p.w.stephenson@ntlworld.com>
* users/17132: Doc/Zsh/contrib.yo,
Functions/Zle/forward-word-match,
Functions/Zle/select-word-style: skip-whitespace-first style for
compatibility with bash and other editors in forward-word.
2012-05-31 Peter Stephenson <pws@csr.com>
* Foudil Brétel: 30495: Completion/Unix/Command/_systemd (also
@ -16333,5 +16340,5 @@
*****************************************************
* This is used by the shell to define $ZSH_PATCHLEVEL
* $Revision: 1.5661 $
* $Revision: 1.5662 $
*****************************************************

View file

@ -1734,6 +1734,16 @@ context is examined and if it contains the string tt(back), the word before
the cursor is considered, else the word after cursor is considered. Some
examples are given below.
The style tt(skip-whitespace-first) is only used with the
tt(forward-word) widget. If it is set to true, then tt(forward-word)
skips any non-word-characters, followed by any non-word-characters:
this is similar to the behaviour of other word-orientated widgets,
and also that used by other editors, however it differs from the
standard zsh behaviour. When using tt(select-word-style) the widget
is set in the context tt(:zle:*) to tt(true) if the word style is
tt(bash) and tt(false) otherwise. It may be overridden by setting it in
the more specific context tt(:zle:forward-word*).
Here are some examples of use of the styles, actually taken from the
simplified interface in tt(select-word-style):

View file

@ -14,13 +14,16 @@ if (( count < 0 )); then
fi
while (( count-- )); do
match-words-by-style
if zstyle -t $curcontext skip-whitespace-first; then
# Standard non-zsh behaviour: skip leading whitespace and the word.
word=$matched_words[4]$matched_words[5]
else
# Traditional zsh behaviour.
# For some reason forward-word doesn't work like the other word
# commands; it skips whitespace only after any matched word
# characters.
if [[ -n $matched_words[4] ]]; then
# just skip the whitespace
word=$matched_words[4]
@ -28,6 +31,7 @@ while (( count-- )); do
# skip the word and trailing whitespace
word=$matched_words[5]$matched_words[6]
fi
fi
if [[ -n $word ]]; then
(( CURSOR += ${#word} ))

View file

@ -10,7 +10,7 @@ word_functions=(backward-kill-word backward-word
[[ -z $1 ]] && autoload -Uz read-from-minibuffer
local REPLY detail f wordstyle
local REPLY detail f wordstyle teststyle
if ! zle -l $word_functions[1]; then
for f in $word_functions; do
@ -21,7 +21,6 @@ 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
@ -38,28 +37,33 @@ ${detail}? " || return 1
# 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*)