mirror of
https://github.com/tmux/tmux.git
synced 2026-10-06 17:49:52 +00:00
89 lines
2.5 KiB
Bash
Executable File
89 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Each drag motion must draw the floating pane content once.
|
|
|
|
PATH=/bin:/usr/bin
|
|
TERM=screen
|
|
LC_ALL=C.UTF-8
|
|
export PATH TERM LC_ALL
|
|
|
|
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
|
|
|
|
DIR=$(mktemp -d) || exit 1
|
|
cd "$DIR" || exit 1
|
|
INNER="$TEST_TMUX -Ldoublecomp-inner-$$ -f/dev/null"
|
|
OUTER="$TEST_TMUX -Ldoublecomp-outer-$$ -f/dev/null"
|
|
|
|
fail()
|
|
{
|
|
echo "$*" >&2
|
|
exit 1
|
|
}
|
|
|
|
cleanup()
|
|
{
|
|
$OUTER kill-server 2>/dev/null
|
|
$INNER kill-server 2>/dev/null
|
|
cd /
|
|
rm -rf "$DIR"
|
|
}
|
|
trap cleanup 0 1 15
|
|
|
|
mouse()
|
|
{
|
|
sequence=$(printf '\033[<%s;%s;%s%s' "$1" "$2" "$3" "$4")
|
|
$OUTER send-keys -t outer:0.0 -l "$sequence" || exit 1
|
|
sleep 0.15
|
|
}
|
|
|
|
$INNER new-session -d -s inner -x 40 -y 15 "printf '\\033[15;1HOUTSIDE'; exec sleep 100" || exit 1
|
|
$INNER set-option -g status off || exit 1
|
|
$INNER set-option -g window-size manual || exit 1
|
|
$INNER set-option -g mouse on || exit 1
|
|
$INNER set-option -g status-interval 0 || exit 1
|
|
$INNER set-option -g automatic-rename off || exit 1
|
|
FLOAT=$($INNER new-pane -d -PF '#{pane_id}' -x 15 -y 5 -X 5 -Y 2 \
|
|
"printf 'DRAGMARK'; exec sleep 100") || exit 1
|
|
|
|
$OUTER new-session -d -s outer -x 40 -y 15 'sleep 100' || exit 1
|
|
$OUTER set-option -g status off || exit 1
|
|
$OUTER set-option -g window-size manual || exit 1
|
|
$OUTER set-option -g default-terminal screen-256color || exit 1
|
|
$OUTER respawn-pane -k -t outer:0.0 \
|
|
"$TEST_TMUX -Ldoublecomp-inner-$$ -f/dev/null attach-session -t inner" ||
|
|
exit 1
|
|
sleep 0.5
|
|
|
|
XOFF=$($INNER display-message -p -t "$FLOAT" '#{pane_left}')
|
|
YOFF=$($INNER display-message -p -t "$FLOAT" '#{pane_top}')
|
|
GRABCOL=$((XOFF + 3))
|
|
BORDERROW=$YOFF
|
|
|
|
# Begin capture after focus changes from the initial mouse press have settled.
|
|
mouse 0 "$GRABCOL" "$BORDERROW" M
|
|
$OUTER pipe-pane -O -t outer:0.0 "cat >'$DIR/output'" || exit 1
|
|
$INNER refresh-client || exit 1
|
|
sleep 0.5
|
|
grep -aq DRAGMARK "$DIR/output" || fail "capture missed floating pane content"
|
|
grep -aq OUTSIDE "$DIR/output" || fail "capture missed untouched row"
|
|
offset=$(wc -c <"$DIR/output")
|
|
|
|
i=0
|
|
steps=6
|
|
while [ "$i" -lt "$steps" ]; do
|
|
GRABCOL=$((GRABCOL + 1))
|
|
mouse 32 "$GRABCOL" "$BORDERROW" M
|
|
i=$((i + 1))
|
|
done
|
|
mouse 0 "$GRABCOL" "$BORDERROW" m
|
|
sleep 0.3
|
|
|
|
NEWXOFF=$($INNER display-message -p -t "$FLOAT" '#{pane_left}')
|
|
[ "$NEWXOFF" -eq "$((XOFF + steps))" ] || fail "floating pane did not move six columns"
|
|
tail -c +"$((offset + 1))" "$DIR/output" >"$DIR/drag-output"
|
|
n=$(perl -0777 -ne '$n = () = /DRAGMARK/g; print "$n\n"' "$DIR/drag-output")
|
|
[ "$n" -eq "$steps" ] ||
|
|
fail "$steps drag motions wrote the floating pane content $n times"
|
|
|
|
exit 0
|