summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--Functions/Zle/transpose-words-match11
2 files changed, 13 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index a086bded7..1e0604c13 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,9 @@
 
 2016-01-13  Barton E. Schaefer  <schaefer@zsh.org>
 
+	* 37570: Functions/Zle/transpose-words-match: give truth to the
+	doc assertion this is a drop-in replacement for	transpose-words
+
 	* 37567: Functions/Zle/match-words-by-style: use (Z:n:) to split
 	the buffer into words so line breaks are treated as whitespace
 
diff --git a/Functions/Zle/transpose-words-match b/Functions/Zle/transpose-words-match
index c1db310c1..4d2ac71f1 100644
--- a/Functions/Zle/transpose-words-match
+++ b/Functions/Zle/transpose-words-match
@@ -11,14 +11,23 @@
 # on X would be turned into `barXfoo' with the cursor still on the X,
 # regardless of what the character X is.
 
+emulate -L zsh
 autoload -Uz match-words-by-style
 
-local curcontext=":zle:$WIDGET" skip
+local curcontext=":zle:$WIDGET"
 local -a matched_words
 integer count=${NUMERIC:-1} neg
 
 (( count < 0 )) && (( count = -count, neg = 1 ))
 
+if [[ $WIDGET == transpose-words ]]; then
+  # default is to be a drop-in replacement, check styles for change
+  zstyle -m $curcontext skip-chars \* ||
+  zstyle -m $curcontext word-style '*subword*' ||
+  { [[ $LBUFFER[-1] != [[:space:]] && $RBUFFER[1] != [[:space:]] ||
+       -z ${RBUFFER//[[:space:]]/} ]] && zle backward-word }
+fi
+
 while (( count-- > 0 )); do
     match-words-by-style