mirror of
https://github.com/tmux/tmux.git
synced 2026-03-06 07:45:35 +00:00
71 lines
2.5 KiB
Bash
Executable File
71 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Test that window-size=latest resizes windows correctly when switching
|
|
# windows in session groups. When a client switches to a window, it should
|
|
# resize immediately to match that client's size.
|
|
#
|
|
# Tests both switch-client and select-window, which use different code paths.
|
|
|
|
PATH=/bin:/usr/bin
|
|
TERM=screen
|
|
|
|
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
|
|
TMUX="$TEST_TMUX -Ltest"
|
|
$TMUX kill-server 2>/dev/null
|
|
|
|
TMP1=$(mktemp)
|
|
TMP2=$(mktemp)
|
|
TMP3=$(mktemp)
|
|
trap "rm -f $TMP1 $TMP2 $TMP3" 0 1 15
|
|
|
|
# Create a session with two windows, staying on window 0.
|
|
$TMUX -f/dev/null new -d -s test -x 20 -y 6 || exit 1
|
|
$TMUX neww -t test || exit 1
|
|
$TMUX selectw -t test:0 || exit 1
|
|
|
|
# Attach a small 20x6 client in control-mode and have it select window 1. This makes
|
|
# the small client the "latest" for window 1. The sleep keeps stdin open so the
|
|
# control client stays attached.
|
|
(echo "refresh-client -C 20,6"; echo "selectw -t :1"; sleep 5) |
|
|
$TMUX -f/dev/null -C attach -t test >$TMP1 2>&1 &
|
|
|
|
# Wait for small client to be on window 1.
|
|
n=0
|
|
while [ $n -lt 20 ]; do
|
|
$TMUX lsc -F '#{client_name} #{window_index}' 2>/dev/null | grep -q " 1$" && break
|
|
sleep 0.1
|
|
n=$((n + 1))
|
|
done
|
|
|
|
# Create a grouped session with a larger 30x10 client, also in control mode. It
|
|
# starts on window 0 (inherited), then switches to window 1 with
|
|
# `switch-client`.
|
|
(echo "refresh-client -C 30,10"; echo "switch-client -t :=1"; sleep 5) |
|
|
$TMUX -f/dev/null -C new -t test -x 30 -y 10 >$TMP2 2>&1 &
|
|
|
|
# Wait briefly for the switch-client command to execute, then check.
|
|
# The resize should happen immediately (within 0.2s).
|
|
sleep 0.2
|
|
OUT1=$($TMUX display -t test:1 -p '#{window_width}x#{window_height}' 2>/dev/null)
|
|
|
|
# Also test selectw (select-window) which uses a different code path.
|
|
# Create a third grouped session with a 25x8 client, switch to window 1
|
|
# using selectw instead of switch-client.
|
|
(echo "refresh-client -C 25,8"; echo "selectw -t :1"; sleep 5) |
|
|
$TMUX -f/dev/null -C new -t test -x 25 -y 8 >$TMP3 2>&1 &
|
|
|
|
sleep 0.2
|
|
OUT2=$($TMUX display -t test:1 -p '#{window_width}x#{window_height}' 2>/dev/null)
|
|
|
|
# Clean up - kill server (terminates clients). Don't wait for background
|
|
# sleeps; they'll be orphaned but harmless.
|
|
$TMUX kill-server 2>/dev/null
|
|
|
|
# Window 1 should have resized to 30x10 (the second client's size).
|
|
[ "$OUT1" = "30x10" ] || { echo "switch-client resize failed: $OUT1"; exit 1; }
|
|
|
|
# Window 1 should have resized to 25x8 (the third client's size).
|
|
[ "$OUT2" = "25x8" ] || { echo "selectw resize failed: $OUT2"; exit 1; }
|
|
|
|
exit 0
|