From 0e6fe5a09786faf4c79b67c6eb48425c47e9c018 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 15 Jun 2026 14:56:30 +0000 Subject: [PATCH 1/2] Convert cursor position back to pane coordinates for tty_cmd_cell. --- screen-write.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/screen-write.c b/screen-write.c index fbef8320..ff1a713f 100644 --- a/screen-write.c +++ b/screen-write.c @@ -2587,7 +2587,7 @@ screen_write_cell(struct screen_write_ctx *ctx, const struct grid_cell *gc) if (ri->nx == 0) continue; for (n = 0; n < ri->nx; n++) { - ttyctx.ocx = ri->px + n; + ttyctx.ocx = (int)ri->px - xoff + (int)n; tty_write(tty_cmd_cell, &ttyctx); } } From bb750b07bc0804f822357ec3ced7a258c0119890 Mon Sep 17 00:00:00 2001 From: nicm Date: Mon, 15 Jun 2026 15:05:12 +0000 Subject: [PATCH 2/2] If the client is blocked, defer the redraw because it may end up partially discarded leading to redraw artifacts. --- server-client.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/server-client.c b/server-client.c index 35a505b1..a40c348b 100644 --- a/server-client.c +++ b/server-client.c @@ -2051,8 +2051,13 @@ server_client_check_redraw(struct client *c) } } } - if (needed && (left = EVBUFFER_LENGTH(tty->out)) != 0) { - log_debug("%s: redraw deferred (%zu left)", c->name, left); + left = EVBUFFER_LENGTH(tty->out); + if (needed && (left != 0 || (tty->flags & TTY_BLOCK))) { + if (left != 0) { + log_debug("%s: redraw deferred (%zu left)", c->name, + left); + } else + log_debug("%s: redraw deferred (blocked)", c->name); if (!evtimer_initialized(&ev)) evtimer_set(&ev, server_client_redraw_timer, NULL); if (!evtimer_pending(&ev, NULL)) {