summaryrefslogtreecommitdiff
path: root/usr.bin/tmux
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2017-05-12 11:13:44 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2017-05-12 11:13:44 +0000
commitda93356f9c70182b960fe88f3e82f4491a0d6a41 (patch)
tree6d3d4cffb7755d9236348bc883338dcc36e0ae7b /usr.bin/tmux
parenteb98e4d3a1e7872cdeffc3a7a37a5b096845c49d (diff)
Can use INDN to clear regions with default background colour if margins
are supported.
Diffstat (limited to 'usr.bin/tmux')
-rw-r--r--usr.bin/tmux/tty.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/usr.bin/tmux/tty.c b/usr.bin/tmux/tty.c
index 9ec5d504a9e..b417ad06059 100644
--- a/usr.bin/tmux/tty.c
+++ b/usr.bin/tmux/tty.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tty.c,v 1.275 2017/05/12 10:50:11 nicm Exp $ */
+/* $OpenBSD: tty.c,v 1.276 2017/05/12 11:13:43 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -808,6 +808,7 @@ tty_clear_area(struct tty *tty, const struct window_pane *wp, u_int py,
/* If genuine BCE is available, can try escape sequences. */
if (!tty_fake_bce(tty, wp, bg)) {
+ /* Use ED if clearing off the bottom of the terminal. */
if (px == 0 &&
px + nx >= tty->sx &&
py + ny >= tty->sy &&
@@ -818,8 +819,9 @@ tty_clear_area(struct tty *tty, const struct window_pane *wp, u_int py,
}
/*
- * If we're setting a background colour (so it is not default),
- * we can use DECFRA.
+ * On VT420 compatible terminals we can use DECFRA if the
+ * background colour isn't default (because it doesn't work
+ * after SGR 0).
*/
if (tty->term_type == TTY_VT420 && bg != 8) {
xsnprintf(tmp, sizeof tmp, "\033[32;%u;%u;%u;%u$x",
@@ -827,6 +829,17 @@ tty_clear_area(struct tty *tty, const struct window_pane *wp, u_int py,
tty_puts(tty, tmp);
return;
}
+
+ /*
+ * If margins are supported, can just scroll the area off to
+ * clear it.
+ */
+ if (tty_use_margin(tty) && tty_term_has(tty->term, TTYC_INDN)) {
+ tty_region(tty, py, py + ny - 1);
+ tty_margin(tty, px, px + nx - 1);
+ tty_putcode1(tty, TTYC_INDN, ny);
+ return;
+ }
}
/* Couldn't use an escape sequence, loop over the lines. */