Subject: bug#68042: closed (Re: bug#68042: 30.0.50; `face-font' returns nil after adding remap relative for fontset)

From: [email-masked] (GNU bug Tracking System)
Date: Sun, 09 Jun 2024 20:58:02 +0000

Your bug report

#68042: 30.0.50; `face-font' returns nil after adding remap relative for fontset

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
68042: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=68042
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#68042: 30.0.50; `face-font' returns nil after adding remap relative for fontset
From: Stefan Kangas <[email-masked]>
To: Eli Zaretskii <[email-masked]>
Cc: [email-masked], Hanwen Guo <[email-masked]>
Date: Sun, 9 Jun 2024 13:56:26 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

Eli Zaretskii <[email-masked]> writes:

>> From: Hanwen Guo <[email-masked]>
>> CC: "[email-masked]" <[email-masked]>
>> 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.

More information was requested, but none was given within 23 weeks, so
I'm closing this bug.  If this is still an issue, please reply to this
email (use "Reply to all" in your email client) and we can reopen the
bug report.

Subject: 30.0.50; `face-font' returns nil after adding remap relative for fontset
From: Hanwen Guo <[email-masked]>
To: "[email-masked]" <[email-masked]>
Date: Tue, 26 Dec 2023 11:47:22 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Providing the `:fontset' or `:font' face attribute in the `SPEC'
argument of `face-remap-add-relative' with `FACE' argument being
`'default' will make the `face-font' function return nil.

The following Emacs Lisp code can reproduce this behavior under 'emacs
-Q'.

(create-fontset-from-fontset-spec
 (font-xlfd-name
  (font-spec :family "Source Serif"
             :registry "fontset-variable pitch regular")))

(set-face-attribute 'variable-pitch nil
                    :family "Source Serif"
                    :fontset "fontset-variable pitch regular")

(let ((var-pitch (face-attribute 'variable-pitch :family))
      (var-fontset (face-attribute 'variable-pitch :fontset)))
  (setq mixed-pitch-variable-cookie
        (face-remap-add-relative 'default :family var-pitch :fontset var-fontset)))

(face-font 'default) ;; nil

(face-remap-remove-relative mixed-pitch-variable-cookie)

(face-font 'default) ;; non-nil

In GNU Emacs 30.0.50 (build 1, x86_64-w64-mingw32) of 2023-12-11 built
 on MASELLUM-G14
Repository revision: 9434ad25ce2747864e0bcf5665f65eb65a079178
Repository branch: master
Windowing system distributor 'Microsoft Corp.', version 10.0.22631
System Description: Microsoft Windows 10 Pro (v10.0.2009.22631.2861)

Configured using:
 'configure --with-mailutils --without-pop --with-json
 --with-tree-sitter --with-sqlite3 --with-xpm --with-jpeg --with-tiff
 --with-gif --with-png --with-rsvg --with-webp --with-modules
 --without-dbus --without-compress-install --with-native-compilation=aot
 'CFLAGS=-O2 -fno-optimize-sibling-calls''

Configured features:
ACL GIF GMP GNUTLS HARFBUZZ JPEG JSON LCMS2 LIBXML2 MODULES NATIVE_COMP
NOTIFY W32NOTIFY PDUMPER PNG RSVG SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XPM ZLIB

Important settings:
  value of $LANG: CHS
  locale-coding-system: cp65001

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message mailcap yank-media puny dired
dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068
epg-config gnus-util text-property-search mm-decode mm-bodies mm-encode
mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mail-utils face-remap comp-run
bytecomp byte-compile comp-common rx time-date subr-x cl-loaddefs cl-lib
china-util rmc iso-transl tooltip cconv eldoc paren electric uniquify
ediff-hook vc-hooks lisp-float-type elisp-mode mwheel dos-w32 ls-lisp
disp-table term/w32-win w32-win w32-vars term/common-win tool-bar dnd
fontset image regexp-opt fringe tabulated-list replace newcomment
text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow
isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax
font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads w32notify w32 lcms2 multi-tty
move-toolbar make-network-process native-compile emacs)

Memory information:
((conses 16 64497 9228) (symbols 48 6044 0) (strings 32 17178 1453)
 (string-bytes 1 484111) (vectors 16 13625)
 (vector-slots 8 351812 11898) (floats 8 45 37) (intervals 56 347 19)
 (buffers 992 10))