Improve support for light background terminals.

Review Request #13505 — Created Jan. 21, 2024 and submitted

Information

rbinstall
master

Reviewers

macOS's terminals default to a white background, but don't convey that
fact in any environment variables. However, it does support the ANSI
escape sequence used to fetch the color palette.

We now fall back to invoking this ANSI escape sequence, attempting to
fetch the background color. This comes back as a XParseColor value in
the form of 11;rgb:RRRR/GGGG/BBBB, where the red/green/blue are values
between 1 and 4 characters in length, as hex values representing a
fraction of the color in the available color depth.

These are converted back to traditional RGB values between 0-255. We
then calculate a luma value from this, and use that to determine if we
want to show dark vs. light colors. This ends up working fairly well for
most any realistic color palette, and has been tested across all kinds
of backgrounds.

The header text has also been changed to work better on many lighter
color backgrounds. Rather than reverse text, we now use an explicit
black on green, which should be stable across all "light" backgrounds.

Tested this across a wide range of backgrounds. I tested white, black,
a spectrum of shades of grey, various blues, reds, yellows, greens, and
some combinations of those.

Tested without a TTY.

Tested this on macOS (Apple Terminal and iTerm) and Linux terminals.

Summary ID
Improve support for light background terminals.
macOS's terminals default to a white background, but don't convey that fact in any environment variables. However, it does support the ANSI escape sequence used to fetch the color palette. We now fall back to invoking this ANSI escape sequence, attempting to fetch the background color. This comes back as a XParseColor value in the form of `11;rgb:RRRR/GGGG/BBBB`, where the red/green/blue are values between 1 and 4 characters in length, as hex values representing a fraction of the color in the available color depth. These are converted back to traditional RGB values between 0-255. We then calculate a luma value from this, and use that to determine if we want to show dark vs. light colors. This ends up working fairly well for most any realistic color palette, and has been tested across all kinds of backgrounds. The header text has also been changed to work better on many lighter color backgrounds. Rather than reverse text, we now use an explicit black on green, which should be stable across all "light" backgrounds.
9041130fe767daef394784552da91d1c28f76f2b
Description From Last Updated

Missing a "Returns" section in the docs.

maubinmaubin
maubin
  1. 
      
  2. rbinstall/ui.py (Diff revision 1)
     
     
    Show all issues

    Missing a "Returns" section in the docs.

  3. 
      
chipx86
maubin
  1. Ship It!
  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to master (2e96273)