GNU bug report logs - #68042
30.0.50; `face-font' returns nil after adding remap relative for fontset

Previous Next

Package: emacs;

Reported by: Hanwen Guo <g.hanwen <at> outlook.com>

Date: Tue, 26 Dec 2023 16:57:02 UTC

Severity: normal

Tags: moreinfo, notabug

Found in version 30.0.50

Done: Stefan Kangas <stefankangas <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


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

From: Eli Zaretskii <eliz <at> gnu.org>
To: Hanwen Guo <g.hanwen <at> outlook.com>
Cc: 68042 <at> debbugs.gnu.org
Subject: Re: bug#68042: 30.0.50; `face-font' returns nil after adding remap
 relative for fontset
Date: Wed, 27 Dec 2023 15:30:24 +0200
> From: Hanwen Guo <g.hanwen <at> outlook.com>
> CC: "68042 <at> debbugs.gnu.org" <68042 <at> debbugs.gnu.org>
> Date: Wed, 27 Dec 2023 06:43:46 +0000
> 
> > If you replace all instances of :fontset above with :font, face-font
> will not return nil.
> 
> Actually, if you pass the fontset through the `:font' attribute, only the ASCII font from the fontset is
> used.

Yes, because the faces that are exposed to Lisp are always the faces
used for characters supported by the "ASCII font" of a face.  For
other characters, Emacs creates internally a separate face, which is
not exposed to Lisp, and determines its font from the fontset in
effect, merging the other relevant face attributes to produce a face
as similar as possible to the one used for characters covered by the
"ASCII font".

> This applies to both `set-face-attribute' and `face-remap-add-relative'. AFAIU, I think when it
> comes to the face attributes, the fontset feature is more like a way to set different font for diferent
> character sets, making it able to "display the whole range of characters that Emacs supports" for a
> given face, since setting the `:family' attribute or assigning a single font to `:font' would suffice for
> setting font only for ASCII characters. So the case is, either the `:font' attribute needs to consider the
> full fontset, or the whole fontset feature is, as you said, "obsolete". 

Then please explain in more detail what you are trying to achieve, and
why.  The code snippet you presented makes it hard to guess, since it
defines a face with a special fontset, and then remaps the 'default'
face to that face.  Why would you need to do that, instead of simply
customizing the default-fontset or setting the :fontset attribute of
the 'default' face?

The technical reason for what you see is that face-remapping creates
an anonymous face with the specified attributes, and Emacs doesn't
support the :fontset attribute for anonymous faces.  But since I don't
really understand why you use face-remap-add-relative, I cannot tell
whether this is a problem or how to solve it for your needs.




This bug report was last modified 1 year and 74 days ago.

Previous Next


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