mirror of
https://github.com/tmux/tmux.git
synced 2026-10-07 10:14:28 +00:00
108 lines
2.8 KiB
Bash
108 lines
2.8 KiB
Bash
#!/bin/sh
|
|
|
|
# Test pane-side Kitty keyboard protocol state and key encoding. This uses
|
|
# synthetic protocol sequences and does not require a particular terminal.
|
|
|
|
PATH=/bin:/usr/bin
|
|
TERM=screen
|
|
|
|
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
|
|
CONF=$(mktemp)
|
|
OUT=$(mktemp)
|
|
TMUX="$TEST_TMUX -LtestK$$ -f$CONF"
|
|
|
|
trap 'rm -f "$CONF" "$OUT"; $TMUX kill-server 2>/dev/null' 0 1 15
|
|
|
|
printf '%s\n' 'set -g extended-keys on' \
|
|
'set -g extended-keys-format kitty' >"$CONF"
|
|
|
|
wait_for_output()
|
|
{
|
|
i=0
|
|
while [ ! -s "$OUT" ] && [ "$i" -lt 50 ]; do
|
|
sleep 0.1
|
|
i=$((i + 1))
|
|
done
|
|
[ -s "$OUT" ]
|
|
}
|
|
|
|
wait_for_mode()
|
|
{
|
|
wanted=$1
|
|
i=0
|
|
while [ "$($TMUX display-message -pt: '#{pane_key_mode}')" != "$wanted" ] &&
|
|
[ "$i" -lt 50 ]; do
|
|
sleep 0.1
|
|
i=$((i + 1))
|
|
done
|
|
[ "$($TMUX display-message -pt: '#{pane_key_mode}')" = "$wanted" ]
|
|
}
|
|
|
|
check_output()
|
|
{
|
|
expected=$1
|
|
actual=$(tr -d ' \n' <"$OUT")
|
|
if [ "$actual" != "$expected" ]; then
|
|
echo "expected $expected, got $actual"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
$TMUX new-session -d -x80 -y24 \
|
|
"stty raw -echo; printf '\033[>1u'; dd bs=1 count=7 2>/dev/null | od -An -v -t x1 >'$OUT'; sleep 5" || exit 1
|
|
wait_for_mode 'Kitty 1'
|
|
$TMUX send-keys -t: C-S-a
|
|
wait_for_output
|
|
check_output 1b5b39373b3675
|
|
|
|
: >"$OUT"
|
|
$TMUX respawn-pane -k -t: \
|
|
"stty raw -echo; printf '\033[>1u'; dd bs=1 count=7 2>/dev/null | od -An -v -t x1 >'$OUT'; sleep 5"
|
|
wait_for_mode 'Kitty 1'
|
|
$TMUX send-keys -t: s-a
|
|
wait_for_output
|
|
check_output 1b5b39373b3975
|
|
|
|
: >"$OUT"
|
|
$TMUX respawn-pane -k -t: \
|
|
"stty raw -echo; printf '\033[>8u'; dd bs=1 count=5 2>/dev/null | od -An -v -t x1 >'$OUT'; sleep 5"
|
|
wait_for_mode 'Kitty 8'
|
|
$TMUX send-keys -t: a
|
|
wait_for_output
|
|
check_output 1b5b393775
|
|
|
|
: >"$OUT"
|
|
$TMUX respawn-pane -k -t: \
|
|
"stty raw -echo; printf '\033[>1u\033[?u'; dd bs=1 count=5 2>/dev/null | od -An -v -t x1 >'$OUT'; sleep 5"
|
|
wait_for_output
|
|
check_output 1b5b3f3175
|
|
|
|
: >"$OUT"
|
|
$TMUX respawn-pane -k -t: \
|
|
"stty raw -echo; printf '\033[>4;2m\033[?u'; dd bs=1 count=5 2>/dev/null | od -An -v -t x1 >'$OUT'; sleep 5"
|
|
wait_for_output
|
|
check_output 1b5b3f3075
|
|
|
|
: >"$OUT"
|
|
$TMUX respawn-pane -k -t: \
|
|
"stty raw -echo; printf '\033[>1u\033[>8u\033[<u\033[?u\033[>8u\033[<2u\033[?u'; dd bs=1 count=10 2>/dev/null | od -An -v -t x1 >'$OUT'; sleep 5"
|
|
wait_for_output
|
|
check_output 1b5b3f31751b5b3f3075
|
|
|
|
: >"$OUT"
|
|
$TMUX set-option -g extended-keys always
|
|
$TMUX respawn-pane -k -t: \
|
|
"stty raw -echo; printf '\033[>0u\033[?u'; dd bs=1 count=5 2>/dev/null | od -An -v -t x1 >'$OUT'; sleep 5"
|
|
wait_for_output
|
|
check_output 1b5b3f3175
|
|
$TMUX set-option -g extended-keys on
|
|
|
|
: >"$OUT"
|
|
$TMUX respawn-pane -k -t: \
|
|
"stty raw -echo; printf '\033[>1u\033[?u\033[?1049h\033[?u\033[>8u\033[?u\033[?1049l\033[?u'; dd bs=1 count=20 2>/dev/null | od -An -v -t x1 >'$OUT'; sleep 5"
|
|
wait_for_output
|
|
check_output 1b5b3f31751b5b3f30751b5b3f38751b5b3f3175
|
|
|
|
$TMUX kill-server 2>/dev/null
|
|
exit 0
|