diff options
author | nicm <nicm> | 2017-04-25 18:30:29 +0000 |
---|---|---|
committer | nicm <nicm> | 2017-04-25 18:30:29 +0000 |
commit | d520dae6ac9acf980d48fbc8307ac83a5cee2938 (patch) | |
tree | 07f119b181cb4ac410685f7a728c37d7920aa2b7 /tty.c | |
parent | 03d01eabb5c5227f56b6b44d04964c1328802628 (diff) | |
download | rtmux-d520dae6ac9acf980d48fbc8307ac83a5cee2938.tar.gz rtmux-d520dae6ac9acf980d48fbc8307ac83a5cee2938.tar.bz2 rtmux-d520dae6ac9acf980d48fbc8307ac83a5cee2938.zip |
Make full width panes try to play more nicely with terminal copy and
paste by avoiding explicit line wraps if we think the terminal will wrap
anyway.
Diffstat (limited to 'tty.c')
-rw-r--r-- | tty.c | 45 |
1 files changed, 29 insertions, 16 deletions
@@ -540,9 +540,13 @@ void tty_putn(struct tty *tty, const void *buf, size_t len, u_int width) { tty_add(tty, buf, len); - if (tty->cx + width > tty->sx) - tty->cx = tty->cy = UINT_MAX; - else + if (tty->cx + width > tty->sx) { + tty->cx = (tty->cx + width) - tty->sx; + if (tty->cx <= tty->sx) + tty->cy++; + else + tty->cx = tty->cy = UINT_MAX; + } else tty->cx += width; } @@ -773,18 +777,26 @@ tty_draw_line(struct tty *tty, const struct window_pane *wp, if (sx > tty->sx) sx = tty->sx; - if (screen_size_x(s) < tty->sx && - ox == 0 && - sx != screen_size_x(s) && - tty_term_has(tty->term, TTYC_EL1) && - !tty_fake_bce(tty, wp, 8)) { - tty_default_attributes(tty, wp, 8); - tty_cursor(tty, screen_size_x(s) - 1, oy + py); - tty_putcode(tty, TTYC_EL1); - cleared = 1; - } - if (sx != 0) - tty_cursor(tty, ox, oy + py); + if (wp == NULL || + py == 0 || + (~s->grid->linedata[s->grid->hsize + py - 1].flags & GRID_LINE_WRAPPED) || + ox != 0 || + tty->cx < tty->sx || + screen_size_x(s) < tty->sx) { + if (screen_size_x(s) < tty->sx && + ox == 0 && + sx != screen_size_x(s) && + tty_term_has(tty->term, TTYC_EL1) && + !tty_fake_bce(tty, wp, 8)) { + tty_default_attributes(tty, wp, 8); + tty_cursor(tty, screen_size_x(s) - 1, oy + py); + tty_putcode(tty, TTYC_EL1); + cleared = 1; + } + if (sx != 0) + tty_cursor(tty, ox, oy + py); + } else + log_debug("%s: wrapped line %u", __func__, oy + py); memcpy(&last, &grid_default_cell, sizeof last); len = 0; @@ -1477,7 +1489,8 @@ static void tty_cursor_pane_unless_wrap(struct tty *tty, const struct tty_ctx *ctx, u_int cx, u_int cy) { - if (!tty_pane_full_width(tty, ctx) || + if (!ctx->wrapped || + !tty_pane_full_width(tty, ctx) || (tty->term->flags & TERM_EARLYWRAP) || ctx->xoff + cx != 0 || ctx->yoff + cy != tty->cy + 1 || |