GNU bug report logs - #53636
29.0.50; face-remapping broken on master

Previous Next

Package: emacs;

Reported by: Tassilo Horn <tsdh <at> gnu.org>

Date: Sun, 30 Jan 2022 13:55:02 UTC

Severity: normal

Tags: confirmed

Found in version 29.0.50

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

Full log


Message #43 received at 53636 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: 53636 <at> debbugs.gnu.org, tsdh <at> gnu.org
Subject: Re: bug#53636: 29.0.50; face-remapping broken on master
Date: Wed, 02 Feb 2022 20:07:58 +0200
> From: Lars Ingebrigtsen <larsi <at> gnus.org>
> Cc: 53636 <at> debbugs.gnu.org,  tsdh <at> gnu.org
> Date: Wed, 02 Feb 2022 18:59:49 +0100
> 
> Eli Zaretskii <eliz <at> gnu.org> writes:
> 
> > If we want to solve this cleanly and radically, I'd prefer to break
> > the vicious circle by removing the inheritance from basic faces
> > altogether.  The basic faces are just that: they aren't supposed to
> > inherit from other basic faces.  That would also decouple header-line
> > and everything else as a side effect.
> 
> OK, you want to change the header-line and mode-line-inactive faces so
> that they no longer inherit from the mode-line face?

Yes, I think this is the best way forward.  Though it will be somewhat
backward-incompatible, if someone customizes mode-line and expects
header-line to follow suit.

> But they aren't the only basic faces that have this problem --
> `tab-line' inherits from `variable-pitch', for instance.

We should "un-inherit" all of the basic faces.

> > That's how face-remapping-alist takes its effect.  If you want this to
> > work for inherited faces, you must do this for the parent face,
> > recursively, before you do it for the face in which you are
> > interested.  You want to add the inheritance-chasing loop to basic
> > face look up?  I don't.
> 
> No, I don't.  I was thinking of altering `face-remap-add-relative' so
> that it resolves the faces that inherit instead of leaving it to
> redisplay.

I don't think this can work, because that would mean the original face
will be affected by remapping, won't it?  Face remapping is
buffer-local, whereas faces are defined for the entire frame.  So we
cannot affect the original face and keep the effect buffer-local.  And
if we produce a different face symbol and modify it instead, then
references to the original face symbol will not be redirected to the
remapped face.




This bug report was last modified 3 years and 158 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.