From 5965228c1f20a835ca9bd3bdf5152b40e531d81c Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 16 Oct 2026 11:33:44 +0000 Subject: [PATCH 1/2] Like xterm, ignore DL and EL outside the scroll region, GitHub issue 5754. --- screen-write.c | 64 +++++--------------------------------------------- 1 file changed, 6 insertions(+), 58 deletions(-) diff --git a/screen-write.c b/screen-write.c index c23f2d508..9fd14af52 100644 --- a/screen-write.c +++ b/screen-write.c @@ -1,4 +1,4 @@ -/* $OpenBSD: screen-write.c,v 1.302 2026/10/16 07:59:06 nicm Exp $ */ +/* $OpenBSD: screen-write.c,v 1.303 2026/10/16 11:33:44 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -1613,35 +1613,12 @@ screen_write_insertline(struct screen_write_ctx *ctx, u_int ny, u_int bg) struct screen *s = ctx->s; struct grid *gd = s->grid; struct tty_ctx ttyctx; - u_int sy = screen_size_y(s); if (ny == 0) ny = 1; - if (s->cy < s->rupper || s->cy > s->rlower) { - if (ny > sy - s->cy) - ny = sy - s->cy; - if (ny == 0) - return; - - screen_write_initctx(ctx, &ttyctx, 1, 1); - ttyctx.bg = bg; - - grid_view_insert_lines(gd, s->cy, ny, bg); - - screen_write_collect_flush(ctx, 0, __func__); - ttyctx.n = ny; - - if (!screen_write_should_draw_lines(ctx, s->cy, sy - s->cy)) - return; - if (~ttyctx.flags & TTY_CTX_PANE_OBSCURED || ctx->wp == NULL) { - tty_write(tty_cmd_insertline, &ttyctx); - return; - } - - screen_write_redraw_pane(ctx, &ttyctx); + if (s->cy < s->rupper || s->cy > s->rlower) return; - } if (ny > s->rlower + 1 - s->cy) ny = s->rlower + 1 - s->cy; @@ -1651,10 +1628,7 @@ screen_write_insertline(struct screen_write_ctx *ctx, u_int ny, u_int bg) screen_write_initctx(ctx, &ttyctx, 1, 1); ttyctx.bg = bg; - if (s->cy < s->rupper || s->cy > s->rlower) - grid_view_insert_lines(gd, s->cy, ny, bg); - else - grid_view_insert_lines_region(gd, s->rlower, s->cy, ny, bg); + grid_view_insert_lines_region(gd, s->rlower, s->cy, ny, bg); screen_write_collect_flush(ctx, 0, __func__); ttyctx.n = ny; @@ -1676,36 +1650,13 @@ screen_write_deleteline(struct screen_write_ctx *ctx, u_int ny, u_int bg) struct screen *s = ctx->s; struct grid *gd = s->grid; struct tty_ctx ttyctx; - u_int sy = screen_size_y(s), ry; + u_int ry; if (ny == 0) ny = 1; - if (s->cy < s->rupper || s->cy > s->rlower) { - if (ny > sy - s->cy) - ny = sy - s->cy; - if (ny == 0) - return; - - screen_write_initctx(ctx, &ttyctx, 1, 1); - ttyctx.bg = bg; - - grid_view_delete_lines(gd, s->cy, ny, bg); - - screen_write_collect_flush(ctx, 0, __func__); - ttyctx.n = ny; - - ry = s->rlower + 1 - s->rupper; - if (!screen_write_should_draw_lines(ctx, s->rupper, ry)) - return; - if (~ttyctx.flags & TTY_CTX_PANE_OBSCURED || ctx->wp == NULL) { - tty_write(tty_cmd_deleteline, &ttyctx); - return; - } - - screen_write_redraw_pane(ctx, &ttyctx); + if (s->cy < s->rupper || s->cy > s->rlower) return; - } ry = s->rlower + 1 - s->cy; if (ny > ry) @@ -1716,10 +1667,7 @@ screen_write_deleteline(struct screen_write_ctx *ctx, u_int ny, u_int bg) screen_write_initctx(ctx, &ttyctx, 1, 1); ttyctx.bg = bg; - if (s->cy < s->rupper || s->cy > s->rlower) - grid_view_delete_lines(gd, s->cy, ny, bg); - else - grid_view_delete_lines_region(gd, s->rlower, s->cy, ny, bg); + grid_view_delete_lines_region(gd, s->rlower, s->cy, ny, bg); screen_write_collect_flush(ctx, 0, __func__); ttyctx.n = ny; From 00bddc889337c4c25c86360f92146dc750c96e13 Mon Sep 17 00:00:00 2001 From: bket Date: Fri, 16 Oct 2026 11:34:49 +0000 Subject: [PATCH 2/2] tmux: remove redundant event_del()/evtimer_del() event_add(3) automatically replaces any pending timeout for an existing event, making explicit event_del() / evtimer_del() calls immediately before event_add() / evtimer_add() unnecessary. OK nicm@ --- input.c | 4 +--- server-client.c | 4 +--- tty.c | 3 +-- window.c | 3 +-- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/input.c b/input.c index 5cad18c08..2f93c946d 100644 --- a/input.c +++ b/input.c @@ -1,4 +1,4 @@ -/* $OpenBSD: input.c,v 1.277 2026/10/14 16:23:43 nicm Exp $ */ +/* $OpenBSD: input.c,v 1.278 2026/10/16 11:34:49 bket Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -826,7 +826,6 @@ input_start_ground_timer(struct input_ctx *ictx) { struct timeval tv = { .tv_sec = 5, .tv_usec = 0 }; - event_del(&ictx->ground_timer); event_add(&ictx->ground_timer, &tv); } @@ -3551,7 +3550,6 @@ input_start_request_timer(struct input_ctx *ictx) { struct timeval tv = { .tv_sec = 0, .tv_usec = 100000 }; - event_del(&ictx->request_timer); event_add(&ictx->request_timer, &tv); } diff --git a/server-client.c b/server-client.c index 62b3b77e4..ff6d16721 100644 --- a/server-client.c +++ b/server-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server-client.c,v 1.523 2026/10/16 07:59:06 nicm Exp $ */ +/* $OpenBSD: server-client.c,v 1.524 2026/10/16 11:34:49 bket Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -1097,7 +1097,6 @@ have_event: log_debug("click timer started"); tv.tv_sec = KEYC_CLICK_TIMEOUT / 1000; tv.tv_usec = (KEYC_CLICK_TIMEOUT % 1000) * 1000L; - evtimer_del(&c->click_timer); evtimer_add(&c->click_timer, &tv); } } @@ -1577,7 +1576,6 @@ try_again: tv.tv_sec = repeat / 1000; tv.tv_usec = (repeat % 1000) * 1000L; - evtimer_del(&c->repeat_timer); evtimer_add(&c->repeat_timer, &tv); } else { c->flags &= ~CLIENT_REPEAT; diff --git a/tty.c b/tty.c index adf248a2f..a65819261 100644 --- a/tty.c +++ b/tty.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tty.c,v 1.491 2026/10/16 07:59:06 nicm Exp $ */ +/* $OpenBSD: tty.c,v 1.492 2026/10/16 11:34:49 bket Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -330,7 +330,6 @@ tty_start_start_timer(struct tty *tty) struct timeval tv = { .tv_sec = TTY_QUERY_TIMEOUT }; log_debug("%s: start timer started", c->name); - evtimer_del(&tty->start_timer); evtimer_add(&tty->start_timer, &tv); } diff --git a/window.c b/window.c index 2d0e7ff0e..8456085cc 100644 --- a/window.c +++ b/window.c @@ -1,4 +1,4 @@ -/* $OpenBSD: window.c,v 1.386 2026/10/13 10:21:58 nicm Exp $ */ +/* $OpenBSD: window.c,v 1.387 2026/10/16 11:34:49 bket Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -2667,7 +2667,6 @@ window_pane_scrollbar_start_timer(struct window_pane *wp) "pane-scrollbars-timeout"); tv.tv_sec = delay / 1000; tv.tv_usec = (delay % 1000) * 1000L; - evtimer_del(&wp->sb_auto_timer); evtimer_add(&wp->sb_auto_timer, &tv); }