diff --git a/regress/format-list-empty.sh b/regress/format-list-empty.sh new file mode 100644 index 000000000..e66b332dc --- /dev/null +++ b/regress/format-list-empty.sh @@ -0,0 +1,89 @@ +#!/bin/sh + +# Text before and after an empty or completely trimmed list is drawn with +# the selected alignment, including mouse ranges in the surviving text. + +PATH=/bin:/usr/bin +TERM=screen +LC_ALL=C.UTF-8 +export PATH TERM LC_ALL + +[ -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 + +check() +{ + $TMUX set -g 'status-format[0]' "$1" || exit 1 + i=0 + while [ "$i" -lt 50 ]; do + got=$($TMUX2 capture-pane -p -t outer:0.0 | head -n 1) + [ "$got" = "$2" ] && return + sleep 0.1 + i=$((i + 1)) + done + echo "format '$1': got '$got', expected '$2'" >&2 + exit 1 +} + +click() +{ + $TMUX set -g @clicked none || exit 1 + seq=$(printf '\033[<0;%s;1M\033[<0;%s;1m' "$1" "$1") + $TMUX2 send-keys -t outer:0.0 -l "$seq" || exit 1 + i=0 + while [ "$i" -lt 50 ]; do + got=$($TMUX show -gv @clicked) + [ "$got" = "$2" ] && break + sleep 0.1 + i=$((i + 1)) + done + [ "$got" = "$2" ] || { + echo "column $1: range '$got', expected '$2'" >&2 + exit 1 + } + sleep 0.5 +} + +$TMUX new-session -d -s inner -x 20 -y 8 'sleep 100' || exit 1 +$TMUX set -g status-position top || exit 1 +$TMUX set -g mouse on || exit 1 +$TMUX bind -n MouseDown1Status \ + set -gF @clicked '#{mouse_status_range}' || exit 1 +$TMUX2 new-session -d -s outer -x 20 -y 8 '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 align in left centre right; do + case "$align" in + left) padding=0 ;; + centre) padding=7 ;; + right) padding=13 ;; + esac + want="$(printf '%*s' "$padding" '')prepost" + format="#[align=$align,range=user|pre]pre#[norange]" + format=$format'#[list=on]#[nolist]' + format=$format'#[range=user|post]post#[norange]' + check "$format" "$want" + click "$((padding + 1))" pre + click "$((padding + 4))" post + + # The list has text and a range, but no room remains for it. + format="#[align=$align,range=user|pre]0123456789#[norange]" + format=$format'#[list=on]#[range=user|hidden]' + format=$format'HHHHHHHHHHHHHHHHHHHH#[norange]#[nolist]' + format=$format'#[range=user|post]abcdefghij#[norange]' + check "$format" 0123456789abcdefghij + click 1 pre + click 11 post +done + +exit 0