From 57a13664cc2cf0db1c6b4f575c4934bf4ec1c4ee Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 1 Sep 2026 19:50:58 +0000 Subject: [PATCH] Do not allow cursor on/off to escape synchronized updates. --- screen-redraw.c | 8 +++----- server-client.c | 8 ++++++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/screen-redraw.c b/screen-redraw.c index 42cc5abed..c47bf09d5 100644 --- a/screen-redraw.c +++ b/screen-redraw.c @@ -1,4 +1,4 @@ -/* $OpenBSD: screen-redraw.c,v 1.157 2026/07/24 08:49:23 nicm Exp $ */ +/* $OpenBSD: screen-redraw.c,v 1.158 2026/09/01 19:50:58 nicm Exp $ */ /* * Copyright (c) 2026 Nicholas Marriott @@ -1738,8 +1738,7 @@ redraw_draw(struct client *c, struct window_pane *wp, int flags) else loop->flags &= ~PANE_NEWSTATUS; - width = redraw_pane_status_width(&dctx, loop, - &first); + width = redraw_pane_status_width(&dctx, loop, &first); if (width == 0) continue; @@ -1770,7 +1769,7 @@ redraw_draw(struct client *c, struct window_pane *wp, int flags) } } } - tty_sync_start(tty); + tty_sync_start(tty); /* end in server_client_reset_state */ tty_update_mode(tty, tty->mode & ~CURSOR_MODES, NULL); if (wp != NULL) @@ -1815,7 +1814,6 @@ redraw_draw(struct client *c, struct window_pane *wp, int flags) c->overlay_draw(c, c->overlay_data); tty_reset(tty); - tty_sync_end(tty); log_debug("%s: finished @%u redraw", c->name, scene->w->id); diff --git a/server-client.c b/server-client.c index 97c83514f..54e615ed4 100644 --- a/server-client.c +++ b/server-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server-client.c,v 1.509 2026/08/28 07:36:01 nicm Exp $ */ +/* $OpenBSD: server-client.c,v 1.510 2026/09/01 19:50:58 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -2249,7 +2249,7 @@ server_client_reset_state(struct client *c) cy += status_line_size(c); } - if ((pane_mode & MODE_SYNC) || !cursor) + if (!cursor) mode &= ~MODE_CURSOR; } } else if (c->overlay_mode == NULL || s == NULL) @@ -2257,6 +2257,10 @@ server_client_reset_state(struct client *c) if (~pane_mode & MODE_SYNC) { log_debug("%s: cursor to %u,%u", __func__, cx, cy); tty_cursor(tty, cx, cy); + } else { + mode &= ~CURSOR_MODES; + mode |= tty->mode & CURSOR_MODES; + s = NULL; } /*