I had hoped that non-xenl terminals had died out, at least in fairly

modern OSs, but no - DragonFly BSD's console returns to haunt us. Fix it
at least somewhat. GitHub issue 1763.
This commit is contained in:
nicm 2019-05-30 07:42:41 +00:00
parent 7dced37673
commit 89d2c7eb26
2 changed files with 12 additions and 1 deletions

2
tmux.1
View File

@ -4325,7 +4325,7 @@ Align text to the left, centre or right of the available space if appropriate.
.It Xo Ic list=on , .It Xo Ic list=on ,
.Ic list=focus , .Ic list=focus ,
.Ic list=left-marker , .Ic list=left-marker ,
.Ic list=right=marker , .Ic list=right-marker ,
.Ic nolist .Ic nolist
.Xc .Xc
Mark the position of the various window list components in the Mark the position of the various window list components in the

11
tty.c
View File

@ -527,6 +527,12 @@ tty_putc(struct tty *tty, u_char ch)
{ {
const char *acs; const char *acs;
if ((tty->term->flags & TERM_EARLYWRAP) &&
ch >= 0x20 && ch != 0x7f &&
tty->cy == tty->sy - 1 &&
tty->cx + 1 >= tty->sx)
return;
if (tty->cell.attr & GRID_ATTR_CHARSET) { if (tty->cell.attr & GRID_ATTR_CHARSET) {
acs = tty_acs_get(tty, ch); acs = tty_acs_get(tty, ch);
if (acs != NULL) if (acs != NULL)
@ -557,6 +563,11 @@ tty_putc(struct tty *tty, u_char ch)
void void
tty_putn(struct tty *tty, const void *buf, size_t len, u_int width) tty_putn(struct tty *tty, const void *buf, size_t len, u_int width)
{ {
if ((tty->term->flags & TERM_EARLYWRAP) &&
tty->cy == tty->sy - 1 &&
tty->cx + len >= tty->sx)
len = tty->sx - tty->cx - 1;
tty_add(tty, buf, len); tty_add(tty, buf, len);
if (tty->cx + width > tty->sx) { if (tty->cx + width > tty->sx) {
tty->cx = (tty->cx + width) - tty->sx; tty->cx = (tty->cx + width) - tty->sx;