From fec607e6dd4adb40a41f9f8cf4d4f1d37a48deeb Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 28 Apr 2017 17:58:44 +0000 Subject: [PATCH] Konsole incorrectly ignores SU (CSI S) if the parameter is bigger than the scroll region, so clamp it. Reported by Moritz Bunkus. --- usr.bin/tmux/tty.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/usr.bin/tmux/tty.c b/usr.bin/tmux/tty.c index 5551b0fd2fd..a298b07b64d 100644 --- a/usr.bin/tmux/tty.c +++ b/usr.bin/tmux/tty.c @@ -1,4 +1,4 @@ -/* $OpenBSD: tty.c,v 1.268 2017/04/25 18:30:29 nicm Exp $ */ +/* $OpenBSD: tty.c,v 1.269 2017/04/28 17:58:44 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -1117,7 +1117,7 @@ void tty_cmd_scrollup(struct tty *tty, const struct tty_ctx *ctx) { struct window_pane *wp = ctx->wp; - u_int i; + u_int i, lines; if ((!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || tty_fake_bce(tty, wp, 8) || @@ -1131,12 +1131,21 @@ tty_cmd_scrollup(struct tty *tty, const struct tty_ctx *ctx) tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); tty_margin_pane(tty, ctx); - if (ctx->num == 1 || !tty_term_has(tty->term, TTYC_INDN)) { + /* + * Konsole has a bug where it will ignore SU if the parameter is more + * than the height of the scroll region. Clamping the parameter doesn't + * hurt in any case. + */ + lines = tty->rlower - tty->rupper; + if (lines > ctx->num) + lines = ctx->num; + + if (lines == 1 || !tty_term_has(tty->term, TTYC_INDN)) { tty_cursor(tty, tty->rright, tty->rlower); - for (i = 0; i < ctx->num; i++) + for (i = 0; i < lines; i++) tty_putc(tty, '\n'); } else - tty_putcode1(tty, TTYC_INDN, ctx->num); + tty_putcode1(tty, TTYC_INDN, lines); } void -- 2.20.1