mirror of
https://github.com/tmux/tmux.git
synced 2026-07-10 03:19:31 +00:00
58 lines
1.9 KiB
Bash
Executable File
58 lines
1.9 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Test that the theme reported to a pane (mode 2031 / DSR 996) follows the
|
|
# terminal's reported theme, not a guess from the background colour.
|
|
#
|
|
# An inner client is attached inside an outer tmux pane. The outer pane has a
|
|
# light background, so the outer server answers the inner client's DSR 996 with
|
|
# light. The inner server is given a dark window background, so a guess from the
|
|
# background colour would say dark. A pane in the inner server then queries DSR
|
|
# 996: the answer must be light (2), following the client's reported theme, not
|
|
# dark (1) from the background.
|
|
|
|
PATH=/bin:/usr/bin
|
|
TERM=screen
|
|
|
|
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
|
|
INNER="$TEST_TMUX -LtestI$$ -f/dev/null"
|
|
OUTER="$TEST_TMUX -LtestO$$ -f/dev/null"
|
|
$INNER kill-server 2>/dev/null
|
|
$OUTER kill-server 2>/dev/null
|
|
|
|
TMP=$(mktemp)
|
|
trap "rm -f $TMP; $INNER kill-server 2>/dev/null; $OUTER kill-server 2>/dev/null" \
|
|
0 1 15
|
|
|
|
# Inner server, dark background, keep panes alive across the query respawn.
|
|
$INNER new-session -d -x80 -y24 || exit 1
|
|
$INNER set -g remain-on-exit on
|
|
$INNER set -g window-style 'bg=black'
|
|
|
|
# Outer server with a light background, running the inner client attached so the
|
|
# inner client has a real terminal that reports a theme.
|
|
$OUTER new-session -d -x80 -y24 || exit 1
|
|
$OUTER set -g window-style 'bg=white'
|
|
$OUTER new-window "$INNER attach" || exit 1
|
|
sleep 2
|
|
|
|
# Query DSR 996 from an inner pane and capture the CSI ? 997 ; Ps n reply.
|
|
$INNER respawnw -k -t:0 -- sh -c "
|
|
exec 2>/dev/null
|
|
stty raw -echo
|
|
printf '\033[?996n'
|
|
dd bs=1 count=9 2>/dev/null | cat -v > $TMP
|
|
sleep 1
|
|
"
|
|
sleep 2
|
|
|
|
actual=$(cat "$TMP")
|
|
expected='^[[?997;2n' # 2 = light (from the terminal), not 1 = dark (from bg)
|
|
|
|
if [ "$actual" = "$expected" ]; then
|
|
[ -n "$VERBOSE" ] && echo "[PASS] reported terminal theme ($actual)"
|
|
exit 0
|
|
fi
|
|
|
|
echo "[FAIL] expected '$expected' (light, from terminal), got '$actual'"
|
|
exit 1
|