all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#68042: 30.0.50; `face-font' returns nil after adding remap relative for fontset
@ 2023-12-26 11:47 Hanwen Guo
  2023-12-26 17:49 ` Eli Zaretskii
  0 siblings, 1 reply; 5+ messages in thread
From: Hanwen Guo @ 2023-12-26 11:47 UTC (permalink / raw)
  To: 68042

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





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#68042: 30.0.50; `face-font' returns nil after adding remap relative for fontset
  2023-12-26 11:47 bug#68042: 30.0.50; `face-font' returns nil after adding remap relative for fontset Hanwen Guo
@ 2023-12-26 17:49 ` Eli Zaretskii
  2023-12-27  6:43   ` Hanwen Guo
  0 siblings, 1 reply; 5+ messages in thread
From: Eli Zaretskii @ 2023-12-26 17:49 UTC (permalink / raw)
  To: Hanwen Guo; +Cc: 68042

tags 68042 notabug
thanks

> From: Hanwen Guo <g.hanwen@outlook.com>
> Date: Tue, 26 Dec 2023 11:47:22 +0000
> msip_labels: 
> 
> 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

Don't use :fontset as a face attribute; use :font instead.  The value
of :font can be a fontset, so you don't need to use the (obsolete and
not really supported) :fontset attribute.  The doc string of
set-face-attribute documents :font, not :fontset, and that is not an
accident.

If you replace all instances of :fontset above with :font, fac-font
will not return nil.

This is not a bug.





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#68042: 30.0.50; `face-font' returns nil after adding remap relative for fontset
  2023-12-26 17:49 ` Eli Zaretskii
@ 2023-12-27  6:43   ` Hanwen Guo
  2023-12-27 13:30     ` Eli Zaretskii
  0 siblings, 1 reply; 5+ messages in thread
From: Hanwen Guo @ 2023-12-27  6:43 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 68042@debbugs.gnu.org

[-- Attachment #1: Type: text/plain, Size: 2623 bytes --]

> If you replace all instances of :fontset above with :font, fac-font
will not return nil.

Actually, if you pass the fontset through the `:font' attribute, only the ASCII font from the fontset is used. 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".

________________________________
From: Eli Zaretskii <eliz@gnu.org>
Sent: Wednesday, December 27, 2023 1:49
To: Hanwen Guo <g.hanwen@outlook.com>
Cc: 68042@debbugs.gnu.org <68042@debbugs.gnu.org>
Subject: Re: bug#68042: 30.0.50; `face-font' returns nil after adding remap relative for fontset

tags 68042 notabug
thanks

> From: Hanwen Guo <g.hanwen@outlook.com>
> Date: Tue, 26 Dec 2023 11:47:22 +0000
> msip_labels:
>
> 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

Don't use :fontset as a face attribute; use :font instead.  The value
of :font can be a fontset, so you don't need to use the (obsolete and
not really supported) :fontset attribute.  The doc string of
set-face-attribute documents :font, not :fontset, and that is not an
accident.

If you replace all instances of :fontset above with :font, fac-font
will not return nil.

This is not a bug.

[-- Attachment #2: Type: text/html, Size: 4772 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#68042: 30.0.50; `face-font' returns nil after adding remap relative for fontset
  2023-12-27  6:43   ` Hanwen Guo
@ 2023-12-27 13:30     ` Eli Zaretskii
  2024-06-09 20:56       ` Stefan Kangas
  0 siblings, 1 reply; 5+ messages in thread
From: Eli Zaretskii @ 2023-12-27 13:30 UTC (permalink / raw)
  To: Hanwen Guo; +Cc: 68042

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





^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#68042: 30.0.50; `face-font' returns nil after adding remap relative for fontset
  2023-12-27 13:30     ` Eli Zaretskii
@ 2024-06-09 20:56       ` Stefan Kangas
  0 siblings, 0 replies; 5+ messages in thread
From: Stefan Kangas @ 2024-06-09 20:56 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 68042-done, Hanwen Guo

Eli Zaretskii <eliz@gnu.org> writes:

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

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.





^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-06-09 20:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-26 11:47 bug#68042: 30.0.50; `face-font' returns nil after adding remap relative for fontset Hanwen Guo
2023-12-26 17:49 ` Eli Zaretskii
2023-12-27  6:43   ` Hanwen Guo
2023-12-27 13:30     ` Eli Zaretskii
2024-06-09 20:56       ` Stefan Kangas

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.