=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/tty.c,v retrieving revision 1.291 retrieving revision 1.292 diff -c -r1.291 -r1.292 *** src/usr.bin/tmux/tty.c 2017/07/21 14:25:29 1.291 --- src/usr.bin/tmux/tty.c 2017/07/21 22:55:45 1.292 *************** *** 1,4 **** ! /* $OpenBSD: tty.c,v 1.291 2017/07/21 14:25:29 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: tty.c,v 1.292 2017/07/21 22:55:45 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 882,888 **** struct screen *s, u_int py, u_int ox, u_int oy) { struct grid_cell gc, last; ! u_int i, j, sx, nx, width; int flags, cleared = 0; char buf[512]; size_t len, old_len; --- 882,888 ---- struct screen *s, u_int py, u_int ox, u_int oy) { struct grid_cell gc, last; ! u_int i, j, ux, sx, nx, width; int flags, cleared = 0; char buf[512]; size_t len, old_len; *************** *** 903,908 **** --- 903,909 ---- sx = s->grid->linedata[s->grid->hsize + py].cellsize; if (sx > tty->sx) sx = tty->sx; + ux = 0; if (wp == NULL || py == 0 || *************** *** 944,949 **** --- 945,951 ---- (sizeof buf) - len < gc.data.size)) { tty_attributes(tty, &last, wp); tty_putn(tty, buf, len, width); + ux += width; len = 0; width = 0; *************** *** 966,971 **** --- 968,974 ---- for (j = 0; j < gc.data.size; j++) tty_putc(tty, gc.data.data[j]); } + ux += gc.data.width; } else { memcpy(buf + len, gc.data.data, gc.data.size); len += gc.data.size; *************** *** 975,995 **** if (len != 0) { if (grid_cells_equal(&last, &grid_default_cell)) { old_len = len; ! while (len > 0 && buf[len - 1] == ' ') len--; log_debug("%s: trimmed %zu spaces", __func__, old_len - len); } if (len != 0) { tty_attributes(tty, &last, wp); tty_putn(tty, buf, len, width); } } ! nx = screen_size_x(s) - sx; ! if (!cleared && sx < tty->sx && nx != 0) { tty_default_attributes(tty, wp, 8); ! tty_clear_line(tty, wp, oy + py, ox + sx, nx, 8); } tty->flags = (tty->flags & ~TTY_NOCURSOR) | flags; --- 978,1001 ---- if (len != 0) { if (grid_cells_equal(&last, &grid_default_cell)) { old_len = len; ! while (len > 0 && buf[len - 1] == ' ') { len--; + width--; + } log_debug("%s: trimmed %zu spaces", __func__, old_len - len); } if (len != 0) { tty_attributes(tty, &last, wp); tty_putn(tty, buf, len, width); + ux += width; } } ! nx = screen_size_x(s) - ux; ! if (!cleared && ux < tty->sx && nx != 0) { tty_default_attributes(tty, wp, 8); ! tty_clear_line(tty, wp, oy + py, ox + ux, nx, 8); } tty->flags = (tty->flags & ~TTY_NOCURSOR) | flags;