From a572533c891713deca3898e6999db63ef6e247df Mon Sep 17 00:00:00 2001 From: Tiago Cunha Date: Fri, 23 Oct 2009 17:23:52 +0000 Subject: [PATCH] Sync OpenBSD patchset 427: Don't redraw the scroll region on linefeed/reverse index unless it is necessary (the cursor is at the bottom/top). Should fix slow cursor movement when using vi in a pane spotted by pirofti@. --- tty.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/tty.c b/tty.c index c31706f7..028fab69 100644 --- a/tty.c +++ b/tty.c @@ -1,4 +1,4 @@ -/* $Id: tty.c,v 1.159 2009-10-23 17:22:39 tcunha Exp $ */ +/* $Id: tty.c,v 1.160 2009-10-23 17:23:52 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -689,20 +689,21 @@ tty_cmd_reverseindex(struct tty *tty, const struct tty_ctx *ctx) struct window_pane *wp = ctx->wp; struct screen *s = wp->screen; + if (ctx->ocy != ctx->orupper) + return; + if (wp->xoff != 0 || screen_size_x(s) < tty->sx || !tty_term_has(tty->term, TTYC_CSR)) { tty_redraw_region(tty, ctx); return; } - if (ctx->ocy == ctx->orupper) { - tty_reset(tty); - - tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); - tty_cursor_pane(tty, ctx, ctx->ocx, ctx->orupper); - - tty_putcode(tty, TTYC_RI); - } + tty_reset(tty); + + tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); + tty_cursor_pane(tty, ctx, ctx->ocx, ctx->orupper); + + tty_putcode(tty, TTYC_RI); } void @@ -711,6 +712,9 @@ tty_cmd_linefeed(struct tty *tty, const struct tty_ctx *ctx) struct window_pane *wp = ctx->wp; struct screen *s = wp->screen; + if (ctx->ocy != ctx->orlower) + return; + if (wp->xoff != 0 || screen_size_x(s) < tty->sx || !tty_term_has(tty->term, TTYC_CSR)) { tty_redraw_region(tty, ctx); @@ -725,14 +729,12 @@ tty_cmd_linefeed(struct tty *tty, const struct tty_ctx *ctx) if (ctx->num && !(tty->term->flags & TERM_EARLYWRAP)) return; - if (ctx->ocy == ctx->orlower) { - tty_reset(tty); - - tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); - tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy); - - tty_putc(tty, '\n'); - } + tty_reset(tty); + + tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); + tty_cursor_pane(tty, ctx, ctx->ocx, ctx->ocy); + + tty_putc(tty, '\n'); } void