mirror of
https://github.com/tmux/tmux.git
synced 2026-10-12 21:54:23 +00:00
Tests for 5730 from Joan Fabrégat.
This commit is contained in:
88
regress/input-combine-width.sh
Normal file
88
regress/input-combine-width.sh
Normal file
@@ -0,0 +1,88 @@
|
||||
#!/bin/sh
|
||||
|
||||
. ./input-common.inc
|
||||
|
||||
# Exercise expansion by VS16, a skin tone modifier and a regional indicator.
|
||||
for kind in variation modifier flag; do
|
||||
case "$kind" in
|
||||
variation)
|
||||
combine_seq='\342\234\224\357\270\217'
|
||||
text='✔️'
|
||||
;;
|
||||
modifier)
|
||||
combine_seq='\342\230\235\360\237\217\273'
|
||||
text='☝🏻'
|
||||
;;
|
||||
flag)
|
||||
combine_seq='\360\237\207\254\360\237\207\247'
|
||||
text='🇬🇧'
|
||||
;;
|
||||
esac
|
||||
|
||||
start_pane "$kind-overwrite" 10 3 "A\347\225\214BC\r${combine_seq}X"
|
||||
check_capture "$kind-overwrite" "${text}XBC"
|
||||
check_cursor "$kind-overwrite" '3,0'
|
||||
check_raw_matches "$kind-overwrite" \
|
||||
"C 0,0 data=\(2,[0-9]+,$text\) flags=NONE\[0\]" \
|
||||
'C 0,1 .*flags=PADDING\[[0-9a-f]+\]' \
|
||||
'C 0,2 data=\(1,1,X\) flags=NONE\[0\]'
|
||||
|
||||
start_pane "$kind-edge" 5 3 "abcd${combine_seq}X"
|
||||
check_capture "$kind-edge" "abcd
|
||||
${text}X"
|
||||
check_cursor "$kind-edge" '3,1'
|
||||
check_raw_matches "$kind-edge" \
|
||||
'L 0 \(0\) flags=.*WRAPPED' \
|
||||
'C 0,4 data=\(1,1, \)' \
|
||||
"C 1,0 data=\(2,[0-9]+,$text\) flags=NONE\[0\]" \
|
||||
'C 1,1 .*flags=PADDING\[[0-9a-f]+\]' \
|
||||
'C 1,2 data=\(1,1,X\) flags=NONE\[0\]'
|
||||
|
||||
start_pane "$kind-fit" 5 3 "abc${combine_seq}X"
|
||||
check_capture "$kind-fit" "abc${text}
|
||||
X"
|
||||
check_cursor "$kind-fit" '1,1'
|
||||
|
||||
start_pane "$kind-scroll" 5 2 "11111\r\nabcd${combine_seq}X"
|
||||
check_capture "$kind-scroll" "abcd
|
||||
${text}X"
|
||||
check_cursor "$kind-scroll" '3,1'
|
||||
|
||||
start_pane "$kind-region" 5 4 \
|
||||
"top\033[2;1Hold\033[4;1Hend\033[2;3r\033[3;1Habcd${combine_seq}X"
|
||||
check_capture "$kind-region" "top
|
||||
abcd
|
||||
${text}X
|
||||
end"
|
||||
check_cursor "$kind-region" '3,2'
|
||||
|
||||
start_pane "$kind-insert" 10 3 "ABCDE\r\033[4h${combine_seq}X"
|
||||
check_capture "$kind-insert" "${text}XABCDE"
|
||||
check_cursor "$kind-insert" '3,0'
|
||||
|
||||
start_pane "$kind-insert-edge" 5 3 \
|
||||
"\033[2;1HABCDE\033[1;1Habcd\033[4h${combine_seq}X"
|
||||
check_capture "$kind-insert-edge" "abcd
|
||||
${text}XAB"
|
||||
check_cursor "$kind-insert-edge" '3,1'
|
||||
|
||||
start_pane "$kind-nowrap" 5 3 "\033[?7labc${combine_seq}"
|
||||
check_capture "$kind-nowrap" "abc${text}"
|
||||
check_cursor "$kind-nowrap" '4,0'
|
||||
check_raw_matches "$kind-nowrap" \
|
||||
"C 0,3 data=\(2,[0-9]+,$text\) flags=NONE\[0\]" \
|
||||
'C 0,4 .*flags=PADDING\[[0-9a-f]+\]'
|
||||
done
|
||||
|
||||
# A two-column cluster cannot fit in a one-column pane. Keep its narrow base.
|
||||
start_pane one-column 1 3 '\342\234\224\357\270\217'
|
||||
check_capture one-column '✔'
|
||||
check_cursor one-column '1,0'
|
||||
check_raw_no_matches one-column 'data=\(2,'
|
||||
|
||||
# Without wrapping, even a wide cell filling the pane leaves the cursor inside.
|
||||
start_pane two-columns-nowrap 2 3 '\033[?7l\342\234\224\357\270\217'
|
||||
check_capture two-columns-nowrap '✔️'
|
||||
check_cursor two-columns-nowrap '1,0'
|
||||
|
||||
exit $exit_status
|
||||
101
regress/tty-keys-backtab.sh
Normal file
101
regress/tty-keys-backtab.sh
Normal file
@@ -0,0 +1,101 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Extended Shift+Tab must remain BackTab when the pane does not request
|
||||
# modifyOtherKeys=2, including when the input carries implied Meta.
|
||||
|
||||
PATH=/bin:/usr/bin
|
||||
TERM=screen
|
||||
export PATH TERM
|
||||
|
||||
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
|
||||
INNER="$TEST_TMUX -LtestI$$ -f/dev/null"
|
||||
OUTER="$TEST_TMUX -LtestO$$ -f/dev/null"
|
||||
|
||||
fail()
|
||||
{
|
||||
echo "$*" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
cleanup()
|
||||
{
|
||||
$OUTER kill-server 2>/dev/null
|
||||
$INNER kill-server 2>/dev/null
|
||||
}
|
||||
trap cleanup 0
|
||||
trap 'exit 1' 1 2 15
|
||||
|
||||
$INNER new-session -d -s inner -x80 -y24 \
|
||||
'stty raw -echo; exec cat -tv' || exit 1
|
||||
$INNER set-option -g status off || exit 1
|
||||
$INNER set-option -g assume-paste-time 0 || exit 1
|
||||
$INNER set-option -s extended-keys on || exit 1
|
||||
$INNER set-option -s escape-time 1000 || exit 1
|
||||
$INNER unbind-key -a -T root || exit 1
|
||||
$OUTER new-session -d -s outer -x80 -y24 "$INNER attach -t inner" ||
|
||||
exit 1
|
||||
$OUTER set-option -g assume-paste-time 0 || exit 1
|
||||
|
||||
i=0
|
||||
while [ -z "$($INNER list-clients -F '#{client_name}')" ]; do
|
||||
[ "$i" -lt 100 ] || fail 'inner client did not attach'
|
||||
sleep 0.05
|
||||
i=$((i + 1))
|
||||
done
|
||||
|
||||
expected_output=
|
||||
|
||||
assert_key()
|
||||
{
|
||||
name=$1
|
||||
expected_output=$expected_output$2
|
||||
bytes=$(printf '%s' "$3" | od -An -v -tx1)
|
||||
$OUTER send-keys -H $bytes || exit 1
|
||||
i=0
|
||||
while [ "$i" -lt 100 ]; do
|
||||
actual=$($INNER capture-pane -p | tr -d '\n')
|
||||
[ "$actual" = "$expected_output" ] && return 0
|
||||
sleep 0.05
|
||||
i=$((i + 1))
|
||||
done
|
||||
fail "$name: got '$actual', expected '$expected_output'"
|
||||
}
|
||||
|
||||
pane_state='#{pane_key_mode}:#{pane_current_command}'
|
||||
for mode in 0 1 2; do
|
||||
for format in xterm csi-u; do
|
||||
$INNER new-window \
|
||||
"printf '\033[>4;${mode}m'; stty raw -echo; exec cat -tv" ||
|
||||
exit 1
|
||||
key_mode="Ext $mode"
|
||||
[ "$mode" -eq 0 ] && key_mode=VT10x
|
||||
i=0
|
||||
while [ "$($INNER display-message -p "$pane_state")" != \
|
||||
"$key_mode:cat" ]; do
|
||||
[ "$i" -lt 100 ] || fail "pane did not enter mode $mode"
|
||||
sleep 0.05
|
||||
i=$((i + 1))
|
||||
done
|
||||
$INNER set-option -s extended-keys-format "$format" || exit 1
|
||||
expected_output=
|
||||
# Every modifier combination containing Shift.
|
||||
for modifier in 2 4 6 8; do
|
||||
if [ "$mode" -eq 2 ]; then
|
||||
if [ "$format" = xterm ]; then
|
||||
expected="^[[27;${modifier};9~"
|
||||
else
|
||||
expected="^[[9;${modifier}u"
|
||||
fi
|
||||
else
|
||||
expected='^[[Z'
|
||||
fi
|
||||
case_name="mode $mode, $format, modifier $modifier"
|
||||
assert_key "$case_name, CSI u input" "$expected" \
|
||||
"$(printf '\033[9;%su' "$modifier")"
|
||||
assert_key "$case_name, xterm input" "$expected" \
|
||||
"$(printf '\033[27;%s;9~' "$modifier")"
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user