From: Dmitry Gutov <dgutov@yandex.ru>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 37774@debbugs.gnu.org, juri@linkov.net
Subject: bug#37774: 27.0.50; new :extend attribute broke visuals of all themes and other packages
Date: Sat, 7 Dec 2019 19:06:08 +0200 [thread overview]
Message-ID: <ffd97a3f-71a8-60c5-187c-70c5f7ff3462@yandex.ru> (raw)
In-Reply-To: <83o8wkfu63.fsf@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 2767 bytes --]
On 07.12.2019 9:53, Eli Zaretskii wrote:
>>> Well, we will have to document this exemption prominently, then.
>>
>> I suppose so. Though I wouldn't consider it too important to most users,
>
> It's important to developers of Lisp programs that manipulate faces.
Yes, sure.
>> I'm "avoiding such consequences" by trying to make sure the change is in
>> the correct function and that it makes sense within the context.
>
> I meant to avoid such consequences by making sure those other callers
> can never trigger this new processing of :extend.
Eli, what you're asking for would be actively harmful.
To make an analogy, when we're changing a core Emacs behavior, we
shouldn't try to make it work only on Tuesdays. Even if the original bug
reporter observed the problem on a Tuesday.
Can we please focus on the more pressing question: whether the proposed
patch actually works, and does that reliably, or are there
scenarios/configurations where it would do something unexpected.
>> This distinction is handled in the second hunk of the patch where
>> themed-extend-attr is calculated. If this attribute is not themed, there
>> is no difference between nil and 'unspecified' (in the default spec).
>
> The use case I had in mind is this:
>
> . the theme doesn't specify :extend
> . the default spec for a face specifies ':extend nil'
>
> In this case, after applying the theme, the face should have
> ':extend nil', implicitly "inherited" from the default spec. Do you
> agree?
Ok, I think I understand the distinction: it's for when a character has
several faces specified for it.
Sure. It's easy to fix anyway.
>> Finally, the value 'unspecified' seems impossible to get from the
>> attributes list this way. plist-get will simply return nil.
>
> Exactly. And when a face does specify a nil value for :extend, then
> plist will return the list '(:extend nil), which is non-nil.
plist-member, you mean.
>> That said, I think I've found one valid scenario where this patch will
>> do wrong: if the themed spec includes an :inherit directive, and the
>> inherited face specifies (:extend nil). The current patch would
>> inevitably ignore it and override with the value from the default spec.
>
> Once again, I think this part:
>
>> + (when (and theme-face-applied
>> + (eq 'unspecified (face-attribute face :extend frame t)))
>> + (let ((extend-p (plist-get default-attrs :extend)))
>> + (and extend-p (face-spec-set-2 face frame '(:extend t)))))
> ^^^^^^^^^^^^
> isn't right, because it seems to say that when the default face says
> ':extend nil', the face after applying a theme will have ':extend t',
> which isn't TRT, IMO.
Updated patch attached.
[-- Attachment #2: inherit-face-extend-spec-3.diff --]
[-- Type: text/x-patch, Size: 1852 bytes --]
diff --git a/lisp/faces.el b/lisp/faces.el
index dc5bcca760..0f31628f5f 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -1669,7 +1669,7 @@ face-spec-recalc
;; `theme-face' records.
(let ((theme-faces (get face 'theme-face))
(no-match-found 0)
- face-attrs theme-face-applied)
+ default-attrs face-attrs theme-face-applied)
(if theme-faces
(dolist (elt (reverse theme-faces))
(setq face-attrs (face-spec-choose (cadr elt) frame no-match-found))
@@ -1677,13 +1677,20 @@ face-spec-recalc
(face-spec-set-2 face frame face-attrs)
(setq theme-face-applied t))))
;; If there was a spec applicable to FRAME, that overrides the
- ;; defface spec entirely (rather than inheriting from it). If
- ;; there was no spec applicable to FRAME, apply the defface spec
- ;; as well as any applicable X resources.
+ ;; defface spec entirely rather than inheriting from it, with the
+ ;; exception of the :extend attribute (which is inherited).
+ ;;
+ ;; If there was no spec applicable to FRAME, apply the defface
+ ;; spec as well as any applicable X resources.
+ (setq default-attrs (face-spec-choose (face-default-spec face) frame))
(unless theme-face-applied
- (setq face-attrs (face-spec-choose (face-default-spec face) frame))
- (face-spec-set-2 face frame face-attrs)
+ (face-spec-set-2 face frame default-attrs)
(make-face-x-resource-internal face frame))
+ (when (and theme-face-applied
+ (eq 'unspecified (face-attribute face :extend frame t)))
+ (let ((tail (plist-member default-attrs :extend)))
+ (and tail (face-spec-set-2 face frame
+ (list :extend (cadr tail))))))
(setq face-attrs (face-spec-choose (get face 'face-override-spec) frame))
(face-spec-set-2 face frame face-attrs)))
next prev parent reply other threads:[~2019-12-07 17:06 UTC|newest]
Thread overview: 170+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-16 7:00 bug#37774: 27.0.50; new :extend attribute broke visuals of all themes and other packages Andrey Orst
2019-10-16 7:53 ` Eli Zaretskii
2019-10-16 8:12 ` Andrey Orst
2019-10-16 11:05 ` Eli Zaretskii
2019-10-16 14:20 ` Stefan Kangas
2019-10-16 16:25 ` Eli Zaretskii
2019-10-16 8:59 ` Michael Heerdegen
2019-10-16 9:17 ` martin rudalics
2019-10-16 11:26 ` Eli Zaretskii
2019-10-16 11:38 ` Michael Heerdegen
2019-10-16 12:59 ` Eli Zaretskii
2019-10-16 11:10 ` Ergus via Bug reports for GNU Emacs, the Swiss army knife of text editors
2019-10-16 11:17 ` Andrey Orst
2019-10-16 11:41 ` Eli Zaretskii
2019-10-16 12:08 ` Andrey Orst
2019-10-16 13:05 ` Eli Zaretskii
2019-10-16 11:42 ` Eli Zaretskii
2019-10-16 13:18 ` Ergus via Bug reports for GNU Emacs, the Swiss army knife of text editors
2019-10-16 13:33 ` Andrey Orst
2019-10-16 14:21 ` Ergus via Bug reports for GNU Emacs, the Swiss army knife of text editors
2019-10-16 17:33 ` Eli Zaretskii
2019-10-16 18:13 ` Andrey Orst
2019-10-16 18:50 ` Eli Zaretskii
2019-10-17 19:05 ` Kévin Le Gouguec
2019-10-17 20:38 ` Kévin Le Gouguec
2019-10-17 11:36 ` Michael Albinus
2019-10-17 12:38 ` Ergus via Bug reports for GNU Emacs, the Swiss army knife of text editors
2019-10-17 13:05 ` Eli Zaretskii
2019-10-17 16:18 ` Michael Albinus
2019-10-17 16:39 ` Eli Zaretskii
2019-10-16 17:27 ` Juri Linkov
2019-10-16 18:07 ` Andrey Orst
2019-10-16 18:18 ` Juri Linkov
2019-10-16 18:54 ` Eli Zaretskii
2019-10-16 19:52 ` Juri Linkov
2019-10-16 20:06 ` Eli Zaretskii
2019-10-16 19:55 ` Eli Zaretskii
2019-10-16 20:14 ` Juri Linkov
2019-10-17 6:18 ` Eli Zaretskii
2019-10-17 8:52 ` Andrey Orst
2019-10-17 8:59 ` Eli Zaretskii
2019-10-17 9:20 ` Andrey Orst
2019-10-17 12:54 ` Eli Zaretskii
2019-10-17 13:40 ` Andrey Orst
2019-10-17 14:02 ` Eli Zaretskii
2019-10-17 14:13 ` Andrey Orst
2019-10-17 14:38 ` Eli Zaretskii
2019-10-17 14:02 ` Dmitry Gutov
2019-10-17 16:20 ` Eli Zaretskii
2019-10-17 16:46 ` Dmitry Gutov
2019-10-17 17:20 ` Eli Zaretskii
2019-10-17 8:25 ` martin rudalics
2019-10-17 14:08 ` Dmitry Gutov
2019-10-17 16:29 ` Eli Zaretskii
2019-10-17 16:50 ` Dmitry Gutov
2019-10-17 17:23 ` Eli Zaretskii
2019-10-18 14:25 ` Dmitry Gutov
2019-10-20 20:07 ` Dmitry Gutov
2019-10-21 6:10 ` Eli Zaretskii
2019-10-23 12:47 ` Dmitry Gutov
2019-10-23 15:39 ` Eli Zaretskii
2019-10-23 16:12 ` Dmitry Gutov
2019-10-23 18:04 ` Eli Zaretskii
2019-10-23 20:28 ` Dmitry Gutov
2019-10-24 14:56 ` Eli Zaretskii
2019-10-24 17:04 ` Kévin Le Gouguec
2019-10-17 22:22 ` Juri Linkov
2019-10-18 5:28 ` Andrey Orst
2019-10-18 6:53 ` Eli Zaretskii
2019-10-19 20:53 ` Juri Linkov
2019-10-20 6:03 ` Eli Zaretskii
2019-10-20 15:42 ` Juri Linkov
2019-10-20 16:59 ` Eli Zaretskii
2019-10-21 21:29 ` Juri Linkov
2019-10-18 8:25 ` martin rudalics
2019-10-18 12:41 ` Dmitry Gutov
2019-10-18 13:04 ` Andrey Orst
2019-10-17 13:56 ` Dmitry Gutov
2019-10-17 16:28 ` Eli Zaretskii
2019-10-17 13:54 ` Dmitry Gutov
2019-10-16 18:46 ` Eli Zaretskii
2019-10-16 19:46 ` Juri Linkov
2019-10-16 20:03 ` Eli Zaretskii
2019-10-16 20:23 ` Juri Linkov
2019-10-16 20:37 ` Ergus via Bug reports for GNU Emacs, the Swiss army knife of text editors
2019-10-17 6:43 ` Eli Zaretskii
2019-10-17 6:40 ` Eli Zaretskii
2019-10-16 20:29 ` Ergus via Bug reports for GNU Emacs, the Swiss army knife of text editors
2019-10-17 14:12 ` Dmitry Gutov
2019-10-16 20:23 ` Ergus via Bug reports for GNU Emacs, the Swiss army knife of text editors
2019-10-16 11:33 ` Andrey Orst
2019-10-16 15:30 ` Eli Zaretskii
2019-10-31 16:06 ` Jonas Bernoulli
2019-10-31 16:48 ` Eli Zaretskii
2019-11-06 16:26 ` Jonas Bernoulli
2019-11-06 17:06 ` martin rudalics
2019-11-07 13:58 ` Eli Zaretskii
2019-11-07 15:41 ` Ergus via Bug reports for GNU Emacs, the Swiss army knife of text editors
2019-11-07 17:10 ` martin rudalics
2019-11-07 21:57 ` Ergus via Bug reports for GNU Emacs, the Swiss army knife of text editors
2019-11-08 9:20 ` martin rudalics
2019-11-08 10:37 ` Eli Zaretskii
2019-11-08 18:26 ` martin rudalics
2019-11-08 19:14 ` Eli Zaretskii
2019-11-08 11:39 ` Ergus via Bug reports for GNU Emacs, the Swiss army knife of text editors
2019-11-08 18:27 ` martin rudalics
2019-12-05 16:48 ` Kévin Le Gouguec
2019-12-05 18:02 ` Eli Zaretskii
2019-12-05 19:05 ` Kévin Le Gouguec
2019-12-05 19:19 ` Eli Zaretskii
2019-12-05 18:22 ` Ergus via Bug reports for GNU Emacs, the Swiss army knife of text editors
2019-12-05 18:47 ` Eli Zaretskii
2019-11-07 13:59 ` Eli Zaretskii
2019-11-11 10:52 ` Jonas Bernoulli
2019-11-11 19:03 ` Jonas Bernoulli
2019-11-14 11:33 ` Eli Zaretskii
2019-11-14 14:14 ` Dmitry Gutov
2019-11-14 14:41 ` Eli Zaretskii
2019-11-14 22:42 ` Dmitry Gutov
2019-11-15 8:08 ` Eli Zaretskii
2019-11-15 23:50 ` Dmitry Gutov
2019-11-16 8:09 ` Eli Zaretskii
2019-11-16 8:17 ` Dmitry Gutov
2019-11-23 23:20 ` Juri Linkov
2019-11-24 16:14 ` Eli Zaretskii
2019-11-25 23:45 ` Juanma Barranquero
2019-11-26 17:44 ` Eli Zaretskii
2019-11-25 0:29 ` Dmitry Gutov
2019-11-25 16:00 ` Eli Zaretskii
2019-11-25 23:50 ` Dmitry Gutov
2019-11-26 17:43 ` Eli Zaretskii
2019-12-02 0:05 ` Dmitry Gutov
2019-12-02 16:21 ` Eli Zaretskii
2019-12-03 0:01 ` Dmitry Gutov
2019-12-03 16:21 ` Eli Zaretskii
2019-12-05 1:44 ` Dmitry Gutov
2019-12-05 15:47 ` Eli Zaretskii
2019-12-06 15:44 ` Dmitry Gutov
2019-12-06 16:18 ` Eli Zaretskii
2019-12-06 16:58 ` Dmitry Gutov
2019-12-06 17:31 ` Eli Zaretskii
2019-12-07 1:06 ` Dmitry Gutov
2019-12-07 7:53 ` Eli Zaretskii
2019-12-07 17:06 ` Dmitry Gutov [this message]
2019-12-07 17:53 ` Eli Zaretskii
2019-12-07 18:55 ` Dmitry Gutov
2019-12-07 19:14 ` Eli Zaretskii
2019-12-08 0:42 ` Dmitry Gutov
2019-12-08 3:32 ` Eli Zaretskii
2019-12-08 10:39 ` Dmitry Gutov
2019-12-08 15:50 ` Eli Zaretskii
2019-12-08 21:20 ` Dmitry Gutov
2019-12-09 12:59 ` Eli Zaretskii
2019-12-09 14:07 ` Dmitry Gutov
2019-12-09 14:42 ` Eli Zaretskii
2019-12-09 15:24 ` Dmitry Gutov
2019-12-09 15:42 ` Eli Zaretskii
2019-12-10 0:20 ` Dmitry Gutov
2019-12-10 15:57 ` Eli Zaretskii
2019-12-11 23:02 ` Juri Linkov
2019-12-12 4:36 ` Eli Zaretskii
2019-12-12 23:44 ` Juri Linkov
2019-12-13 7:03 ` Eli Zaretskii
2019-11-27 21:30 ` Juri Linkov
2019-11-27 23:34 ` Dmitry Gutov
2019-11-28 15:19 ` Eli Zaretskii
2019-11-28 15:16 ` Eli Zaretskii
2019-11-30 11:35 ` Eli Zaretskii
2019-12-02 0:07 ` Dmitry Gutov
2019-10-31 17:29 ` Dmitry Gutov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ffd97a3f-71a8-60c5-187c-70c5f7ff3462@yandex.ru \
--to=dgutov@yandex.ru \
--cc=37774@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=juri@linkov.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).