mirror of
https://github.com/tmux/tmux.git
synced 2025-09-01 20:57:00 +00:00
More accurate vi(1) word navigation in copy mode and on the status line. This
changes the meaning of the word-separators option - setting it to the empty string is equivalent to the previous behavior. From Will Noble in GitHub issue 2693.
This commit is contained in:
116
regress/copy-mode-test-emacs.sh
Normal file
116
regress/copy-mode-test-emacs.sh
Normal file
@ -0,0 +1,116 @@
|
||||
#!/bin/sh
|
||||
|
||||
PATH=/bin:/usr/bin
|
||||
TERM=screen
|
||||
|
||||
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
|
||||
TMUX="$TEST_TMUX -f/dev/null -Ltest"
|
||||
$TMUX kill-server 2>/dev/null
|
||||
|
||||
$TMUX new -d -x40 -y10 \
|
||||
"cat copy-mode-test.txt; printf '\e[9;15H'; cat" || exit 1
|
||||
$TMUX set -g window-size manual || exit 1
|
||||
|
||||
# Enter copy mode and go to the first column of the first row.
|
||||
$TMUX set-window-option -g mode-keys emacs
|
||||
$TMUX set-window-option -g word-separators ""
|
||||
$TMUX copy-mode
|
||||
$TMUX send-keys -X history-top
|
||||
$TMUX send-keys -X start-of-line
|
||||
|
||||
# Test that `previous-word` and `previous-space`
|
||||
# do not go past the start of text.
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X previous-word
|
||||
$TMUX send-keys -X previous-space
|
||||
$TMUX send-keys -X previous-word
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer 2>/dev/null)" = "" ] || exit 1
|
||||
|
||||
# Test that `next-word-end` does not skip single-letter words.
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X previous-word
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "A" ] || exit 1
|
||||
|
||||
# Test that `next-word-end` wraps around indented line breaks.
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "$(echo -e "words\n Indented")" ] || exit 1
|
||||
|
||||
# Test that `next-word` wraps around un-indented line breaks.
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "$(echo -e "line\n")" ] || exit 1
|
||||
|
||||
# Test that `next-word-end` treats periods as letters.
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "line..." ] || exit 1
|
||||
|
||||
# Test that `previous-word` and `next-word` treat periods as letters.
|
||||
$TMUX send-keys -X previous-word
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "$(echo -e "line...\n")" ] || exit 1
|
||||
|
||||
# Test that `previous-space` and `next-space` treat periods as letters.
|
||||
$TMUX send-keys -X previous-space
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-space
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "$(echo -e "line...\n")" ] || exit 1
|
||||
|
||||
# Test that `next-word` and `next-word-end` treat other symbols as letters.
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "... @nd then \$ym_bols[]{}" ] || exit 1
|
||||
|
||||
# Test that `previous-word` treats other symbols as letters
|
||||
# and `next-word` wraps around for indented symbols
|
||||
$TMUX send-keys -X previous-word
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "$(echo -e "\$ym_bols[]{}\n ")" ] || exit 1
|
||||
|
||||
# Test that `next-word-end` treats digits as letters
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = " 500xyz" ] || exit 1
|
||||
|
||||
# Test that `previous-word` treats digits as letters
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X previous-word
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "500xyz" ] || exit 1
|
||||
|
||||
# Test that `next-word` and `next-word-end` stop at the end of text.
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X next-space
|
||||
$TMUX send-keys -X next-space-end
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "500xyz" ] || exit 1
|
||||
|
||||
$TMUX kill-server 2>/dev/null
|
||||
exit 0
|
115
regress/copy-mode-test-vi.sh
Normal file
115
regress/copy-mode-test-vi.sh
Normal file
@ -0,0 +1,115 @@
|
||||
#!/bin/sh
|
||||
|
||||
PATH=/bin:/usr/bin
|
||||
TERM=screen
|
||||
|
||||
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
|
||||
TMUX="$TEST_TMUX -f/dev/null -Ltest"
|
||||
$TMUX kill-server 2>/dev/null
|
||||
|
||||
$TMUX new -d -x40 -y10 \
|
||||
"cat copy-mode-test.txt; printf '\e[9;15H'; cat" || exit 1
|
||||
$TMUX set -g window-size manual || exit 1
|
||||
|
||||
# Enter copy mode and go to the first column of the first row.
|
||||
$TMUX set-window-option -g mode-keys vi
|
||||
$TMUX copy-mode
|
||||
$TMUX send-keys -X history-top
|
||||
$TMUX send-keys -X start-of-line
|
||||
|
||||
# Test that `previous-word` and `previous-space`
|
||||
# do not go past the start of text.
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X previous-word
|
||||
$TMUX send-keys -X previous-space
|
||||
$TMUX send-keys -X previous-word
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "A" ] || exit 1
|
||||
|
||||
# Test that `next-word-end` skips single-letter words
|
||||
# and `previous-word` does not skip multi-letter words.
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X previous-word
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "line" ] || exit 1
|
||||
|
||||
# Test that `next-word-end` wraps around indented line breaks.
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "$(echo -e "words\n Indented")" ] || exit 1
|
||||
|
||||
# Test that `next-word` wraps around un-indented line breaks.
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "$(echo -e "line\nA")" ] || exit 1
|
||||
|
||||
# Test that `next-word-end` does not treat periods as letters.
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "line" ] || exit 1
|
||||
|
||||
# Test that `next-space-end` treats periods as letters.
|
||||
$TMUX send-keys -X previous-word
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-space-end
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "line..." ] || exit 1
|
||||
|
||||
# Test that `previous-space` and `next-space` treat periods as letters.
|
||||
$TMUX send-keys -X previous-space
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-space
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "$(echo -e "line...\n.")" ] || exit 1
|
||||
|
||||
# Test that `next-word` and `next-word-end` do not treat other symbols as letters.
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "... @nd then" ] || exit 1
|
||||
|
||||
# Test that `next-space` wraps around for indented symbols
|
||||
$TMUX send-keys -X next-space
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-space
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "$(echo -e "\$ym_bols[]{}\n ?")" ] || exit 1
|
||||
|
||||
# Test that `next-word-end` treats digits as letters
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "? 500xyz" ] || exit 1
|
||||
|
||||
# Test that `previous-word` treats digits as letters
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X previous-word
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "500xyz" ] || exit 1
|
||||
|
||||
# Test that `next-word`, `next-word-end`,
|
||||
# `next-space`, and `next-space-end` stop at the end of text.
|
||||
$TMUX send-keys -X begin-selection
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X next-word-end
|
||||
$TMUX send-keys -X next-word
|
||||
$TMUX send-keys -X next-space
|
||||
$TMUX send-keys -X next-space-end
|
||||
$TMUX send-keys -X copy-selection
|
||||
[ "$($TMUX show-buffer)" = "500xyz" ] || exit 1
|
||||
|
||||
$TMUX kill-server 2>/dev/null
|
||||
exit 0
|
5
regress/copy-mode-test.txt
Normal file
5
regress/copy-mode-test.txt
Normal file
@ -0,0 +1,5 @@
|
||||
A line of words
|
||||
Indented line
|
||||
Another line...
|
||||
... @nd then $ym_bols[]{}
|
||||
?? 500xyz
|
Reference in New Issue
Block a user