diff --git a/regress/screen-redraw-cache.sh b/regress/screen-redraw-cache.sh index 5f0a1ddf..af256668 100644 --- a/regress/screen-redraw-cache.sh +++ b/regress/screen-redraw-cache.sh @@ -144,4 +144,19 @@ compare cache-window-b $TMUX2 selectw -t$A || exit 1 compare cache-window-a-again +# --- Size change: the client (and so the scene) is resized. --- + +# With window-size latest the inner window tracks the client size, so resizing +# the outer window resizes the inner client and the scene. The cached scene must +# be rebuilt at the new size (the scene->sx/sy mismatch path in +# redraw_get_scene), not drawn at the old size. +$TMUX2 set -g window-size latest || exit 1 +$TMUX2 neww -d "sh -c 'exec sleep 100'" || exit 1 +$TMUX2 selectw -t:\$ || exit 1 +$TMUX2 splitw -v "$C" || exit 1 +compare cache-resizeclient-before + +$TMUX resizew -x30 -y10 || exit 1 +compare cache-resizeclient-after + exit 0 diff --git a/regress/screen-redraw-floating.sh b/regress/screen-redraw-floating.sh index a60cdb40..2ddecda0 100644 --- a/regress/screen-redraw-floating.sh +++ b/regress/screen-redraw-floating.sh @@ -171,4 +171,15 @@ $TMUX2 set status-format[0] "" || exit 1 $TMUX2 new-pane -x20 -y6 -X8 -Y7 "sh -c 'printf OVERST; exec sleep 100'" || exit 1 compare floating-over-status +# A window left with only a floating pane: killing the single tiled pane removes +# it from the layout, so the area it occupied is no longer owned by any pane and +# is drawn as EMPTY cells (middle dots) around the float. This is the only way to +# produce a REDRAW_SPAN_EMPTY span. +new_scene 40 12 +$TMUX2 new-pane -x20 -y6 -X8 -Y3 "sh -c 'printf FLOAT; exec sleep 100'" || exit 1 +tiled=$($TMUX2 list-panes -F '#{pane_floating_flag} #{pane_id}' | \ + awk '$1==0{print $2; exit}') || exit 1 +$TMUX2 kill-pane -t "$tiled" || exit 1 +compare floating-empty + exit 0 diff --git a/regress/screen-redraw-results/cache-resizeclient-after.result b/regress/screen-redraw-results/cache-resizeclient-after.result new file mode 100644 index 00000000..edb64695 --- /dev/null +++ b/regress/screen-redraw-results/cache-resizeclient-after.result @@ -0,0 +1,10 @@ + + + + + +────────────────────────────── + + + + diff --git a/regress/screen-redraw-results/cache-resizeclient-before.result b/regress/screen-redraw-results/cache-resizeclient-before.result new file mode 100644 index 00000000..3a6144ae --- /dev/null +++ b/regress/screen-redraw-results/cache-resizeclient-before.result @@ -0,0 +1,14 @@ + + + + + + + +──────────────────────────────────────── + + + + + + diff --git a/regress/screen-redraw-results/floating-empty.result b/regress/screen-redraw-results/floating-empty.result new file mode 100644 index 00000000..31a71de5 --- /dev/null +++ b/regress/screen-redraw-results/floating-empty.result @@ -0,0 +1,12 @@ +········································ +········································ +·······┌────────────────────┐··········· +·······│FLOAT │··········· +·······│ │··········· +·······│ │··········· +·······│ │··········· +·······│ │··········· +·······│ │··········· +·······└────────────────────┘··········· +········································ + diff --git a/regress/screen-redraw-results/zoomed-pane.result b/regress/screen-redraw-results/zoomed-pane.result new file mode 100644 index 00000000..5cf5d3dc --- /dev/null +++ b/regress/screen-redraw-results/zoomed-pane.result @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/regress/screen-redraw-tiled.sh b/regress/screen-redraw-tiled.sh index fd2b6d2a..e428d7db 100644 --- a/regress/screen-redraw-tiled.sh +++ b/regress/screen-redraw-tiled.sh @@ -177,4 +177,13 @@ $TMUX2 setw pane-border-status top || exit 1 title_all p compare pane-status-2x2-top +# A zoomed pane: the active pane fills the whole window and the other panes and +# their borders are not drawn at all (a single full-window pane scene). +new_scene +$TMUX2 splitw -h "$C" || exit 1 +$TMUX2 splitw -v "$C" || exit 1 +$TMUX2 selectp -t0 || exit 1 +$TMUX2 resize-pane -Z || exit 1 +compare zoomed-pane + exit 0