diff options
author | Nicholas Marriott <nicm@cvs.openbsd.org> | 2017-05-12 11:13:44 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@cvs.openbsd.org> | 2017-05-12 11:13:44 +0000 |
commit | da93356f9c70182b960fe88f3e82f4491a0d6a41 (patch) | |
tree | 6d3d4cffb7755d9236348bc883338dcc36e0ae7b /usr.bin/tmux | |
parent | eb98e4d3a1e7872cdeffc3a7a37a5b096845c49d (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.c | 19 |
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. */ |