* 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 public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).