mirror of
https://github.com/tmux/tmux.git
synced 2026-10-06 17:49:52 +00:00
65 lines
1.5 KiB
Bash
65 lines
1.5 KiB
Bash
#!/bin/sh
|
|
|
|
# Popups require an attached terminal and cannot be displayed by a control
|
|
# client.
|
|
# A popup command from control mode must be ignored cleanly, leaving the
|
|
# client command queue and server usable.
|
|
|
|
PATH=/bin:/usr/bin
|
|
TERM=screen
|
|
export PATH TERM
|
|
|
|
[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
|
|
TMUX="$TEST_TMUX -LtestA$$ -f/dev/null"
|
|
DIR=$(mktemp -d) || exit 1
|
|
FIFO=$DIR/input
|
|
OUT=$DIR/output
|
|
RAN=$DIR/popup-ran
|
|
|
|
fail()
|
|
{
|
|
echo "$*" >&2
|
|
exit 1
|
|
}
|
|
|
|
cleanup()
|
|
{
|
|
exec 3>&-
|
|
$TMUX kill-server 2>/dev/null
|
|
rm -rf "$DIR"
|
|
}
|
|
trap cleanup 0 1 15
|
|
|
|
mkfifo "$FIFO" || exit 1
|
|
$TMUX new-session -d -s control -x40 -y10 'exec sleep 100' || exit 1
|
|
$TMUX -C attach-session -t control <"$FIFO" >"$OUT" 2>&1 &
|
|
control_pid=$!
|
|
exec 3>"$FIFO"
|
|
|
|
i=0
|
|
while [ "$i" -lt 50 ]; do
|
|
$TMUX list-clients -F '#{client_flags}' 2>/dev/null |
|
|
grep -q 'control-mode' && break
|
|
sleep 0.1
|
|
i=$((i + 1))
|
|
done
|
|
[ "$i" -lt 50 ] || fail "control client did not attach"
|
|
|
|
printf '%s\n' "display-popup -E 'touch $RAN'" >&3
|
|
printf '%s\n' "display-message -p CONTROL-POPUP-ALIVE" >&3
|
|
|
|
i=0
|
|
while [ "$i" -lt 50 ]; do
|
|
grep -q 'CONTROL-POPUP-ALIVE' "$OUT" 2>/dev/null && break
|
|
if ! kill -0 "$control_pid" 2>/dev/null; then
|
|
fail "control client exited after display-popup"
|
|
fi
|
|
sleep 0.1
|
|
i=$((i + 1))
|
|
done
|
|
[ "$i" -lt 50 ] || fail "command after control-client popup did not run"
|
|
$TMUX has-session -t control || fail "server exited after control-client popup"
|
|
[ ! -e "$RAN" ] || fail "control client started a popup command"
|
|
|
|
exit 0
|