diff options
Diffstat (limited to 'Functions/Zle/transpose-words-match')
-rw-r--r-- | Functions/Zle/transpose-words-match | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/Functions/Zle/transpose-words-match b/Functions/Zle/transpose-words-match new file mode 100644 index 000000000..52891b6ac --- /dev/null +++ b/Functions/Zle/transpose-words-match @@ -0,0 +1,31 @@ +# Transpose words, matching the words using match-words-by-style, q.v. +# The group of word characters preceeding the cursor (not necessarily +# immediately) are transposed with the group of word characters following +# the cursor (again, not necessarily immediately). +# +# Note the style skip-chars, used in the context of the current widget. +# This gives a number of character starting from the cursor position +# which are never considered part of a word and hence are always left +# alone. The default is 0 and typically the only useful alternative +# is one. This would have the effect that `fooXbar' with the cursor +# on X would be turned into `barXfoo' with the cursor still on the X, +# regardless of what the character X is. + +autoload match-words-by-style + +local curcontext=":zle:$WIDGET" skip +local -a matched_words +integer count=${NUMERIC:-1} + +while (( count-- > 0 )); do + match-words-by-style + + [[ -z "$matched_words[2]$matched_words[5]" ]] && return 1 + + LBUFFER="$matched_words[1]$matched_words[5]${(j..)matched_words[3,4]}\ +$matched_words[2]" + RBUFFER="${(j..)matched_words[6,7]}" + +done + +return 0 |