bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#37774: 27.0.50; new :extend attribute broke visuals of all themes an


From: Dmitry Gutov
Subject: bug#37774: 27.0.50; new :extend attribute broke visuals of all themes and other packages
Date: Fri, 6 Dec 2019 17:44:33 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0

On 05.12.2019 17:47, Eli Zaretskii wrote:
Cc: 37774@debbugs.gnu.org, juri@linkov.net
From: Dmitry Gutov <dgutov@yandex.ru>
Date: Thu, 5 Dec 2019 03:44:22 +0200

The new definition for diff-added would look like:

    (defface diff-added
      '((default
         :inherit diff-changed)
        (((class color) (min-colors 257) (background light))
         :background "#eeffee")
        (((class color) (min-colors 88) (background light))
         :background "#ddffdd")
        (((class color) (min-colors 88) (background dark))
         :background "#335533")
        (((class color))
         :foreground "green"))
      "`diff-mode' face used to highlight added lines.")

    (put 'diff-added 'face-transient-spec '((t :extend t)))

OK, and how will this work to countermand the problem with themes?

custom-theme-set-faces calls face-spec-set, which calls
face-spec-recalc, which starts by resetting all face attributes to
'unspecified'.  And the last 2 functions are general-purpose, not
specific to themes.

Well, the idea was to use a different structure to store the "transient" attributes. That could be an extra symbol property, or an additional structure for storing faces attributes, in addition to default-frame-alist. But looking at the code now, it seems fairly clunky and crossing abstraction levels.

It's great that you mentioned face-spec-recalc. It looks just like the place to change, since both defface and theme definitions and customizations go through it.

We can implement in there a new kind of "face spec" along the lines of my previous description, or simply special-case the :extend attribute, and take it from the default spec. The latter option is implemented in the attached patch, which seems to work in my limited testing.

Attachment: inherit-face-extend-spec.diff
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]