:distant-foreground is a very useful concept for a face property: text
will be rendered with the :foreground color, unless it’s too close to
the current background color, in which case :distant-foreground kicks
in. Like, try this in Eshell or IELM:
(propertize "Greetings, esteemed Emacs developers!" 'face '(:foreground
"yellow" :background "yellow"))
You’ll get a solid band of yellow, of course. But, with
:distant-foreground…
(propertize "Greetings, esteemed Emacs developers!" 'face '(:foreground
"yellow" :background "yellow" :distant-foreground "black"))
Now it is a friendly greeting. (Naturally, you wouldn’t normally set
:background and :distant-foreground in the same face, this is just an
example.)
But, try this:
(propertize "Greetings, esteemed Emacs developers!" 'face '(:foreground
"yellow" :background "white" :distant-foreground "black"))
:distant-foreground doesn’t kick in—and you’re left with yellow-on-white
text that’s impossible to read, the exact scenario that
:distant-foreground was quite rightly designed to avoid.
I’m not the only one who’s noticed this; there’s a good StackExchange
thread from 2015 here:
https://emacs.stackexchange.com/questions/7982/ The author notes that
there should be a user option to set the amount of “distance” (between
foreground and background colors) that is required for
distant-foreground to kick in, and adds that a good way to measure
color distance in real-world circumstances is described here:
http://web.mst.edu/~rhall/web_design/color_readability.html A commenter
suggested that he file a bug, but I can’t find an Emacs bug report
related to this issue, so I’m filing this now.
I really hope this gets addressed, because :distant-foreground is a
really nice and clever feature. Thanks!
In GNU Emacs 26.1.90 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.22.30)
of 2019-01-02 built on pannychis
Repository revision: 08840f2f7bfc6144bd163dd85efe87d28541e425
Windowing system distributor 'The X.Org Foundation', version 11.0.11906000
System Description: Ubuntu 18.04.1 LTS
Configured using:
'configure --with-xaw3d --with-modules --with-xwidgets'