[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#68042: 30.0.50; `face-font' returns nil after adding remap relative
From: |
Eli Zaretskii |
Subject: |
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@outlook.com>
> CC: "68042@debbugs.gnu.org" <68042@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.