unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
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)))
 

  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).