Files
RedBear-OS/recipes/shells/zsh/source/Functions/Zle/transpose-words-match
T
vasilito ff4ff35918 feat: track all source trees in git — full fork offline-first model
Red Bear OS is a full fork. All sources must be available from git clone
with zero network access. Removed gitignore rules that excluded fetched
source trees under recipes/*/source/, local/recipes/kde/*/source/,
local/recipes/qt/*/source/, and vendor source trees.

Build artifacts (target/, build/, source.tar, *.o, *.so) remain excluded.

127291 files added — kernel, relibc, base, bootloader, pkgar, all KDE/Qt
frameworks, mesa, wayland, DRM drivers, and every other recipe source.
2026-05-14 10:55:53 +01:00

49 lines
1.6 KiB
Plaintext

# Transpose words, matching the words using match-words-by-style, q.v.
# The group of word characters preceding 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.
emulate -L zsh
autoload -Uz match-words-by-style
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
[[ -z "$matched_words[2]$matched_words[5]" ]] && return 1
if (( neg )); then
LBUFFER="$matched_words[1]"
RBUFFER="$matched_words[5]${(j..)matched_words[3,4]}\
$matched_words[2]${(j..)matched_words[6,7]}"
else
LBUFFER="$matched_words[1]$matched_words[5]${(j..)matched_words[3,4]}\
$matched_words[2]"
RBUFFER="${(j..)matched_words[6,7]}"
fi
done
return 0