From e100d465daefd20da0bb5eea87c4b4896badff16 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 8 Feb 2017 17:31:09 +0000 Subject: Add support for scroll up escape sequence (CSI S) and use it when possible instead of sending individual line feeds. --- tty.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'tty.c') diff --git a/tty.c b/tty.c index 508e4bac..40bd7a40 100644 --- a/tty.c +++ b/tty.c @@ -1021,6 +1021,32 @@ tty_cmd_linefeed(struct tty *tty, const struct tty_ctx *ctx) tty_putc(tty, '\n'); } +void +tty_cmd_scrollup(struct tty *tty, const struct tty_ctx *ctx) +{ + struct window_pane *wp = ctx->wp; + u_int i; + + if ((!tty_pane_full_width(tty, ctx) && !tty_use_margin(tty)) || + tty_fake_bce(tty, wp, ctx->bg) || + !tty_term_has(tty->term, TTYC_CSR)) { + tty_redraw_region(tty, ctx); + return; + } + + tty_attributes(tty, &grid_default_cell, wp); + + 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)) { + tty_cursor(tty, tty->rright, ctx->yoff + tty->rlower); + for (i = 0; i < ctx->num; i++) + tty_putc(tty, '\n'); + } else + tty_putcode1(tty, TTYC_INDN, ctx->num); +} + void tty_cmd_clearendofscreen(struct tty *tty, const struct tty_ctx *ctx) { -- cgit