=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/tty.c,v retrieving revision 1.129 retrieving revision 1.130 diff -c -r1.129 -r1.130 *** src/usr.bin/tmux/tty.c 2012/03/20 11:01:00 1.129 --- src/usr.bin/tmux/tty.c 2012/05/05 18:17:59 1.130 *************** *** 1,4 **** ! /* $OpenBSD: tty.c,v 1.129 2012/03/20 11:01:00 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: tty.c,v 1.130 2012/05/05 18:17:59 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 44,49 **** --- 44,53 ---- void tty_colours_bg(struct tty *, const struct grid_cell *); int tty_large_region(struct tty *, const struct tty_ctx *); + void tty_cra_pane(struct tty *, + const struct tty_ctx *, u_int, u_int, u_int, u_int, u_int, u_int); + void tty_era_pane(struct tty *, + const struct tty_ctx *, u_int, u_int, u_int, u_int); void tty_redraw_region(struct tty *, const struct tty_ctx *); void tty_emulate_repeat( struct tty *, enum tty_code_code, enum tty_code_code, u_int); *************** *** 52,57 **** --- 56,63 ---- #define tty_use_acs(tty) \ (tty_term_has(tty->term, TTYC_ACSC) && !((tty)->flags & TTY_UTF8)) + #define tty_use_rect(tty) \ + (tty->xterm_version > 270) void tty_init(struct tty *tty, int fd, char *term) *************** *** 690,695 **** --- 696,733 ---- } void + tty_cra_pane(struct tty *tty, const struct tty_ctx *ctx, + u_int t, u_int l, u_int b, u_int r, u_int tt, u_int tl) + { + char tmp[64]; + + snprintf(tmp, sizeof tmp, + "\033[%u;%u;%u;%u;1;%u;%u;1$v", + ctx->yoff + t + 1, + ctx->xoff + l + 1, + ctx->yoff + b + 1, + ctx->xoff + r + 1, + ctx->yoff + tt + 1, + ctx->xoff + tl + 1); + tty_puts(tty, tmp); + } + + void + tty_era_pane(struct tty *tty, const struct tty_ctx *ctx, + u_int t, u_int l, u_int b, u_int r) + { + char tmp[64]; + + snprintf(tmp, sizeof tmp, + "\033[%u;%u;%u;%u$z", + ctx->yoff + t + 1, + ctx->xoff + l + 1, + ctx->yoff + b + 1, + ctx->xoff + r + 1); + tty_puts(tty, tmp); + } + + void tty_cmd_insertcharacter(struct tty *tty, const struct tty_ctx *ctx) { struct window_pane *wp = ctx->wp; *************** *** 868,874 **** { struct window_pane *wp = ctx->wp; struct screen *s = wp->screen; - char tmp[64]; if (ctx->ocy != ctx->orlower) return; --- 906,911 ---- *************** *** 877,892 **** !tty_term_has(tty->term, TTYC_CSR)) { if (tty_large_region(tty, ctx)) wp->flags |= PANE_REDRAW; ! else if (tty->xterm_version > 270) { ! snprintf(tmp, sizeof tmp, ! "\033[%u;%u;%u;%u;1;%u;%u;1$v", ! ctx->yoff + ctx->orupper + 2, ! ctx->xoff + 1, ! ctx->yoff + ctx->orlower + 1, ! ctx->xoff + screen_size_x(s), ! ctx->yoff + ctx->orupper + 1, ! ctx->xoff + 1); ! tty_puts(tty, tmp); tty_cmd_clearline(tty, ctx); } else tty_redraw_region(tty, ctx); --- 914,923 ---- !tty_term_has(tty->term, TTYC_CSR)) { if (tty_large_region(tty, ctx)) wp->flags |= PANE_REDRAW; ! else if (tty_use_rect(tty)) { ! tty_cra_pane (tty, ctx, ctx->orupper + 1, 0, ! ctx->orlower, screen_size_x(s) - 1, ! ctx->orupper, 0); tty_cmd_clearline(tty, ctx); } else tty_redraw_region(tty, ctx);