=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/tty.c,v retrieving revision 1.38 retrieving revision 1.39 diff -c -r1.38 -r1.39 *** src/usr.bin/tmux/tty.c 2009/10/11 22:35:10 1.38 --- src/usr.bin/tmux/tty.c 2009/10/12 09:09:35 1.39 *************** *** 1,4 **** ! /* $OpenBSD: tty.c,v 1.38 2009/10/11 22:35:10 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: tty.c,v 1.39 2009/10/12 09:09:35 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 579,585 **** tty_reset(tty); ! tty_region(tty, ctx->orupper, ctx->orlower, wp->yoff); tty_cursor(tty, ctx->ocx, ctx->ocy, wp->xoff, wp->yoff); tty_emulate_repeat(tty, TTYC_IL, TTYC_IL1, ctx->num); --- 579,585 ---- tty_reset(tty); ! tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); tty_cursor(tty, ctx->ocx, ctx->ocy, wp->xoff, wp->yoff); tty_emulate_repeat(tty, TTYC_IL, TTYC_IL1, ctx->num); *************** *** 599,605 **** tty_reset(tty); ! tty_region(tty, ctx->orupper, ctx->orlower, wp->yoff); tty_cursor(tty, ctx->ocx, ctx->ocy, wp->xoff, wp->yoff); tty_emulate_repeat(tty, TTYC_DL, TTYC_DL1, ctx->num); --- 599,605 ---- tty_reset(tty); ! tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); tty_cursor(tty, ctx->ocx, ctx->ocy, wp->xoff, wp->yoff); tty_emulate_repeat(tty, TTYC_DL, TTYC_DL1, ctx->num); *************** *** 675,682 **** if (ctx->ocy == ctx->orupper) { tty_reset(tty); ! tty_region(tty, ctx->orupper, ctx->orlower, wp->yoff); tty_cursor(tty, ctx->ocx, ctx->orupper, wp->xoff, wp->yoff); tty_putcode(tty, TTYC_RI); } } --- 675,684 ---- if (ctx->ocy == ctx->orupper) { tty_reset(tty); ! ! tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); tty_cursor(tty, ctx->ocx, ctx->orupper, wp->xoff, wp->yoff); + tty_putcode(tty, TTYC_RI); } } *************** *** 695,702 **** if (ctx->ocy == ctx->orlower) { tty_reset(tty); ! tty_region(tty, ctx->orupper, ctx->orlower, wp->yoff); tty_cursor(tty, ctx->ocx, ctx->ocy, wp->xoff, wp->yoff); tty_putc(tty, '\n'); } } --- 697,706 ---- if (ctx->ocy == ctx->orlower) { tty_reset(tty); ! ! tty_region_pane(tty, ctx, ctx->orupper, ctx->orlower); tty_cursor(tty, ctx->ocx, ctx->ocy, wp->xoff, wp->yoff); + tty_putc(tty, '\n'); } } *************** *** 710,717 **** tty_reset(tty); ! tty_region(tty, 0, screen_size_y(s) - 1, wp->yoff); tty_cursor(tty, ctx->ocx, ctx->ocy, wp->xoff, wp->yoff); if (wp->xoff == 0 && screen_size_x(s) >= tty->sx && tty_term_has(tty->term, TTYC_EL)) { tty_putcode(tty, TTYC_EL); --- 714,722 ---- tty_reset(tty); ! tty_region_pane(tty, ctx, 0, screen_size_y(s) - 1); tty_cursor(tty, ctx->ocx, ctx->ocy, wp->xoff, wp->yoff); + if (wp->xoff == 0 && screen_size_x(s) >= tty->sx && tty_term_has(tty->term, TTYC_EL)) { tty_putcode(tty, TTYC_EL); *************** *** 745,752 **** tty_reset(tty); ! tty_region(tty, 0, screen_size_y(s) - 1, wp->yoff); tty_cursor(tty, 0, 0, wp->xoff, wp->yoff); if (wp->xoff == 0 && screen_size_x(s) >= tty->sx && tty_term_has(tty->term, TTYC_EL)) { for (i = 0; i < ctx->ocy; i++) { --- 750,758 ---- tty_reset(tty); ! tty_region_pane(tty, ctx, 0, screen_size_y(s) - 1); tty_cursor(tty, 0, 0, wp->xoff, wp->yoff); + if (wp->xoff == 0 && screen_size_x(s) >= tty->sx && tty_term_has(tty->term, TTYC_EL)) { for (i = 0; i < ctx->ocy; i++) { *************** *** 774,781 **** tty_reset(tty); ! tty_region(tty, 0, screen_size_y(s) - 1, wp->yoff); tty_cursor(tty, 0, 0, wp->xoff, wp->yoff); if (wp->xoff == 0 && screen_size_x(s) >= tty->sx && tty_term_has(tty->term, TTYC_EL)) { for (i = 0; i < screen_size_y(s); i++) { --- 780,788 ---- tty_reset(tty); ! tty_region_pane(tty, ctx, 0, screen_size_y(s) - 1); tty_cursor(tty, 0, 0, wp->xoff, wp->yoff); + if (wp->xoff == 0 && screen_size_x(s) >= tty->sx && tty_term_has(tty->term, TTYC_EL)) { for (i = 0; i < screen_size_y(s); i++) { *************** *** 803,809 **** tty_reset(tty); ! tty_region(tty, 0, screen_size_y(s) - 1, wp->yoff); for (j = 0; j < screen_size_y(s); j++) { tty_cursor(tty, 0, j, wp->xoff, wp->yoff); --- 810,816 ---- tty_reset(tty); ! tty_region_pane(tty, ctx, 0, screen_size_y(s) - 1); for (j = 0; j < screen_size_y(s); j++) { tty_cursor(tty, 0, j, wp->xoff, wp->yoff); *************** *** 887,903 **** } void ! tty_region(struct tty *tty, u_int rupper, u_int rlower, u_int oy) { if (!tty_term_has(tty->term, TTYC_CSR)) return; ! if (tty->rlower != oy + rlower || tty->rupper != oy + rupper) { ! tty->rlower = oy + rlower; ! tty->rupper = oy + rupper; ! tty->cx = 0; ! tty->cy = 0; ! tty_putcode2(tty, TTYC_CSR, tty->rupper, tty->rlower); ! } } void --- 894,922 ---- } void ! tty_region_pane( ! struct tty *tty, const struct tty_ctx *ctx, u_int rupper, u_int rlower) { + struct window_pane *wp = ctx->wp; + + tty_region_absolute(tty, wp->yoff + rupper, wp->yoff + rlower); + } + + void + tty_region_absolute(struct tty *tty, u_int rupper, u_int rlower) + { + if (tty->rlower == rlower && tty->rupper == rupper) + return; if (!tty_term_has(tty->term, TTYC_CSR)) return; ! ! tty->rupper = rupper; ! tty->rlower = rlower; ! ! tty->cx = 0; ! tty->cy = 0; ! ! tty_putcode2(tty, TTYC_CSR, tty->rupper, tty->rlower); } void