st

simple terminal

git clone https://9o.is/git/st.git

commit e73cf8256e0969eb3fe6903a0ceccc5d44ca8391
parent 36c6fe22570677c91b2bafeb88282cb2d168f86f
Author: Benno Fünfstück <benno.fuenfstueck@gmail.com>
Date:   Tue, 26 Dec 2017 16:38:27 +0100

Apply ATTR_REVERSE after ATTR_FAINT

An example where the new behaviour makes more sense:

Suppose some text is formatted with ATTR_FAINT for red for the foreground, so it
is rendered in a dark red. In that case, when selected with the mouse, the
intended behaviour is that foreground and background color are swapped: so the
selection should be rendered in dark red and the text in the default background
color.

Before this patch, what happened was that the selection would be in normal red
and the text in the darkened background color, making it almost unreadable.

For an example application that uses the FAINT attribute, try dmesg from
util-linux with color support, it uses FAINT for segfault messages.

Diffstat:
Mx.c | 13+++++++------
1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/x.c b/x.c @@ -1189,12 +1189,6 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i } } - if (base.mode & ATTR_REVERSE) { - temp = fg; - fg = bg; - bg = temp; - } - if ((base.mode & ATTR_BOLD_FAINT) == ATTR_FAINT) { colfg.red = fg->color.red / 2; colfg.green = fg->color.green / 2; @@ -1203,6 +1197,13 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i fg = &revfg; } + + if (base.mode & ATTR_REVERSE) { + temp = fg; + fg = bg; + bg = temp; + } + if (base.mode & ATTR_BLINK && term.mode & MODE_BLINK) fg = bg;