version 1.17, 2009/08/03 14:10:54 |
version 1.18, 2009/08/05 16:26:38 |
|
|
{ |
{ |
struct grid_cell *tc = &tty->cell; |
struct grid_cell *tc = &tty->cell; |
u_char changed; |
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 any bits are being cleared, reset everything. */ |
if (tc->attr & ~gc->attr) |
if (tc->attr & ~attr) |
tty_reset(tty); |
tty_reset(tty); |
|
|
/* Filter out attribute bits already set. */ |
/* Filter out attribute bits already set. */ |
changed = gc->attr & ~tc->attr; |
changed = attr & ~tc->attr; |
tc->attr = gc->attr; |
tc->attr = attr; |
|
|
/* Set the attributes. */ |
/* Set the attributes. */ |
fg = gc->fg; |
|
bg = gc->bg; |
|
if (changed & GRID_ATTR_BRIGHT) |
if (changed & GRID_ATTR_BRIGHT) |
tty_putcode(tty, TTYC_BOLD); |
tty_putcode(tty, TTYC_BOLD); |
if (changed & GRID_ATTR_DIM) |
if (changed & GRID_ATTR_DIM) |