aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2009-10-21 09:36:53 +0000
committerNicholas Marriott <nicm@openbsd.org>2009-10-21 09:36:53 +0000
commit683ddbc466bbd6ff2a890c11edccc482bfe0dc87 (patch)
treee479ab9333456cf45c6e384c4fb42bd22017a681
parent7825871d6a04494c704521abb6fc4240216382ca (diff)
downloadrtmux-683ddbc466bbd6ff2a890c11edccc482bfe0dc87.tar.gz
rtmux-683ddbc466bbd6ff2a890c11edccc482bfe0dc87.tar.bz2
rtmux-683ddbc466bbd6ff2a890c11edccc482bfe0dc87.zip
Some terminals don't correctly clear their let's-wrap flag after changing the
scroll region (which moves the cursor to 0,0). This means that if the cursor was at the edge of the screen, any further output after scroll region change incorrectly causes a line wrap. Add a workaround to move the cursor to position 0 if it is at the screen edge before changing scroll region.
-rw-r--r--tty.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/tty.c b/tty.c
index ee725edf..177648b7 100644
--- a/tty.c
+++ b/tty.c
@@ -955,6 +955,15 @@ tty_region(struct tty *tty, u_int rupper, u_int rlower)
tty->rupper = rupper;
tty->rlower = rlower;
+ /*
+ * Some terminals (such as PuTTY) do not correctly reset the cursor to
+ * 0,0 if it is beyond the last column (they do not reset their wrap
+ * 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);
+
tty->cx = 0;
tty->cy = 0;