hpa advised not to use ANSI sequence 22, as it may not work everywhere.
Instead, let's reset attributes and set last_attr to unknown. The next
background/foreground tests are then guaranteed to fire. We take a small
hit in terms of performance though.
Misc.: change initialization of last_attr to 0x300 (unknown) to trigger
properly the tests the first time.
Signed-off-by: Pierre-Alexandre Meyer <pierre@mouraf.org>
static void cprint_vga2ansi(const char chr, const char attr)
{
static const char ansi_char[8] = "04261537";
- static uint8_t last_attr = 0x07;
+ static uint8_t last_attr = 0x300;
char buf[16], *p;
if (attr != last_attr) {
*p++ = '\033';
*p++ = '[';
- /* Beware! Do not use '1': this will reset all attributes off,
- * including the background color - as a result, the background
- * would be black after the highlight area <X> */
if (last_attr & ~attr & 0x88) {
- *p++ = '2';
- *p++ = '2';
+ *p++ = '0';
*p++ = ';';
+ /* Reset last_attr to unknown to handle
+ * background/foreground attributes correctly */
+ last_attr = 0x300;
}
if (attr & 0x08) {
*p++ = '1';