Subject: bug#37774: 27.0.50; new :extend attribute broke visuals of all themes and other packages

From: Dmitry Gutov <[email-masked]>
Date: Tue, 26 Nov 2019 01:50:23 +0200

On 25.11.2019 18:00, Eli Zaretskii wrote:

> Should be fixed now.

Thanks.

>> BTW, the diff-context needs ':extend t' as well.
> 
> Feel free to make that change (although when did you last see a
> context diff?).

It's not for context diffs, it's for context around the changes in 
unified diffs as well. Notice the gray background on the screenshot.

>> But that's of little importance since as soon as I load a custom
>> theme, whatever defaults were there don't seem to matter.
> 
> We need to modify all the themes we provide to specify :extend for
> faces where we do that by default.  It seems there's no way around
> that, since the semantics of custom-theme-set-faces is clearly to
> reset all face attributes to 'unspecified' before applying the face
> spec, so keeping some attributes from the default face spec is out of
> the question, unfortunately.  It's clear that the faces stuff was not
> designed to accommodate addition of attributes easily.

Seems like it's a consequence of the implementation strategy. There were 
a couple of others that had been proposed (splitting the attribute in 
two, with different default values) or using a symbol property.

You said the latter would complicate the face merging code (which makes 
sense) and "is extremely unclean". I have to take you at your word here. 
But it would relieve the theme authors of having to support this 
attribute explicitly.