Be less aggressive about turning the cursor off, only explicitly turn it off

when tmux is redrawing, otherwise leave in the state set by the application.
pull/1/head
Nicholas Marriott 2009-10-09 07:23:28 +00:00
parent 2cb2bb8257
commit d528184836
1 changed files with 6 additions and 2 deletions

8
tty.c
View File

@ -524,6 +524,8 @@ tty_draw_line(struct tty *tty, struct screen *s, u_int py, u_int ox, u_int oy)
const struct grid_utf8 *gu; const struct grid_utf8 *gu;
u_int i, sx; u_int i, sx;
tty_update_mode(tty, tty->mode & ~MODE_CURSOR);
sx = screen_size_x(s); sx = screen_size_x(s);
if (sx > s->grid->linedata[s->grid->hsize + py].cellsize) if (sx > s->grid->linedata[s->grid->hsize + py].cellsize)
sx = s->grid->linedata[s->grid->hsize + py].cellsize; sx = s->grid->linedata[s->grid->hsize + py].cellsize;
@ -548,8 +550,10 @@ tty_draw_line(struct tty *tty, struct screen *s, u_int py, u_int ox, u_int oy)
tty_cell(tty, gc, gu); tty_cell(tty, gc, gu);
} }
if (sx >= tty->sx) if (sx >= tty->sx) {
tty_update_mode(tty, tty->mode);
return; return;
}
tty_reset(tty); tty_reset(tty);
tty_cursor(tty, sx, py, ox, oy); tty_cursor(tty, sx, py, ox, oy);
@ -559,6 +563,7 @@ tty_draw_line(struct tty *tty, struct screen *s, u_int py, u_int ox, u_int oy)
for (i = sx; i < screen_size_x(s); i++) for (i = sx; i < screen_size_x(s); i++)
tty_putc(tty, ' '); tty_putc(tty, ' ');
} }
tty_update_mode(tty, tty->mode);
} }
void void
@ -587,7 +592,6 @@ tty_write(void (*cmdfn)(
if (c->session->curw->window == wp->window) { if (c->session->curw->window == wp->window) {
if (c->tty.flags & TTY_FREEZE || c->tty.term == NULL) if (c->tty.flags & TTY_FREEZE || c->tty.term == NULL)
continue; continue;
tty_update_mode(&c->tty, c->tty.mode & ~MODE_CURSOR);
cmdfn(&c->tty, ctx); cmdfn(&c->tty, ctx);
} }
} }