From a877a5d8c96f317cb8c496f0c9afa0304be926a6 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 17 Apr 2020 21:33:18 +0000 Subject: Do not move the cursor to the existing y position if it is invalid, go home instead. --- tty.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'tty.c') diff --git a/tty.c b/tty.c index 4090a115..9c03c08a 100644 --- a/tty.c +++ b/tty.c @@ -1739,7 +1739,10 @@ tty_cmd_scrollup(struct tty *tty, const struct tty_ctx *ctx) for (i = 0; i < ctx->num; i++) tty_putc(tty, '\n'); } else { - tty_cursor(tty, 0, tty->cy); + if (tty->cy == UINT_MAX) + tty_cursor(tty, 0, 0); + else + tty_cursor(tty, 0, tty->cy); tty_putcode1(tty, TTYC_INDN, ctx->num); } } @@ -2063,8 +2066,12 @@ tty_region(struct tty *tty, u_int rupper, u_int rlower) * flag so further output causes a line feed). As a workaround, do an * explicit move to 0 first. */ - if (tty->cx >= tty->sx) - tty_cursor(tty, 0, tty->cy); + if (tty->cx >= tty->sx) { + if (tty->cy == UINT_MAX) + tty_cursor(tty, 0, 0); + else + tty_cursor(tty, 0, tty->cy); + } tty_putcode2(tty, TTYC_CSR, tty->rupper, tty->rlower); tty->cx = tty->cy = UINT_MAX; -- cgit From a7a9460d2790161f7bb60c4047acf32d3aa93ed9 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 17 Apr 2020 22:16:28 +0000 Subject: Set mode properly before and after redrawing, and don't bother calculating cursor position if it won't be used. --- tty.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'tty.c') diff --git a/tty.c b/tty.c index 9c03c08a..82436959 100644 --- a/tty.c +++ b/tty.c @@ -2151,6 +2151,9 @@ tty_cursor(struct tty *tty, u_int cx, u_int cy) u_int thisx, thisy; int change; + if (tty->flags & TTY_BLOCK) + return; + if (cx > tty->sx - 1) cx = tty->sx - 1; -- cgit