mirror of
https://github.com/tmux/tmux.git
synced 2024-12-13 01:48:47 +00:00
Do not go through the whole attributes setting process if the new cell
is the same as the previous one.
This commit is contained in:
parent
10e14ae504
commit
68e04907de
3
tmux.h
3
tmux.h
@ -1054,6 +1054,9 @@ struct tty {
|
|||||||
|
|
||||||
struct grid_cell cell;
|
struct grid_cell cell;
|
||||||
|
|
||||||
|
int last_wp;
|
||||||
|
struct grid_cell last_cell;
|
||||||
|
|
||||||
#define TTY_NOCURSOR 0x1
|
#define TTY_NOCURSOR 0x1
|
||||||
#define TTY_FREEZE 0x2
|
#define TTY_FREEZE 0x2
|
||||||
#define TTY_TIMER 0x4
|
#define TTY_TIMER 0x4
|
||||||
|
23
tty.c
23
tty.c
@ -246,6 +246,9 @@ tty_start_tty(struct tty *tty)
|
|||||||
tty_putcode(tty, TTYC_SGR0);
|
tty_putcode(tty, TTYC_SGR0);
|
||||||
memcpy(&tty->cell, &grid_default_cell, sizeof tty->cell);
|
memcpy(&tty->cell, &grid_default_cell, sizeof tty->cell);
|
||||||
|
|
||||||
|
memcpy(&tty->last_cell, &grid_default_cell, sizeof tty->last_cell);
|
||||||
|
tty->last_wp = -1;
|
||||||
|
|
||||||
tty_putcode(tty, TTYC_RMKX);
|
tty_putcode(tty, TTYC_RMKX);
|
||||||
if (tty_use_acs(tty))
|
if (tty_use_acs(tty))
|
||||||
tty_putcode(tty, TTYC_ENACS);
|
tty_putcode(tty, TTYC_ENACS);
|
||||||
@ -1250,15 +1253,17 @@ tty_reset(struct tty *tty)
|
|||||||
{
|
{
|
||||||
struct grid_cell *gc = &tty->cell;
|
struct grid_cell *gc = &tty->cell;
|
||||||
|
|
||||||
if (grid_cells_equal(gc, &grid_default_cell))
|
if (!grid_cells_equal(gc, &grid_default_cell)) {
|
||||||
return;
|
|
||||||
|
|
||||||
if ((gc->attr & GRID_ATTR_CHARSET) && tty_use_acs(tty))
|
if ((gc->attr & GRID_ATTR_CHARSET) && tty_use_acs(tty))
|
||||||
tty_putcode(tty, TTYC_RMACS);
|
tty_putcode(tty, TTYC_RMACS);
|
||||||
tty_putcode(tty, TTYC_SGR0);
|
tty_putcode(tty, TTYC_SGR0);
|
||||||
memcpy(gc, &grid_default_cell, sizeof *gc);
|
memcpy(gc, &grid_default_cell, sizeof *gc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memcpy(&tty->last_cell, &grid_default_cell, sizeof tty->last_cell);
|
||||||
|
tty->last_wp = -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Turn off margin. */
|
/* Turn off margin. */
|
||||||
void
|
void
|
||||||
tty_region_off(struct tty *tty)
|
tty_region_off(struct tty *tty)
|
||||||
@ -1478,6 +1483,18 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc,
|
|||||||
struct grid_cell *tc = &tty->cell, gc2;
|
struct grid_cell *tc = &tty->cell, gc2;
|
||||||
u_char changed;
|
u_char changed;
|
||||||
|
|
||||||
|
/* Ignore cell if it is the same as the last one. */
|
||||||
|
if (wp != NULL &&
|
||||||
|
(int)wp->id == tty->last_wp &&
|
||||||
|
~(wp->window->flags & WINDOW_STYLECHANGED) &&
|
||||||
|
gc->attr == tty->last_cell.attr &&
|
||||||
|
gc->fg == tty->last_cell.fg &&
|
||||||
|
gc->bg == tty->last_cell.bg)
|
||||||
|
return;
|
||||||
|
tty->last_wp = (wp != NULL ? (int)wp->id : -1);
|
||||||
|
memcpy(&tty->last_cell, gc, sizeof tty->last_cell);
|
||||||
|
|
||||||
|
/* Copy cell and update default colours. */
|
||||||
memcpy(&gc2, gc, sizeof gc2);
|
memcpy(&gc2, gc, sizeof gc2);
|
||||||
if (wp != NULL)
|
if (wp != NULL)
|
||||||
tty_default_colours(&gc2, wp);
|
tty_default_colours(&gc2, wp);
|
||||||
|
Loading…
Reference in New Issue
Block a user