I don’t want my applications to decide “this element must be red text on green background.” I want my applications to annotate the UI with things like “warning message” and “title.”
e.g.
Foreground Background Purpose
----------- ----------- -------
ESC[38:99:0m ESC[48:99:0m normal ( same as ESC[39m and ESC[49m )
ESC[38:99:1m ESC[48:99:1m emphasise
ESC[38:99:2m ESC[48:99:2m de-emphasise
ESC[38:99:3m ESC[48:99:3m error
ESC[38:99:4m ESC[48:99:4m warning
ESC[38:99:5m ESC[48:99:5m caution
ESC[38:99:6m ESC[48:99:6m notice
Then people (themes) could easily choose foreground colour or background highlighting for particular roles. Some terminal emulators might also choose to configure other stylistic choices like bold, italic, etc.(I believe ISO8613-6 defines sub-modes 0 through 5 (te;db), with 2 (rgb) and 5 (256-color indexed) being most widely implemented. But some terminals historically mess up : and ; in CSI sequences, and I know at least one would interpret ESC[38:6:1m as ESC[6;1m (blinking bold!), so here I pick 99 (ECMA-48 defines modes up to 65).)
Anyone interested, ping me (address in profile) and encourage me to set up a repo to discuss and formulate a concrete proposal.
I’m working on a terminal emulator. It’s not big like Ghostty but this is something I might adopt
One alternative: Assign semantics to colour indexes above 256.
Both of those have the disadvantage that they separate foreground and background colour, but a user really wants a combined semantic presentation. For instance, a user might want a warning message to be black text on a yellow background, and not have to rely on the program remembering to set both foreground and background to ‘warning’ colour.
So another possibility is just to invent new SGR numbers, e.g.
Control Purpose
------------ -------
CSI 2 0 0 m normal (undoes any CSI 1 x x m)
CSI 2 0 1 m emphasise
CSI 2 0 2 m de-emphasise
CSI 2 0 3 m error
CSI 2 0 4 m warning
CSI 2 0 5 m caution
CSI 2 0 6 m notice
⋮
Then the user can configure those as they please with any combination of foreground, background, weight, slant, etc.I'm now thinking about writing up pros and cons of alternatives.
- Apprentice, a low-contrast colorscheme I made years ago and used for a long time: https://github.com/romainl/Apprentice.
- Malotru, my curent colorscheme, more contrasted: https://github.com/romainl/vim-malotru.
- Dichromatic, for colorblind users: https://github.com/romainl/vim-dichromatic.
- Bruin, which only uses typography: https://git.sr.ht/~romainl/vim-bruin
I have one here: https://github.com/romainl/vim-sweet16 but it is intentionally weird and essentially unmaintained.
We have many millenia of books using black text on a white background with various colors added, why are computer monitors all of a sudden so special and annoying
And because monitors are giant light bulbs. So a large white background is harder on the eyes than black.