On Tue, Dec 26, 2017 at 04:38:27PM +0100, Benno Fünfstück wrote:
> 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.
> ---
>  x.c | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/x.c b/x.c
> index c6956ad..3d1b877 100644
> --- a/x.c
> +++ b/x.c
> @@ -1205,12 +1205,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;
> @@ -1220,6 +1214,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;
>  
> -- 
> 2.15.1
> 
> 

Thanks, applied.

A simple test-case script would be helpful next time. I did this:

#!/bin/sh
# reverse, faint
printf '\x1b[7m\x1b[2m'
# red
printf '\x1b[31m'
# text
printf 'hello world\n'
# reset
printf '\x1b[0m'

-- 
Kind regards,
Hiltjo

Reply via email to