When resetting the attributes, we were updating last_attr to the unknown value
0x300, which doesn't always work.
For instance, when requesting reset and normal attributes, i.e.
"\e[0;30;47m" with the previous attribute being "\e[1;30;47m", we where printing
"\e[0;47m", which behaves like "\e[0;39;47m". This is incorrect.
This patch adds a flag to explicitly set background and foreground colors after
a reset.
Signed-off-by: Pierre-Alexandre Meyer <pierre@mouraf.org>
char buf[16], *p;
if (attr != last_attr) {
+ bool reset = false;
p = buf;
*p++ = '\033';
*p++ = '[';
/* Reset last_attr to unknown to handle
* background/foreground attributes correctly */
last_attr = 0x300;
+ reset = true;
}
if (attr & 0x08) {
*p++ = '1';
*p++ = '4';
*p++ = ';';
}
- if ((attr ^ last_attr) & 0x07) {
+ if (reset || (attr ^ last_attr) & 0x07) {
*p++ = '3';
*p++ = ansi_char[attr & 7];
*p++ = ';';
}
- if ((attr ^ last_attr) & 0x70) {
+ if (reset || (attr ^ last_attr) & 0x70) {
*p++ = '4';
*p++ = ansi_char[(attr >> 4) & 7];
*p++ = ';';