window_pane_redraw_floating() reports damage for only a floating pane's
old and new rectangle (via redraw_damage_window(), grown by one cell to
cover its border frame - see the "floating" case in screen-redraw.c),
instead of the caller falling back to a full window redraw. Any other
pane whose *scrollbar strip* - not its whole body - intersects either
rectangle still gets PANE_REDRAWSCROLLBAR directly, since scrollbars
aren't covered by the damage system.
Introduce a per-window list of damaged rectangles (struct redraw_damage)
and redraw_damage_window() to record them, redraw_client_damage() to
consume them by composing exactly the damaged cells (via a new
redraw_draw_damage_rect(), which also force-refreshes any pane-status
span it touches, since window_make_pane_status()'s content-diff check
has no way to know the physical cells were disturbed by something else).
redraw_draw_span() now takes an explicit [clip_x, clip_x + clip_n) range
instead of always drawing a span's full width, so a damage rectangle can
redraw just the portion of a span it actually covers.
screen_write_redraw_cb() - the fallback when a write can't be applied
directly to the terminal - now reports damage for just the affected row
via this mechanism, instead of unconditionally flagging the whole pane
for a full redraw.
wp->flags |= PANE_REDRAWSCROLLBAR was set unconditionally whenever a pane
reserved a scrollbar, even if layout_fix_panes() left its geometry
completely unchanged - forcing a needless scrollbar redraw on every layout
pass. Move it inside the existing "did this pane's geometry actually
change" check.
* refs/remotes/tmux-openbsd/master:
If writing a file fails, propagate the error to the server via a new message. Use a client flag rather than bumping the protocol version. GitHub issue 5451.
Add default terminal features for Rio, GitHub issue 5489 from Raphael Amorim.
* refs/remotes/tmux-openbsd/master:
Attach window to session earlier so resize cannot cause customize mode to blow up. Reported by Marcel Partap.
Do not copy too many positions when deleting, GitHub issue 5478 from Uzair Aftab.
* refs/remotes/tmux-openbsd/master:
Always unzoom before splitting window, for floating panes also. We already unzoomed for tiled panes and this does the same for floating panes (until we support having them float over a zoomed pane). From Éric NICOLAS.
Forks are just wasting CI cycles spinning actions which are probably not
looked at. Also avoid locking issues and PRs on any forks with
upstream's policies.
* refs/remotes/tmux-openbsd/master:
Use ACS arrows for tree mode.
Do not crash when synchronizing groups and there is no current window. GitHub issue 5467 from Ju-an Zhang.
Add pane_private_modes format with list of DEC private modes, from George Nachman.
Do not log when logging is off, from Michael Grant.
* refs/remotes/tmux-openbsd/master:
Do not attempt to drain write buffer on stuck clients, since it requires a weird dance to make libevent do it. Instead, just ignore the client and destroy the buffer normally if not drained in 10 seconds.
* refs/remotes/tmux-openbsd/master:
Do not let a stuck client prevent the server from exiting - give up after 10 seconds. GitHub issue 5444 from Ben Maurer.
* refs/remotes/tmux-openbsd/master:
Queue control mode notifications rather than emitting them inside %begin/%end, GitHub issue 5458 from George Nachman.
* refs/remotes/tmux-openbsd/master:
Store background colour in padding cells and correctly clear adjacent cells when tabs are overwritten, GitHu issue 5441 from Ayman Bagabas.
Exit failure on socket failure, from Rayan Salhab.
Pessimize compiler flags for screen-redraw.c to prevent tmux from dumping core upon startup on landisk.