mirror of
https://github.com/tmux/tmux.git
synced 2025-09-02 05:21:10 +00:00
If colours are not supported by the terminal, try to emulate a coloured
background by setting or clearing the reverse attribute. This makes a few applications which don't use the reverse attribute themselves a little happier, and allows the status, message and mode options to have default attributes and fg/bg options that work as expected when set as reverse.
This commit is contained in:
26
tty.c
26
tty.c
@ -951,19 +951,33 @@ tty_attributes(struct tty *tty, const struct grid_cell *gc)
|
||||
{
|
||||
struct grid_cell *tc = &tty->cell;
|
||||
u_char changed;
|
||||
u_int fg, bg;
|
||||
u_int fg, bg, attr;
|
||||
|
||||
/*
|
||||
* If no setab, try to use the reverse attribute as a best-effort for a
|
||||
* non-default background. This is a bit of a hack but it doesn't do
|
||||
* any serious harm and makes a couple of applications happier.
|
||||
*/
|
||||
fg = gc->fg; bg = gc->bg; attr = gc->attr;
|
||||
if (!tty_term_has(tty->term, TTYC_SETAB)) {
|
||||
if (attr & GRID_ATTR_REVERSE) {
|
||||
if (fg != 7 && fg != 8)
|
||||
attr &= ~GRID_ATTR_REVERSE;
|
||||
} else {
|
||||
if (bg != 0 && bg != 8)
|
||||
attr |= GRID_ATTR_REVERSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* If any bits are being cleared, reset everything. */
|
||||
if (tc->attr & ~gc->attr)
|
||||
if (tc->attr & ~attr)
|
||||
tty_reset(tty);
|
||||
|
||||
/* Filter out attribute bits already set. */
|
||||
changed = gc->attr & ~tc->attr;
|
||||
tc->attr = gc->attr;
|
||||
changed = attr & ~tc->attr;
|
||||
tc->attr = attr;
|
||||
|
||||
/* Set the attributes. */
|
||||
fg = gc->fg;
|
||||
bg = gc->bg;
|
||||
if (changed & GRID_ATTR_BRIGHT)
|
||||
tty_putcode(tty, TTYC_BOLD);
|
||||
if (changed & GRID_ATTR_DIM)
|
||||
|
Reference in New Issue
Block a user