diff options
author | Nicholas Marriott <nicm@openbsd.org> | 2009-10-21 13:42:44 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@openbsd.org> | 2009-10-21 13:42:44 +0000 |
commit | 9b5da97e6f55b65fc892aa702fbe41aee9159865 (patch) | |
tree | 60f1503281bbf0e18ee921639ab30ea568d1cf62 /tty.c | |
parent | 683ddbc466bbd6ff2a890c11edccc482bfe0dc87 (diff) | |
download | rtmux-9b5da97e6f55b65fc892aa702fbe41aee9159865.tar.gz rtmux-9b5da97e6f55b65fc892aa702fbe41aee9159865.tar.bz2 rtmux-9b5da97e6f55b65fc892aa702fbe41aee9159865.zip |
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@.
Diffstat (limited to 'tty.c')
-rw-r--r-- | tty.c | 34 |
1 files changed, 18 insertions, 16 deletions
@@ -684,20 +684,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 @@ -706,6 +707,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); @@ -720,14 +724,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 |