render: reverse video only swaps *default* fg/bg

This matches XTerm behavior, and fixes vttest 11.6.6.2:

Test non-VT100 ->
Test ISO-6429 colors ->
Test of VT102-style features with BCE ->
Test of screen features
This commit is contained in:
Daniel Eklöf 2021-06-07 21:46:46 +02:00
parent 95c4a8ccfb
commit 39560a6ff1
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 7 additions and 4 deletions

View file

@ -98,6 +98,9 @@
* `scrollback-*`+`pipe-scrollback` key bindings are now passed through
to the client application when the alt screen is active
(https://codeberg.org/dnkl/foot/issues/573).
* Reverse video (`\E[?5h`) now only swaps the default foreground and
background colors. Cells with explicit foreground and/or background
colors remain unchanged.
### Deprecated

View file

@ -377,7 +377,7 @@ cursor_colors_for_cell(const struct terminal *term, const struct cell *cell,
term->cursor_color.text >> 31
? term->cursor_color.text : term->colors.bg);
if (term->reverse ^ cell->attrs.reverse ^ is_selected) {
if (cell->attrs.reverse ^ is_selected) {
pixman_color_t swap = *cursor_color;
*cursor_color = *text_color;
*text_color = swap;
@ -461,10 +461,10 @@ render_cell(struct terminal *term, pixman_image_t *pix,
_bg = term->colors.selection_bg;
} else {
/* Use cell specific color, if set, otherwise the default colors (possible reversed) */
_fg = cell->attrs.have_fg ? cell->attrs.fg : term->colors.fg;
_bg = cell->attrs.have_bg ? cell->attrs.bg : term->colors.bg;
_fg = cell->attrs.have_fg ? cell->attrs.fg : term->reverse ? term->colors.bg : term->colors.fg;
_bg = cell->attrs.have_bg ? cell->attrs.bg : term->reverse ? term->colors.fg : term->colors.bg;
if (term->reverse ^ cell->attrs.reverse ^ is_selected) {
if (cell->attrs.reverse ^ is_selected) {
uint32_t swap = _fg;
_fg = _bg;
_bg = swap;