mirror of
https://github.com/tmux/tmux.git
synced 2026-10-17 00:44:54 +00:00
Side status line regress tests.
This commit is contained in:
113
regress/side-status-pane-drag.sh
Normal file
113
regress/side-status-pane-drag.sh
Normal file
@@ -0,0 +1,113 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Creating, moving and resizing panes must use window coordinates with a
|
||||
# side status line, including when the horizontal status is at the top.
|
||||
|
||||
PATH=/bin:/usr/bin
|
||||
TERM=screen
|
||||
export PATH TERM
|
||||
|
||||
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
|
||||
TMUX="$TEST_TMUX -LtestA$$ -f/dev/null"
|
||||
TMUX2="$TEST_TMUX -LtestB$$ -f/dev/null"
|
||||
|
||||
cleanup()
|
||||
{
|
||||
$TMUX2 kill-server >/dev/null 2>&1
|
||||
$TMUX kill-server >/dev/null 2>&1
|
||||
}
|
||||
trap cleanup 0 1 15
|
||||
|
||||
fail()
|
||||
{
|
||||
echo "$side/$status: $*" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Send window coordinates as one-based terminal coordinates.
|
||||
mouse()
|
||||
{
|
||||
seq=$(printf '\033[<%s;%s;%s%s' "$1" \
|
||||
"$(( $2 + xoff + 1 ))" "$(( $3 + yoff + 1 ))" "$4")
|
||||
$TMUX2 send-keys -t outer:0.0 -l "$seq" || fail "send mouse failed"
|
||||
sleep 0.2
|
||||
}
|
||||
|
||||
drag()
|
||||
{
|
||||
mouse "$1" "$2" "$3" M
|
||||
mouse "$(( $1 + 32 ))" "$4" "$5" M
|
||||
mouse "$1" "$4" "$5" m
|
||||
}
|
||||
|
||||
check()
|
||||
{
|
||||
i=0
|
||||
while [ "$i" -lt 50 ]; do
|
||||
got=$($TMUX display -p -t "$1" \
|
||||
'#{pane_left},#{pane_top},#{pane_width},#{pane_height}')
|
||||
[ "$got" = "$2" ] && return
|
||||
sleep 0.1
|
||||
i=$((i + 1))
|
||||
done
|
||||
fail "pane $1: got '$got', expected '$2'"
|
||||
}
|
||||
|
||||
$TMUX new-session -d -s inner -x 80 -y 24 'sleep 100' || exit 1
|
||||
$TMUX set -g mouse on || exit 1
|
||||
$TMUX set -g default-command 'sleep 100' || exit 1
|
||||
$TMUX set -g side-status-width 14 || exit 1
|
||||
BASE=$($TMUX display -p '#{pane_id}') || exit 1
|
||||
$TMUX2 new-session -d -s outer -x 80 -y 24 'sleep 100' || exit 1
|
||||
$TMUX2 set -g status off || exit 1
|
||||
$TMUX2 respawn-pane -k -t outer:0.0 "$TMUX attach -t inner" || exit 1
|
||||
sleep 1
|
||||
|
||||
for side in left right; do
|
||||
$TMUX set -g side-status "$side" || exit 1
|
||||
xoff=0
|
||||
[ "$side" = left ] && xoff=14
|
||||
for status in off top bottom; do
|
||||
yoff=0
|
||||
if [ "$status" = off ]; then
|
||||
$TMUX set -g status off || exit 1
|
||||
else
|
||||
$TMUX set -g status 2 || exit 1
|
||||
$TMUX set -g status-position "$status" || exit 1
|
||||
[ "$status" = top ] && yoff=2
|
||||
fi
|
||||
sleep 0.5
|
||||
|
||||
# Ctrl-drag creates a floating pane inside the rectangle.
|
||||
drag 16 2 1 10 5
|
||||
id=$($TMUX list-panes -F \
|
||||
'#{?pane_floating_flag,#{pane_id},}' | tail -1)
|
||||
[ -n "$id" ] || fail "drag did not create a floating pane"
|
||||
check "$id" '3,2,7,3'
|
||||
$TMUX kill-pane -t "$id" || exit 1
|
||||
|
||||
# Alt-drag moves a floating pane without changing its size.
|
||||
id=$($TMUX new-pane -dPF '#{pane_id}' \
|
||||
-x 14 -y 7 -X 5 -Y 3 'sleep 100') || exit 1
|
||||
check "$id" '6,4,12,5'
|
||||
drag 8 8 5 12 7
|
||||
check "$id" '10,6,12,5'
|
||||
|
||||
# Dragging the bottom right border resizes both dimensions.
|
||||
drag 0 22 11 25 13
|
||||
check "$id" '10,6,15,7'
|
||||
$TMUX kill-pane -t "$id" || exit 1
|
||||
|
||||
# The same terminal offsets apply to tiled pane borders.
|
||||
id=$($TMUX split-window -dhPF '#{pane_id}' \
|
||||
-t "$BASE" 'sleep 100') || exit 1
|
||||
width=$($TMUX display -p -t "$BASE" '#{pane_width}')
|
||||
drag 0 "$width" 5 "$((width + 4))" 5
|
||||
got=$($TMUX display -p -t "$BASE" '#{pane_width}')
|
||||
[ "$got" = "$((width + 4))" ] ||
|
||||
fail "tiled width: got '$got', expected '$((width + 4))'"
|
||||
$TMUX kill-pane -t "$id" || exit 1
|
||||
done
|
||||
done
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user