unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
@ 2023-12-13 12:03 Tim Ruffing
  2023-12-13 12:39 ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Tim Ruffing @ 2023-12-13 12:03 UTC (permalink / raw)
  To: 67810

To reproduce:
   1. `emacs` -Q on Linux with pgtk enabled
   2. `M-x select-frame-font` and select a font that doesn't have a
      bold weight
   3. Observe that the buffer indicator (`*scratch*`) in the status
      line is in bold (using synthetic bold glyphs)

This is annoying in combination with symbol fonts such as Nerd fonts.
The bold versions of some symbols look strange, and worse, they may be
too wide to fit two glyphs and are clipped then.

What I have tried:
 * I thought this is a font-config thing. /etc/fonts/conf.d by default
   has a symlink 90-synthetic.conf that sets the "embolden" attribute
   for font queries that ask for a bold font but only regular is
   available. Removing that symlink does make a difference when I try
   `fc-match "MY-FONT:weight=bold" --verbose | grep bold`. With the
   symlink, fc sets the embolden attribute, and without the symlink, it
   doesn't. I can even see the difference in emacs' (Pango) font
   selection dialog. But emacs itself doesn't seem to care about this
   and still creates a synthesized bold font. 
 * Cairo is supposed to pick this attribute up [1] and act accordingly,
   but that doesn't work. I tried to add a printf("synthesize: %d\n",
   cairo_ft_font_face_get_synthesize(font_face)); to the current emacs
   git (75fd7550ed6cede6c9e8224f1f2d62637c43fdd4) in ftcrfont_open, and
   this always prints "0" (even with the symlink in place!). AFAIU this
   means that Cairo should never embolden fonts, but some reason
   there's something in emacs that does it.  
 * describe-font only shows the medium/regular variant.  


[1]
https://gitlab.freedesktop.org/cairo/cairo/-/blob/master/src/cairo-ft-font.c#L1928-1936

In GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38,
cairo version 1.17.8)
System Description: Arch Linux

Configured using:
'configure --with-pgtk --with-native-compilation=aot --sysconfdir=/etc
--prefix=/usr --libexecdir=/usr/lib --with-tree-sitter
--localstatedir=/var --with-cairo --disable-build-details
--with-harfbuzz --with-libsystemd --with-modules 'CFLAGS=-march=x86-64
-mtune=generic -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=2
-Wformat -Werror=format-security -fstack-clash-protection
-fcf-protection -g
-ffile-prefix-map=/build/emacs/src=/usr/src/debug/emacs -flto=auto'
'LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -flto=auto'
'CXXFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions
-Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security
-fstack-clash-protection -fcf-protection -Wp,-D_GLIBCXX_ASSERTIONS -g
-ffile-prefix-map=/build/emacs/src=/usr/src/debug/emacs -flto=auto''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY
PDUMPER PGTK PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM GTK3 ZLIB

Important settings:
value of $LC_COLLATE: de_DE.UTF-8
value of $LC_CTYPE: de_DE.UTF-8
value of $LC_MESSAGES: en_DK.UTF-8
value of $LC_MONETARY: de_DE.UTF-8
value of $LC_NUMERIC: de_DE.UTF-8
value of $LC_TIME: en_DK.UTF-8
value of $LANG: en_US.utf8
locale-coding-system: utf-8-unix

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
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 time-date mm-decode mm-bodies
mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader cl-
loaddefs
comp comp-cstr warnings icons subr-x rx cl-seq cl-macs gv cl-extra
help-mode bytecomp byte-compile cl-lib sendmail rfc2047 rfc2045
ietf-drums mm-util mail-prsvr mail-utils rmc iso-transl tooltip cconv
eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
elisp-mode mwheel term/pgtk-win pgtk-win term/common-win pgtk-dnd
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
dbusbind
inotify dynamic-setting system-font-setting font-render-setting cairo
gtk pgtk lcms2 multi-tty make-network-process native-compile emacs)

Memory information:
((conses 16 77248 5503)
(symbols 48 7107 0)
(strings 32 19670 2185)
(string-bytes 1 602889)
(vectors 16 15723)
(vector-slots 8 329133 12738)
(floats 8 27 46)
(intervals 56 270 0)
(buffers 984 12)





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-13 12:03 bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk Tim Ruffing
@ 2023-12-13 12:39 ` Eli Zaretskii
  2023-12-13 13:28   ` Tim Ruffing
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2023-12-13 12:39 UTC (permalink / raw)
  To: Tim Ruffing; +Cc: 67810

> From: Tim Ruffing <crypto@timruffing.de>
> Date: Wed, 13 Dec 2023 13:03:47 +0100
> 
> To reproduce:
>    1. `emacs` -Q on Linux with pgtk enabled
>    2. `M-x select-frame-font` and select a font that doesn't have a
>       bold weight
>    3. Observe that the buffer indicator (`*scratch*`) in the status
>       line is in bold (using synthetic bold glyphs)
> 
> This is annoying in combination with symbol fonts such as Nerd fonts.
> The bold versions of some symbols look strange, and worse, they may be
> too wide to fit two glyphs and are clipped then.
> 
> What I have tried:
>  * I thought this is a font-config thing. /etc/fonts/conf.d by default
>    has a symlink 90-synthetic.conf that sets the "embolden" attribute
>    for font queries that ask for a bold font but only regular is
>    available. Removing that symlink does make a difference when I try
>    `fc-match "MY-FONT:weight=bold" --verbose | grep bold`. With the
>    symlink, fc sets the embolden attribute, and without the symlink, it
>    doesn't. I can even see the difference in emacs' (Pango) font
>    selection dialog. But emacs itself doesn't seem to care about this
>    and still creates a synthesized bold font. 
>  * Cairo is supposed to pick this attribute up [1] and act accordingly,
>    but that doesn't work. I tried to add a printf("synthesize: %d\n",
>    cairo_ft_font_face_get_synthesize(font_face)); to the current emacs
>    git (75fd7550ed6cede6c9e8224f1f2d62637c43fdd4) in ftcrfont_open, and
>    this always prints "0" (even with the symlink in place!). AFAIU this
>    means that Cairo should never embolden fonts, but some reason
>    there's something in emacs that does it.  
>  * describe-font only shows the medium/regular variant.  

Thanks, but why do you think this is an issue for Emacs to solve?  I
don't think Emacs creates such "synthesized" fonts; are you sure it
does?  I think Emacs just asks fontconfig for a bold font; it has no
knowledge whether it gets a real or a synthetic font.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-13 12:39 ` Eli Zaretskii
@ 2023-12-13 13:28   ` Tim Ruffing
  2023-12-13 13:39     ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Tim Ruffing @ 2023-12-13 13:28 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 67810

On Wed, 2023-12-13 at 14:39 +0200, Eli Zaretskii wrote:  
> I don't think Emacs creates such "synthesized" fonts; are you sure it
> does? I think Emacs just asks fontconfig for a bold font; it has no
> knowledge whether it gets a real or a synthetic font.

Well, *something* in the Emacs font rendering stack creates this bold
variant. font-config can't create it, it's just a config layer but
doesn't handle rendering. I'm really not an expert here with so many
pieces in the stack but AFAIU Cairo can be asked to do so, and will
just delegate to freetype. (Harfbuzz can also do it, see
https://github.com/harfbuzz/harfbuzz/pull/4097 , but I see the bold in
emacs when I configure --without-harfbuzz). 

The thing is: If I query font-config manually, it tells me to use the
regular font and not to embolden it (see below) .Emacs doesn't respect
this. 

So what we should have is a way to disable the emboldening. When I set
my font-config settings such that emboldening is disabled, pango
apparently respects this (as apparent from the font selection dialog)
but emacs doesn't.

A simple font for testing is this one here:
https://www.dafont.com/elronet-monospace.font

$ fc-match "ElroNet Monospace"
Elronmonospace.ttf: "ElroNet Monospace" "Normal"

But even when I ask for bold, there's no difference:

$ fc-match "ElroNet Monospace:bold"
Elronmonospace.ttf: "ElroNet Monospace" "Normal" 

When I have configured font-config to create bold:

$ fc-match "ElroNet Monospace:bold" --verbose | grep bold
	embolden: True(w)

When I haven't:
$ fc-match "ElroNet Monospace:bold" --verbose | grep bold

(no match)






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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-13 13:28   ` Tim Ruffing
@ 2023-12-13 13:39     ` Eli Zaretskii
  2023-12-13 15:09       ` Tim Ruffing
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2023-12-13 13:39 UTC (permalink / raw)
  To: Tim Ruffing; +Cc: 67810

> From: Tim Ruffing <crypto@timruffing.de>
> Cc: 67810@debbugs.gnu.org
> Date: Wed, 13 Dec 2023 14:28:58 +0100
> 
> On Wed, 2023-12-13 at 14:39 +0200, Eli Zaretskii wrote:  
> > I don't think Emacs creates such "synthesized" fonts; are you sure it
> > does? I think Emacs just asks fontconfig for a bold font; it has no
> > knowledge whether it gets a real or a synthetic font.
> 
> Well, *something* in the Emacs font rendering stack creates this bold
> variant. font-config can't create it, it's just a config layer but
> doesn't handle rendering. I'm really not an expert here with so many
> pieces in the stack but AFAIU Cairo can be asked to do so, and will
> just delegate to freetype. (Harfbuzz can also do it, see
> https://github.com/harfbuzz/harfbuzz/pull/4097 , but I see the bold in
> emacs when I configure --without-harfbuzz). 
> 
> The thing is: If I query font-config manually, it tells me to use the
> regular font and not to embolden it (see below) .Emacs doesn't respect
> this. 
> 
> So what we should have is a way to disable the emboldening. When I set
> my font-config settings such that emboldening is disabled, pango
> apparently respects this (as apparent from the font selection dialog)
> but emacs doesn't.

Maybe this is done by the calls to the font backend with FC_EMBOLDEN
parameter?  I'm no expert on these font backends, but maybe you could
play with those calls and see if disabling them gets you what you
want?  You can find the relevant code by searching the C sources for
FC_EMBOLDEN.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-13 13:39     ` Eli Zaretskii
@ 2023-12-13 15:09       ` Tim Ruffing
  2023-12-13 15:43         ` Tim Ruffing
  2023-12-14  0:09         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 2 replies; 46+ messages in thread
From: Tim Ruffing @ 2023-12-13 15:09 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 67810



On Wed, 2023-12-13 at 15:39 +0200, Eli Zaretskii wrote:
> 
> Maybe this is done by the calls to the font backend with FC_EMBOLDEN
> parameter?  I'm no expert on these font backends, but maybe you could
> play with those calls and see if disabling them gets you what you
> want?  You can find the relevant code by searching the C sources for
> FC_EMBOLDEN.

Thanks for the suggestion, but no luck unfortunately. What also didn't
help is going back to Xft by configuring like this:
./configure --without-pgtk --without-cairo 

I don't know what to try next, I guess it will be useful to have
someone more familiar with the font stuff look at this. 








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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-13 15:09       ` Tim Ruffing
@ 2023-12-13 15:43         ` Tim Ruffing
  2023-12-14  0:09         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 0 replies; 46+ messages in thread
From: Tim Ruffing @ 2023-12-13 15:43 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: 67810


Sorry for double posting but let me note that it would also be helpful
to know whether you or others can reproduce that behavior. This would
at least tell me that this is not something weird in my system config.
(I really don't think so, but you never know...)

Tim





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-13 15:09       ` Tim Ruffing
  2023-12-13 15:43         ` Tim Ruffing
@ 2023-12-14  0:09         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-12-14  7:28           ` Eli Zaretskii
  1 sibling, 1 reply; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-12-14  0:09 UTC (permalink / raw)
  To: Tim Ruffing; +Cc: Eli Zaretskii, 67810

Tim Ruffing <crypto@timruffing.de> writes:

> On Wed, 2023-12-13 at 15:39 +0200, Eli Zaretskii wrote:
>> 
>> Maybe this is done by the calls to the font backend with FC_EMBOLDEN
>> parameter?  I'm no expert on these font backends, but maybe you could
>> play with those calls and see if disabling them gets you what you
>> want?  You can find the relevant code by searching the C sources for
>> FC_EMBOLDEN.
>
> Thanks for the suggestion, but no luck unfortunately. What also didn't
> help is going back to Xft by configuring like this:
> ./configure --without-pgtk --without-cairo 
>
> I don't know what to try next, I guess it will be useful to have
> someone more familiar with the font stuff look at this. 

There's no bug here: when a bold face is displayed by a font which
doesn't provide a bold variant, Emacs overstrikes text displayed in that
font to create visual contrast between the bold text and its
surroundings.  This is implemented independently of font backend
features such as FC_EMBOLDEN.

If this contrast is undesirable, remove the weight attribute from the
face.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-14  0:09         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-12-14  7:28           ` Eli Zaretskii
  2023-12-14  9:32             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-12-14  9:54             ` Tim Ruffing
  0 siblings, 2 replies; 46+ messages in thread
From: Eli Zaretskii @ 2023-12-14  7:28 UTC (permalink / raw)
  To: Po Lu; +Cc: crypto, 67810

> From: Po Lu <luangruo@yahoo.com>
> Cc: Eli Zaretskii <eliz@gnu.org>,  67810@debbugs.gnu.org
> Date: Thu, 14 Dec 2023 08:09:11 +0800
> 
> Tim Ruffing <crypto@timruffing.de> writes:
> 
> > On Wed, 2023-12-13 at 15:39 +0200, Eli Zaretskii wrote:
> >> 
> >> Maybe this is done by the calls to the font backend with FC_EMBOLDEN
> >> parameter?  I'm no expert on these font backends, but maybe you could
> >> play with those calls and see if disabling them gets you what you
> >> want?  You can find the relevant code by searching the C sources for
> >> FC_EMBOLDEN.
> >
> > Thanks for the suggestion, but no luck unfortunately. What also didn't
> > help is going back to Xft by configuring like this:
> > ./configure --without-pgtk --without-cairo 
> >
> > I don't know what to try next, I guess it will be useful to have
> > someone more familiar with the font stuff look at this. 
> 
> There's no bug here: when a bold face is displayed by a font which
> doesn't provide a bold variant, Emacs overstrikes text displayed in that
> font to create visual contrast between the bold text and its
> surroundings.  This is implemented independently of font backend
> features such as FC_EMBOLDEN.

Can you point me at the place in the code where we do this?

> If this contrast is undesirable, remove the weight attribute from the
> face.

We could have a variable exposed to Lisp to inhibit this overstriking,
if some users want that.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-14  7:28           ` Eli Zaretskii
@ 2023-12-14  9:32             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-12-14  9:54             ` Tim Ruffing
  1 sibling, 0 replies; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-12-14  9:32 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: crypto, 67810

Eli Zaretskii <eliz@gnu.org> writes:

> Can you point me at the place in the code where we do this?

Yes, see lines 6192 and 6045 in xfaces.c, viz.:

  if (face->font
      && FONT_WEIGHT_NAME_NUMERIC (attrs[LFACE_WEIGHT_INDEX]) > 100
      && FONT_WEIGHT_NUMERIC (attrs[LFACE_FONT_INDEX]) <= 100)
    face->overstrike = true;

and

  face->overstrike
    = (! NILP (font_object)
       && FONT_WEIGHT_NAME_NUMERIC (face->lface[LFACE_WEIGHT_INDEX]) > 100
       && FONT_WEIGHT_NUMERIC (font_object) <= 100);





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-14  7:28           ` Eli Zaretskii
  2023-12-14  9:32             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-12-14  9:54             ` Tim Ruffing
  2023-12-14 10:04               ` Eli Zaretskii
  1 sibling, 1 reply; 46+ messages in thread
From: Tim Ruffing @ 2023-12-14  9:54 UTC (permalink / raw)
  To: Eli Zaretskii, Po Lu; +Cc: 67810

@Po Lu:
Oh, thanks for pointing that out! I wasn't aware of the "overstrike"
term. I had grepped the code base for "bold" but I couldn't find
anything...

Okay, yes, so my use case is that I (or actually doom) uses this to
enable the display of icons:
  
(dolist (range '((#xe000 . #xf8ff) (#xf0000 . #xfffff)))
  (set-fontset-font t range "Symbols Nerd Font Mono"))

While overstriking is typically appropriate for normal fonts, it's
rather undesirable for others such as icons. For example, if the icon
contains a square, then the borders of the square are strechted
horizontally but not vertically. Moreover, this makes some glyphs to
wide and then their right side will be clipped. 

Removing the weight attribute from the face will only work in some
cases, e.g., for UI elements controlled by some package. If the user
inserts an icon in a bold org headline, we can't change the face on the
fly. (Well I'm sure, we could, but that sounds like the wrong
approach.)  

So I think whether overstriking is performed should ideally be a
property of the font. Having some variable similar to the existing 
vertical-centering-font-regexp would be great, and this would also make
it possible to turn off overstriking globally.

Do you think that's a reasonable thing to add?





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-14  9:54             ` Tim Ruffing
@ 2023-12-14 10:04               ` Eli Zaretskii
  2023-12-14 10:37                 ` Tim Ruffing
  2023-12-14 11:26                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 2 replies; 46+ messages in thread
From: Eli Zaretskii @ 2023-12-14 10:04 UTC (permalink / raw)
  To: Tim Ruffing; +Cc: luangruo, 67810

> From: Tim Ruffing <crypto@timruffing.de>
> Cc: 67810@debbugs.gnu.org
> Date: Thu, 14 Dec 2023 10:54:45 +0100
> 
> So I think whether overstriking is performed should ideally be a
> property of the font. Having some variable similar to the existing 
> vertical-centering-font-regexp would be great, and this would also make
> it possible to turn off overstriking globally.
> 
> Do you think that's a reasonable thing to add?

What are the chances of someone wanting to disable this feature only
for some fonts?  If we want to allow disabling it globally, it should
be a simple matter of adding a boolean variable exposed to Lisp, and
then performing this only when the variable doesn't inhibit that.

Adding a font property, or a regexp for matching fonts which are
exempt from this, are by contrast much more complex and require more
changes.  For a feature that was so far requested by a single user,
I'm not sure this is justified.

As for your example: if Doom uses this for icons, why cannot Doom
refrain from using bold face for these cases?





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-14 10:04               ` Eli Zaretskii
@ 2023-12-14 10:37                 ` Tim Ruffing
  2023-12-14 11:19                   ` Eli Zaretskii
  2023-12-14 11:26                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 46+ messages in thread
From: Tim Ruffing @ 2023-12-14 10:37 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: luangruo, 67810



On Thu, 2023-12-14 at 12:04 +0200, Eli Zaretskii wrote:
> What are the chances of someone wanting to disable this feature only
> for some fonts?  If we want to allow disabling it globally, it should
> be a simple matter of adding a boolean variable exposed to Lisp, and
> then performing this only when the variable doesn't inhibit that.
> 
> Adding a font property, or a regexp for matching fonts which are
> exempt from this, are by contrast much more complex and require more
> changes.  For a feature that was so far requested by a single user,
> I'm not sure this is justified.
> 

My first intuition was that, conceptually, it should depend on the font
because it's desirable for some fonts but not for others, and I thought
the complexity is not that big given that we have the code essentially
in place, because we do the same for vertical centering.

But yeah, I expect the chances that someone wants to disable this only
for some fonts to be rather low: Fonts for "normal" text without bold
are very rare, and probably not high-quality anyway. So I don't think
there's anyone who has an advanced setup with icon fonts but at the
same time uses a poor font for normal text that doesn't even have a
bold variant, and then really needs the overstriking... (Plus, there
may be other mechanisms in that case, such as FC_EMBOLDEN).

For me personally, a boolean toggle will be fine, exactly for the
reason outline above: All the other fonts that I use have a bold
variant anyway. 

> As for your example: if Doom uses this for icons, why cannot Doom
> refrain from using bold face for these cases?

That's of course possible, and this could even be integrated in
packages like nerd-fonts and all-the-icons. But as I said in my
previous email, I think this solves only part of the problem. Setting
the face works when there is existing code for inserting icons (e.g.,
file type icons in dired), because that code can then take care of
setting the face. 

But it doesn't work in cases when the user simply wants to insert icons
in their buffers: For example, if the user inserts an icon in a bold
org headline, it seems to me like the wrong approach to change the face
on the fly.








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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-14 10:37                 ` Tim Ruffing
@ 2023-12-14 11:19                   ` Eli Zaretskii
  0 siblings, 0 replies; 46+ messages in thread
From: Eli Zaretskii @ 2023-12-14 11:19 UTC (permalink / raw)
  To: Tim Ruffing; +Cc: luangruo, 67810

> From: Tim Ruffing <crypto@timruffing.de>
> Cc: luangruo@yahoo.com, 67810@debbugs.gnu.org
> Date: Thu, 14 Dec 2023 11:37:15 +0100
> 
> > As for your example: if Doom uses this for icons, why cannot Doom
> > refrain from using bold face for these cases?
> 
> That's of course possible, and this could even be integrated in
> packages like nerd-fonts and all-the-icons. But as I said in my
> previous email, I think this solves only part of the problem. Setting
> the face works when there is existing code for inserting icons (e.g.,
> file type icons in dired), because that code can then take care of
> setting the face. 
> 
> But it doesn't work in cases when the user simply wants to insert icons
> in their buffers: For example, if the user inserts an icon in a bold
> org headline, it seems to me like the wrong approach to change the face
> on the fly.

One can always insert an icon with the likes of

  (propertize "ICON" 'face '(:weight medium))





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-14 10:04               ` Eli Zaretskii
  2023-12-14 10:37                 ` Tim Ruffing
@ 2023-12-14 11:26                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-12-14 15:06                   ` Tim Ruffing
  1 sibling, 1 reply; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-12-14 11:26 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Tim Ruffing, 67810

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Tim Ruffing <crypto@timruffing.de>
>> Cc: 67810@debbugs.gnu.org
>> Date: Thu, 14 Dec 2023 10:54:45 +0100
>> 
>> So I think whether overstriking is performed should ideally be a
>> property of the font. Having some variable similar to the existing 
>> vertical-centering-font-regexp would be great, and this would also make
>> it possible to turn off overstriking globally.
>> 
>> Do you think that's a reasonable thing to add?

The only existing variable which controls font display through matching
fonts against a regexp has been effectively abandoned over the years,
and is nonfunctional on all systems besides X and Android.
(Grep for Vvertical_centering_font_regexp: only sfntfont.c and xfont.c
consult it.)

A compelling reason for us _not_ to introduce more such variables, as
they will soon fall into disuse and neglect.

> What are the chances of someone wanting to disable this feature only
> for some fonts?  If we want to allow disabling it globally, it should
> be a simple matter of adding a boolean variable exposed to Lisp, and
> then performing this only when the variable doesn't inhibit that.
>
> Adding a font property, or a regexp for matching fonts which are
> exempt from this, are by contrast much more complex and require more
> changes.  For a feature that was so far requested by a single user,
> I'm not sure this is justified.
>
> As for your example: if Doom uses this for icons, why cannot Doom
> refrain from using bold face for these cases?

Yes, and don't these packages require using their own specialized icon
fonts to begin with?





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-14 11:26                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-12-14 15:06                   ` Tim Ruffing
  2023-12-14 22:55                     ` Stefan Kangas
  0 siblings, 1 reply; 46+ messages in thread
From: Tim Ruffing @ 2023-12-14 15:06 UTC (permalink / raw)
  To: Po Lu, Eli Zaretskii; +Cc: 67810


On Thu, 2023-12-14 at 13:19 +0200, Eli Zaretskii wrote:
> One can always insert an icon with the likes of
> 
>   (propertize "ICON" 'face '(:weight medium))

Sure, but do you think that's a proper solution to add this whenever
buffer contents change? What if the user visits a file with an icon? I
don't know enough about the internals of emacs, but this still seems
the wrong approach to me?  

On Thu, 2023-12-14 at 19:26 +0800, Po Lu wrote:
> The only existing variable which controls font display through
> matching
> fonts against a regexp has been effectively abandoned over the years,
> and is nonfunctional on all systems besides X and Android.
> (Grep for Vvertical_centering_font_regexp: only sfntfont.c and
> xfont.c
> consult it.)
> 
> A compelling reason for us _not_ to introduce more such variables, as
> they will soon fall into disuse and neglect.
> 
> 

Makes sense. But then I suspect a boolean toggle is equally bad, as it
would equally fall into disuse.

> Yes, and don't these packages require using their own specialized
> icon fonts to begin with?

Yes, packages like all-the-icons and nerd-icons do require specialized.
fonts. But I'm not sure what this implies. What do you suggest that
these packages do?

I mean, a crude hack is to make emacs believe that the specialized
fonts are already bold. But even this is not too easy. AFAIU, this
cannot be done in elisp (because font objects are not modifiable), so
the packages can't do this emacs.

What one can always do is to distribute patched font files. I could
install a patched font of the icon font that claims it's bold. But
that's also a rather crude hack.

But thanks to your explanation, I managed to come up with a different
workaround. The following effectively makes emacs believe that the
fonts are bold without the need to patch a font


  <!-- Make fontconfig believe that this is a bold font.
       This prevents emacs from applying overstriking when trying to
       render bold icons.
       See: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=67810

       Run `fc-cache -r` after making modifications here. -->
  <match target="scan">
    <test name="family" compare="contains">
      <string>Symbols Nerd Font</string>
    </test>
    <edit name="weight" mode="assign">
      <const>bold</const>
    </edit>
  </match>


That's still a bit crude due to the way emacs uses fontconfig. AFAIU
the way fontconfig typically is supposed to handle this is via
target="font" or target="match", i.e., the font is correctly parsed
into fontconfig's database but only when applications *query* for the
font, config tweaks apply and applications get a modified view, e.g.,
with weight=bold in this case. 

But this snippet here with target="scan" actually modifies the entry in
the fontconfig database because this is the only thing that works with
emacs. This is probably the same these two bugs:
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=25147 
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=17792 .






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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-14 15:06                   ` Tim Ruffing
@ 2023-12-14 22:55                     ` Stefan Kangas
  2024-01-11 15:50                       ` Tim Ruffing
  0 siblings, 1 reply; 46+ messages in thread
From: Stefan Kangas @ 2023-12-14 22:55 UTC (permalink / raw)
  To: Tim Ruffing, Po Lu, Eli Zaretskii; +Cc: 67810

Tim Ruffing <crypto@timruffing.de> writes:

>> Yes, and don't these packages require using their own specialized
>> icon fonts to begin with?
>
> Yes, packages like all-the-icons and nerd-icons do require specialized.
> fonts. But I'm not sure what this implies. What do you suggest that
> these packages do?

They should use .svg files, I think.  See the branch scratch/icons for
the basic approach.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2023-12-14 22:55                     ` Stefan Kangas
@ 2024-01-11 15:50                       ` Tim Ruffing
  2024-01-12  1:46                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 46+ messages in thread
From: Tim Ruffing @ 2024-01-11 15:50 UTC (permalink / raw)
  To: Stefan Kangas, Po Lu, Eli Zaretskii; +Cc: 67810



On Thu, 2023-12-14 at 14:55 -0800, Stefan Kangas wrote:
> 
> They should use .svg files, I think.  See the branch scratch/icons
> for
> the basic approach.

Yeah, that's a very clean approach, of course, but it's restricted to
graphical displays. And consideration went into the current design
described in 
https://www.gnu.org/software/emacs/manual/html_node/elisp/Icons.html
which says "Icons should also have a textual fallback." and which has
an example with "textual" symbols. 

@Po Lu:
Independent of icons, I still think that overstriking is a bit
unexpected. (I mean, even Eli didn't know about it.) I see that a font
regex is too much, but do you think a simple boolean option would be a
good idea? Or do you think the current behavior should simply be
documented more prominently?

Tim





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-11 15:50                       ` Tim Ruffing
@ 2024-01-12  1:46                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-12  8:37                           ` Eli Zaretskii
  2024-01-13  6:37                           ` Stefan Kangas
  0 siblings, 2 replies; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-12  1:46 UTC (permalink / raw)
  To: Tim Ruffing; +Cc: Eli Zaretskii, 67810, Stefan Kangas

Tim Ruffing <crypto@timruffing.de> writes:

> Yeah, that's a very clean approach, of course, but it's restricted to
> graphical displays. And consideration went into the current design
> described in 
> https://www.gnu.org/software/emacs/manual/html_node/elisp/Icons.html
> which says "Icons should also have a textual fallback." and which has
> an example with "textual" symbols. 

I suggest not using SVG icons for monochrome symbolic icons of the kind
doom-modeline often displays.  Libraries rendering SVG are relatively
memory-intensive and slow, while outline fonts are optimized for memory
consumption and scaler speed.

Incidentally, I've been toying with the idea of using the code in sfnt.c
to create vector symbols definable from Lisp and available on all
systems, to serve as fringe bitmaps and the like.

> @Po Lu:
> Independent of icons, I still think that overstriking is a bit
> unexpected. (I mean, even Eli didn't know about it.) I see that a font
> regex is too much, but do you think a simple boolean option would be a
> good idea? Or do you think the current behavior should simply be
> documented more prominently?

I think this is a mechanism users should not understand in this much
technical detail, because font backends might synthesize their bold or
oblique variants by other means when one is requested from a font that
doesn't provide them.  Rather, users should understand that Emacs will
seek to display bold text when they specify it should, and that text
which isn't meant to be bold text should not receive text properties
labeling it as such.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-12  1:46                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-12  8:37                           ` Eli Zaretskii
  2024-01-12  9:59                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-13  6:37                           ` Stefan Kangas
  1 sibling, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2024-01-12  8:37 UTC (permalink / raw)
  To: Po Lu; +Cc: crypto, 67810, stefankangas

> From: Po Lu <luangruo@yahoo.com>
> Cc: Stefan Kangas <stefankangas@gmail.com>,  Eli Zaretskii <eliz@gnu.org>,
>   67810@debbugs.gnu.org
> Date: Fri, 12 Jan 2024 09:46:21 +0800
> 
> Tim Ruffing <crypto@timruffing.de> writes:
> 
> > @Po Lu:
> > Independent of icons, I still think that overstriking is a bit
> > unexpected. (I mean, even Eli didn't know about it.) I see that a font
> > regex is too much, but do you think a simple boolean option would be a
> > good idea? Or do you think the current behavior should simply be
> > documented more prominently?
> 
> I think this is a mechanism users should not understand in this much
> technical detail, because font backends might synthesize their bold or
> oblique variants by other means when one is requested from a font that
> doesn't provide them.  Rather, users should understand that Emacs will
> seek to display bold text when they specify it should, and that text
> which isn't meant to be bold text should not receive text properties
> labeling it as such.

Would it make sense to introduce a variable that disables synthesizing
bold or oblique font variants?





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-12  8:37                           ` Eli Zaretskii
@ 2024-01-12  9:59                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-12 11:46                               ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-12  9:59 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: crypto, 67810, stefankangas

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Po Lu <luangruo@yahoo.com>
>> Cc: Stefan Kangas <stefankangas@gmail.com>,  Eli Zaretskii <eliz@gnu.org>,
>>   67810@debbugs.gnu.org
>> Date: Fri, 12 Jan 2024 09:46:21 +0800
>> 
>> Tim Ruffing <crypto@timruffing.de> writes:
>> 
>> > @Po Lu:
>> > Independent of icons, I still think that overstriking is a bit
>> > unexpected. (I mean, even Eli didn't know about it.) I see that a font
>> > regex is too much, but do you think a simple boolean option would be a
>> > good idea? Or do you think the current behavior should simply be
>> > documented more prominently?
>> 
>> I think this is a mechanism users should not understand in this much
>> technical detail, because font backends might synthesize their bold or
>> oblique variants by other means when one is requested from a font that
>> doesn't provide them.  Rather, users should understand that Emacs will
>> seek to display bold text when they specify it should, and that text
>> which isn't meant to be bold text should not receive text properties
>> labeling it as such.
>
> Would it make sense to introduce a variable that disables synthesizing
> bold or oblique font variants?

I think it won't until someone informs us of how those features might be
disabled in the font drivers that perform this.  The Mac driver is
definitely one of them, and possibly the Fontconfig driver as well.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-12  9:59                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-12 11:46                               ` Eli Zaretskii
  2024-01-12 12:20                                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2024-01-12 11:46 UTC (permalink / raw)
  To: Po Lu; +Cc: crypto, 67810, stefankangas

> From: Po Lu <luangruo@yahoo.com>
> Cc: crypto@timruffing.de,  stefankangas@gmail.com,  67810@debbugs.gnu.org
> Date: Fri, 12 Jan 2024 17:59:29 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> From: Po Lu <luangruo@yahoo.com>
> >> Cc: Stefan Kangas <stefankangas@gmail.com>,  Eli Zaretskii <eliz@gnu.org>,
> >>   67810@debbugs.gnu.org
> >> Date: Fri, 12 Jan 2024 09:46:21 +0800
> >> 
> >> Tim Ruffing <crypto@timruffing.de> writes:
> >> 
> >> > @Po Lu:
> >> > Independent of icons, I still think that overstriking is a bit
> >> > unexpected. (I mean, even Eli didn't know about it.) I see that a font
> >> > regex is too much, but do you think a simple boolean option would be a
> >> > good idea? Or do you think the current behavior should simply be
> >> > documented more prominently?
> >> 
> >> I think this is a mechanism users should not understand in this much
> >> technical detail, because font backends might synthesize their bold or
> >> oblique variants by other means when one is requested from a font that
> >> doesn't provide them.  Rather, users should understand that Emacs will
> >> seek to display bold text when they specify it should, and that text
> >> which isn't meant to be bold text should not receive text properties
> >> labeling it as such.
> >
> > Would it make sense to introduce a variable that disables synthesizing
> > bold or oblique font variants?
> 
> I think it won't until someone informs us of how those features might be
> disabled in the font drivers that perform this.  The Mac driver is
> definitely one of them, and possibly the Fontconfig driver as well.

If we do introduce such a variable, wouldn't it prevent Emacs from
generating the missing variants?  And wouldn't avoiding to generate
them do what the OP wanted, i.e. have a default face's font where bold
looks like regular?





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-12 11:46                               ` Eli Zaretskii
@ 2024-01-12 12:20                                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-12 12:30                                   ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-12 12:20 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: crypto, 67810, stefankangas

Eli Zaretskii <eliz@gnu.org> writes:

> If we do introduce such a variable, wouldn't it prevent Emacs from
> generating the missing variants?

On the contrary: if the generation of such variants by the font backend
is inhibited, Emacs will display bold text with overstriking, when these
variants are absent from the font itself.

I should clarify that "generation" refers to the automatic generation of
oblique or bold fonts undertaken by a handful of our font backends, not
the overstriking implemented in xfaces.c.

> And wouldn't avoiding to generate them do what the OP wanted,
> i.e. have a default face's font where bold looks like regular?

No, see above.  However, the matter at hand is that I can't understand
the deficiency OPs request is supposed to address.  Surely, if the
author of a package which inserts icons wishes that they not be bold,
the package should set the face by which they are displayed to one that
isn't?

Thanks.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-12 12:20                                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-12 12:30                                   ` Eli Zaretskii
  2024-01-12 13:12                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2024-01-12 12:30 UTC (permalink / raw)
  To: Po Lu; +Cc: crypto, 67810, stefankangas

> From: Po Lu <luangruo@yahoo.com>
> Cc: crypto@timruffing.de,  stefankangas@gmail.com,  67810@debbugs.gnu.org
> Date: Fri, 12 Jan 2024 20:20:00 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > If we do introduce such a variable, wouldn't it prevent Emacs from
> > generating the missing variants?
> 
> On the contrary: if the generation of such variants by the font backend
> is inhibited, Emacs will display bold text with overstriking, when these
> variants are absent from the font itself.
> 
> I should clarify that "generation" refers to the automatic generation of
> oblique or bold fonts undertaken by a handful of our font backends, not
> the overstriking implemented in xfaces.c.

Then we are mis-communicating, I think: I was talking about the code
in xfaces.c to which you pointed up-thread:

> > Can you point me at the place in the code where we do this?
> 
> Yes, see lines 6192 and 6045 in xfaces.c, viz.:
> 
>   if (face->font
>       && FONT_WEIGHT_NAME_NUMERIC (attrs[LFACE_WEIGHT_INDEX]) > 100
>       && FONT_WEIGHT_NUMERIC (attrs[LFACE_FONT_INDEX]) <= 100)
>     face->overstrike = true;
> 
> and
> 
>   face->overstrike
>     = (! NILP (font_object)
>        && FONT_WEIGHT_NAME_NUMERIC (face->lface[LFACE_WEIGHT_INDEX]) > 100
>        && FONT_WEIGHT_NUMERIC (font_object) <= 100);

I ws suggesting to introduce a variable that would inhibit this.

> > And wouldn't avoiding to generate them do what the OP wanted,
> > i.e. have a default face's font where bold looks like regular?
> 
> No, see above.  However, the matter at hand is that I can't understand
> the deficiency OPs request is supposed to address.  Surely, if the
> author of a package which inserts icons wishes that they not be bold,
> the package should set the face by which they are displayed to one that
> isn't?

AFAIU, the OP's request was to allow to have a default font that lacks
the bold variant, so that the bold face attribute could be displayed
in some other way, or maybe not at all.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-12 12:30                                   ` Eli Zaretskii
@ 2024-01-12 13:12                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-12 14:12                                       ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-12 13:12 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: crypto, 67810, stefankangas

Eli Zaretskii <eliz@gnu.org> writes:

> AFAIU, the OP's request was to allow to have a default font that lacks
> the bold variant, so that the bold face attribute could be displayed
> in some other way, or maybe not at all.

I thought the OP's difficulties related to the rendering of icon fonts
without bold variants displayed in contexts where the bold attribute is
generally applied, which if true it can be removed, after which the
world's your lobster.  Though if disabling the bold attribute for the
default face is indeed what OP wanted, providing this option exclusively
for fonts without bold variants (that is, subject to overstriking) would
create a fairly glaring deficiency.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-12 13:12                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-12 14:12                                       ` Eli Zaretskii
  2024-01-13  0:46                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2024-01-12 14:12 UTC (permalink / raw)
  To: Po Lu; +Cc: crypto, 67810, stefankangas

> From: Po Lu <luangruo@yahoo.com>
> Cc: crypto@timruffing.de,  stefankangas@gmail.com,  67810@debbugs.gnu.org
> Date: Fri, 12 Jan 2024 21:12:40 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > AFAIU, the OP's request was to allow to have a default font that lacks
> > the bold variant, so that the bold face attribute could be displayed
> > in some other way, or maybe not at all.
> 
> I thought the OP's difficulties related to the rendering of icon fonts
> without bold variants displayed in contexts where the bold attribute is
> generally applied, which if true it can be removed, after which the
> world's your lobster.

Sorry, I don't understand what you are saying here.  Could you please
say it in simpler words?  What are "icon fonts"? and what do you mean
by "it can be removed"?

> Though if disabling the bold attribute for the default face is
> indeed what OP wanted, providing this option exclusively for fonts
> without bold variants (that is, subject to overstriking) would
> create a fairly glaring deficiency.

If we add such a variable, it will be opt-in behavior, so only users
who want it will get the behavior that you consider deficient.  It
will be then up to those users to decide whether the behavior is good
enough for them.  So I see no problem with such an option; we don't
have to like each and every optional behavior that is by default
turned off.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-12 14:12                                       ` Eli Zaretskii
@ 2024-01-13  0:46                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-13  6:59                                           ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-13  0:46 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: crypto, 67810, stefankangas

Eli Zaretskii <eliz@gnu.org> writes:

> Sorry, I don't understand what you are saying here.  Could you please
> say it in simpler words?  What are "icon fonts"? and what do you mean
> by "it can be removed"?

Fonts designed to provide symbol icons, which are inserted by packages
that can control the `face' property of the text inserted.  Such fonts
don't provide bold variants, and they did prompt this bug report.

> If we add such a variable, it will be opt-in behavior, so only users
> who want it will get the behavior that you consider deficient.  It
> will be then up to those users to decide whether the behavior is good
> enough for them.  So I see no problem with such an option; we don't
> have to like each and every optional behavior that is by default
> turned off.

What if a user wants to disable the `bold' attribute for a font _with_
a bold variant?





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-12  1:46                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-12  8:37                           ` Eli Zaretskii
@ 2024-01-13  6:37                           ` Stefan Kangas
  2024-01-14  0:55                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 1 reply; 46+ messages in thread
From: Stefan Kangas @ 2024-01-13  6:37 UTC (permalink / raw)
  To: Po Lu, Tim Ruffing; +Cc: Eli Zaretskii, 67810

Po Lu <luangruo@yahoo.com> writes:

> I suggest not using SVG icons for monochrome symbolic icons of the kind
> doom-modeline often displays.  Libraries rendering SVG are relatively
> memory-intensive and slow, while outline fonts are optimized for memory
> consumption and scaler speed.

I've displayed many hundreds of SVG icons in an Emacs buffer without
running into any issues.  I therefore find the above claim surprising.

If you have any evidence that this is a problem in practice, then let's
see it.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-13  0:46                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-13  6:59                                           ` Eli Zaretskii
  2024-01-14  1:02                                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-15 13:11                                             ` Tim Ruffing
  0 siblings, 2 replies; 46+ messages in thread
From: Eli Zaretskii @ 2024-01-13  6:59 UTC (permalink / raw)
  To: Po Lu; +Cc: crypto, 67810, stefankangas

> From: Po Lu <luangruo@yahoo.com>
> Cc: crypto@timruffing.de,  stefankangas@gmail.com,  67810@debbugs.gnu.org
> Date: Sat, 13 Jan 2024 08:46:28 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > Sorry, I don't understand what you are saying here.  Could you please
> > say it in simpler words?  What are "icon fonts"? and what do you mean
> > by "it can be removed"?
> 
> Fonts designed to provide symbol icons, which are inserted by packages
> that can control the `face' property of the text inserted.  Such fonts
> don't provide bold variants, and they did prompt this bug report.

So you are talking about fonts that use PUA codepoints to show icons?
Or are you talking about fonts whose glyphs for "normal" characters
(i.e. characters defined by the Unicode Standard) are replaced with
icons that look similarly?

> > If we add such a variable, it will be opt-in behavior, so only users
> > who want it will get the behavior that you consider deficient.  It
> > will be then up to those users to decide whether the behavior is good
> > enough for them.  So I see no problem with such an option; we don't
> > have to like each and every optional behavior that is by default
> > turned off.
> 
> What if a user wants to disable the `bold' attribute for a font _with_
> a bold variant?

That's not the feature I had in mind.  I don't see why Emacs should
allow users to disable font variants that do exist.  AFAIU, the
request was to prevent Emacs from creating a synthesized bold variant
if the font doesn't have it, and that's all.  How to find such a font
is a problem outside of Emacs's scope.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-13  6:37                           ` Stefan Kangas
@ 2024-01-14  0:55                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-14  5:23                               ` Stefan Kangas
  0 siblings, 1 reply; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-14  0:55 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: Tim Ruffing, Eli Zaretskii, 67810

Stefan Kangas <stefankangas@gmail.com> writes:

> I've displayed many hundreds of SVG icons in an Emacs buffer without
> running into any issues.  I therefore find the above claim surprising.
>
> If you have any evidence that this is a problem in practice, then let's
> see it.

It's easily demonstrable: open etc/images/splash.svg, zoom in and out
with the mouse wheel several times, and compare the image cache size in
M-x memory-report with the same after repeating the test with
etc/images/splash.xpm.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-13  6:59                                           ` Eli Zaretskii
@ 2024-01-14  1:02                                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-14  6:24                                               ` Eli Zaretskii
  2024-01-15 13:11                                             ` Tim Ruffing
  1 sibling, 1 reply; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-14  1:02 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: crypto, 67810, stefankangas

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Po Lu <luangruo@yahoo.com>
>> Cc: crypto@timruffing.de,  stefankangas@gmail.com,  67810@debbugs.gnu.org
>> Date: Sat, 13 Jan 2024 08:46:28 +0800
>> 
>> Eli Zaretskii <eliz@gnu.org> writes:
>> 
>> > Sorry, I don't understand what you are saying here.  Could you please
>> > say it in simpler words?  What are "icon fonts"? and what do you mean
>> > by "it can be removed"?
>> 
>> Fonts designed to provide symbol icons, which are inserted by packages
>> that can control the `face' property of the text inserted.  Such fonts
>> don't provide bold variants, and they did prompt this bug report.
>
> So you are talking about fonts that use PUA codepoints to show icons?
> Or are you talking about fonts whose glyphs for "normal" characters
> (i.e. characters defined by the Unicode Standard) are replaced with
> icons that look similarly?

The former, yes.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-14  0:55                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-14  5:23                               ` Stefan Kangas
  2024-01-14 10:20                                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 46+ messages in thread
From: Stefan Kangas @ 2024-01-14  5:23 UTC (permalink / raw)
  To: Po Lu; +Cc: Tim Ruffing, Eli Zaretskii, 67810

Po Lu <luangruo@yahoo.com> writes:

> Stefan Kangas <stefankangas@gmail.com> writes:
>
>> I've displayed many hundreds of SVG icons in an Emacs buffer without
>> running into any issues.  I therefore find the above claim surprising.
>>
>> If you have any evidence that this is a problem in practice, then let's
>> see it.
>
> It's easily demonstrable: open etc/images/splash.svg, zoom in and out
> with the mouse wheel several times, and compare the image cache size in
> M-x memory-report with the same after repeating the test with
> etc/images/splash.xpm.

I'll take your word for it.  Do you understand why this happens?

What can we do to improve the situation?





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-14  1:02                                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-14  6:24                                               ` Eli Zaretskii
  2024-01-14  8:09                                                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2024-01-14  6:24 UTC (permalink / raw)
  To: Po Lu; +Cc: crypto, 67810, stefankangas

> From: Po Lu <luangruo@yahoo.com>
> Cc: crypto@timruffing.de,  stefankangas@gmail.com,  67810@debbugs.gnu.org
> Date: Sun, 14 Jan 2024 09:02:17 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> From: Po Lu <luangruo@yahoo.com>
> >> Cc: crypto@timruffing.de,  stefankangas@gmail.com,  67810@debbugs.gnu.org
> >> Date: Sat, 13 Jan 2024 08:46:28 +0800
> >> 
> >> Eli Zaretskii <eliz@gnu.org> writes:
> >> 
> >> > Sorry, I don't understand what you are saying here.  Could you please
> >> > say it in simpler words?  What are "icon fonts"? and what do you mean
> >> > by "it can be removed"?
> >> 
> >> Fonts designed to provide symbol icons, which are inserted by packages
> >> that can control the `face' property of the text inserted.  Such fonts
> >> don't provide bold variants, and they did prompt this bug report.
> >
> > So you are talking about fonts that use PUA codepoints to show icons?
> > Or are you talking about fonts whose glyphs for "normal" characters
> > (i.e. characters defined by the Unicode Standard) are replaced with
> > icons that look similarly?
> 
> The former, yes.

OK, so what is the problem with allowing those users to have the
variable I proposed, for use with such fonts?





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-14  6:24                                               ` Eli Zaretskii
@ 2024-01-14  8:09                                                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-14  9:33                                                   ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-14  8:09 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: crypto, 67810, stefankangas

Eli Zaretskii <eliz@gnu.org> writes:

> OK, so what is the problem with allowing those users to have the
> variable I proposed, for use with such fonts?

Because packages using such fonts should display these icons with a face
that isn't bold?  I don't understand why we should provide an option for
code which requests bold text to display such text in a normal font...if
that makes any sense.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-14  8:09                                                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-14  9:33                                                   ` Eli Zaretskii
  2024-01-14 13:44                                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2024-01-14  9:33 UTC (permalink / raw)
  To: Po Lu; +Cc: crypto, 67810, stefankangas

> From: Po Lu <luangruo@yahoo.com>
> Cc: crypto@timruffing.de,  stefankangas@gmail.com,  67810@debbugs.gnu.org
> Date: Sun, 14 Jan 2024 16:09:10 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > OK, so what is the problem with allowing those users to have the
> > variable I proposed, for use with such fonts?
> 
> Because packages using such fonts should display these icons with a face
> that isn't bold?

There are faces that Emacs imposes that are not controlled by
packages.  For example, the buffer name on the mode line is displayed
in bold, and changing that is not easy.  Why cannot we allow users to
tweak this issue by providing a simple variable?  What are the
downsides?





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-14  5:23                               ` Stefan Kangas
@ 2024-01-14 10:20                                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-14 12:21                                   ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-14 10:20 UTC (permalink / raw)
  To: Stefan Kangas; +Cc: Tim Ruffing, Eli Zaretskii, 67810

Stefan Kangas <stefankangas@gmail.com> writes:

> I'll take your word for it.  Do you understand why this happens?

Each time an SVG image is loaded, a bitmap the size of the scaled image
is allocated and cached, then copied onto the frame whenever the SVG
must be displayed.  This bitmap is retained for 300 seconds, during
which any number of other bitmaps might be allocated, which eventually
come to occupy most available X server memory.

The same goes for other image formats in principle, but in practice SVG
images are the most susceptible to runaway memory consumption, since the
dimensions of the bitmap cached in the course of displaying an SVG image
match its dimensions on-screen, which can be quite the beast on dense
displays or when scale factors are enabled for related reasons.

> What can we do to improve the situation?

A shorter default image cache retention time, without question, and
perhaps better criteria for deciding when to flush it.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-14 10:20                                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-14 12:21                                   ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-14 14:10                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 46+ messages in thread
From: Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-14 12:21 UTC (permalink / raw)
  To: 67810; +Cc: luangruo, crypto, eliz, stefankangas

Po Lu via "Bug reports for GNU Emacs, the Swiss army knife of text
editors" <bug-gnu-emacs@gnu.org> writes:

> Stefan Kangas <stefankangas@gmail.com> writes:
>
>> I'll take your word for it.  Do you understand why this happens?
>
> Each time an SVG image is loaded, a bitmap the size of the scaled image
> is allocated and cached, then copied onto the frame whenever the SVG
> must be displayed.  This bitmap is retained for 300 seconds, during
> which any number of other bitmaps might be allocated, which eventually
> come to occupy most available X server memory.
>
> The same goes for other image formats in principle, but in practice SVG
> images are the most susceptible to runaway memory consumption, since the
> dimensions of the bitmap cached in the course of displaying an SVG image
> match its dimensions on-screen, which can be quite the beast on dense
> displays or when scale factors are enabled for related reasons.
>
>> What can we do to improve the situation?
>
> A shorter default image cache retention time, without question, and
> perhaps better criteria for deciding when to flush it.

Yes.  As Eli explained to me in bug#68006 (correct me if I'm wrong), the
image cache was designed to work with the display engine (for icons and
toolbars).  For other usage, like image-mode for instance, we might need
something else.
-- 
Manuel Giraud





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-14  9:33                                                   ` Eli Zaretskii
@ 2024-01-14 13:44                                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-14 14:03                                                       ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-14 13:44 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: crypto, 67810, stefankangas

Eli Zaretskii <eliz@gnu.org> writes:

> There are faces that Emacs imposes that are not controlled by
> packages.  For example, the buffer name on the mode line is displayed
> in bold, and changing that is not easy.  Why cannot we allow users to
> tweak this issue by providing a simple variable?  What are the
> downsides?

It can't be guaranteed that this variable will work, because Emacs is
not the only program synthesizing bold variants from fonts that don't
incorporate them.  Moreover, little-used options that control these very
particular aspects of our font display tend to fall into disrepair: for
instance, Vvertical_centering_font_regexp didn't function on any system
besides X, until yours truly implemented it for Android, a state of
affairs that remained unnoticed for upwards of a decade.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-14 13:44                                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-14 14:03                                                       ` Eli Zaretskii
  2024-01-14 14:19                                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 46+ messages in thread
From: Eli Zaretskii @ 2024-01-14 14:03 UTC (permalink / raw)
  To: Po Lu; +Cc: crypto, 67810, stefankangas

> From: Po Lu <luangruo@yahoo.com>
> Cc: crypto@timruffing.de,  stefankangas@gmail.com,  67810@debbugs.gnu.org
> Date: Sun, 14 Jan 2024 21:44:53 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > There are faces that Emacs imposes that are not controlled by
> > packages.  For example, the buffer name on the mode line is displayed
> > in bold, and changing that is not easy.  Why cannot we allow users to
> > tweak this issue by providing a simple variable?  What are the
> > downsides?
> 
> It can't be guaranteed that this variable will work, because Emacs is
> not the only program synthesizing bold variants from fonts that don't
> incorporate them.  Moreover, little-used options that control these very
> particular aspects of our font display tend to fall into disrepair: for
> instance, Vvertical_centering_font_regexp didn't function on any system
> besides X, until yours truly implemented it for Android, a state of
> affairs that remained unnoticed for upwards of a decade.

I still don't understand what would be the downside of giving users
such a knob.  The worst that can happen is that this knob will
sometimes not work.  So what?

I say let's introduce it and let users who want to use it cope with
the results.  All it takes is a new DRFVAR and a single 'if'.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-14 12:21                                   ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-14 14:10                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-14 16:37                                       ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-14 14:10 UTC (permalink / raw)
  To: Manuel Giraud; +Cc: Tim Ruffing, Eli Zaretskii, 67810, Stefan Kangas

Manuel Giraud <manuel@ledu-giraud.fr> writes:

> Yes.  As Eli explained to me in bug#68006 (correct me if I'm wrong), the
> image cache was designed to work with the display engine (for icons and
> toolbars).  For other usage, like image-mode for instance, we might need
> something else.

I understand you haven't made reference to the provisions for
user-specified image caches that you have proposed in that thread, but
it's still relevant that although such provisions will work in
image-mode's favor, they cannot resolve the memory consumption problems
inherent in the practice of caching scaled SVG images in the first
place.

Or on the flip side, performance degradation incurred by calling into
SVG for many dozens of small icons, which are removed from the image
cache after the eviction delay elapses without regard to their size or
the frequency at which they are invoked.

Worse yet, the display connection is cut when the image cache consumes
all bitmap memory allotted by the X server to Emacs.  This generates an
asynchronous Alloc error that Emacs is not in a position to detect until
it next returns to the event loop.

With the size of images as they exist today, and the density of the
devices on which they are displayed, I think that caching complete
images for N number of seconds has become an outmoded solution for not
loading images redundantly.  It's unpleasant for increasing
doc-view-resolution to force you to hold your breath before typing "n"
in a DocView buffer, out of a sense of apprehension that the subsequent
page might be sufficiently large to trigger such an error.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-14 14:03                                                       ` Eli Zaretskii
@ 2024-01-14 14:19                                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-14 14:55                                                           ` Eli Zaretskii
  0 siblings, 1 reply; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-14 14:19 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: crypto, 67810, stefankangas

Eli Zaretskii <eliz@gnu.org> writes:

> I still don't understand what would be the downside of giving users
> such a knob.  The worst that can happen is that this knob will
> sometimes not work.  So what?

I thought we didn't want options that only work once in a blue moon, and
that only when Jupiter is aligned with the Galactic Center, or something
similarly rare, such as using the X core font backend.

> I say let's introduce it and let users who want to use it cope with
> the results.  All it takes is a new DRFVAR and a single 'if'.

I've expressed my objections, but if you're fine with the said
shortcomings, then I won't press the matter.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-14 14:19                                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-14 14:55                                                           ` Eli Zaretskii
  0 siblings, 0 replies; 46+ messages in thread
From: Eli Zaretskii @ 2024-01-14 14:55 UTC (permalink / raw)
  To: Po Lu; +Cc: crypto, 67810, stefankangas

> From: Po Lu <luangruo@yahoo.com>
> Cc: crypto@timruffing.de,  stefankangas@gmail.com,  67810@debbugs.gnu.org
> Date: Sun, 14 Jan 2024 22:19:57 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > I still don't understand what would be the downside of giving users
> > such a knob.  The worst that can happen is that this knob will
> > sometimes not work.  So what?
> 
> I thought we didn't want options that only work once in a blue moon, and
> that only when Jupiter is aligned with the Galactic Center, or something
> similarly rare, such as using the X core font backend.

We don't know what is the fraction of cases that this will work.  We
do know that sometimes it won't, but it could be "good enough".

> > I say let's introduce it and let users who want to use it cope with
> > the results.  All it takes is a new DRFVAR and a single 'if'.
> 
> I've expressed my objections, but if you're fine with the said
> shortcomings, then I won't press the matter.

I think we should provider such a variable, yes.  As long as it
doesn't require any further maintenance, I don't see any downsides.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-14 14:10                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-14 16:37                                       ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-15  0:36                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 46+ messages in thread
From: Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-14 16:37 UTC (permalink / raw)
  To: Po Lu; +Cc: Tim Ruffing, Eli Zaretskii, 67810, Stefan Kangas

Po Lu <luangruo@yahoo.com> writes:

> Manuel Giraud <manuel@ledu-giraud.fr> writes:
>
>> Yes.  As Eli explained to me in bug#68006 (correct me if I'm wrong), the
>> image cache was designed to work with the display engine (for icons and
>> toolbars).  For other usage, like image-mode for instance, we might need
>> something else.
>
> I understand you haven't made reference to the provisions for
> user-specified image caches that you have proposed in that thread, but
> it's still relevant that although such provisions will work in
> image-mode's favor, they cannot resolve the memory consumption problems
> inherent in the practice of caching scaled SVG images in the first
> place.

Yes scaled SVG tend to take much space but in the example you gave (zoom
in and out of a SVG in image-mode), I think it has more to do with the
cache not being adapted for such usage: the fact that an image spec
contains its size and is retain for 300 seconds by default (as you
said).

> Or on the flip side, performance degradation incurred by calling into
> SVG for many dozens of small icons, which are removed from the image
> cache after the eviction delay elapses without regard to their size or
> the frequency at which they are invoked.

Ok but is there such usage of SVG icons into Emacs?  If there is it
would require a much more smarter cache or, even better, a fast
rasterizer.

> Worse yet, the display connection is cut when the image cache consumes
> all bitmap memory allotted by the X server to Emacs.  This generates an
> asynchronous Alloc error that Emacs is not in a position to detect until
> it next returns to the event loop.
>
> With the size of images as they exist today, and the density of the
> devices on which they are displayed, I think that caching complete
> images for N number of seconds has become an outmoded solution for not
> loading images redundantly.  It's unpleasant for increasing
> doc-view-resolution to force you to hold your breath before typing "n"
> in a DocView buffer, out of a sense of apprehension that the subsequent
> page might be sufficiently large to trigger such an error.

I've never hit this case but I don't have a high density display.  Is it
something that happen to you regularly?
-- 
Manuel Giraud





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-14 16:37                                       ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-15  0:36                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-15 13:56                                           ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-15  0:36 UTC (permalink / raw)
  To: Manuel Giraud; +Cc: Tim Ruffing, Eli Zaretskii, 67810, Stefan Kangas

Manuel Giraud <manuel@ledu-giraud.fr> writes:

> Yes scaled SVG tend to take much space but in the example you gave (zoom
> in and out of a SVG in image-mode), I think it has more to do with the
> cache not being adapted for such usage: the fact that an image spec
> contains its size and is retain for 300 seconds by default (as you
> said).

The format of the keys used by the image cache is not at fault here,
since cached copies of SVG images must match their display sizes
regardless of whether the image cache is sensitive to sizes in image
specs specifying other image types.

> Ok but is there such usage of SVG icons into Emacs?  If there is it
> would require a much more smarter cache or, even better, a fast
> rasterizer.

Not as yet, but it's being proposed.

> I've never hit this case but I don't have a high density display.  Is it
> something that happen to you regularly?

It was until I reset doc-view-resolution to 100.





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-13  6:59                                           ` Eli Zaretskii
  2024-01-14  1:02                                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-15 13:11                                             ` Tim Ruffing
  1 sibling, 0 replies; 46+ messages in thread
From: Tim Ruffing @ 2024-01-15 13:11 UTC (permalink / raw)
  To: Eli Zaretskii, Po Lu; +Cc: 67810, stefankangas

On Sat, 2024-01-13 at 08:59 +0200, Eli Zaretskii wrote:
> > > 

> > What if a user wants to disable the `bold' attribute for a font
> > _with_
> > a bold variant?
> > 
> > That's not the feature I had in mind.  I don't see why Emacs should
> > allow users to disable font variants that do exist.  AFAIU, the
> > request was to prevent Emacs from creating a synthesized bold
> > variant
> > if the font doesn't have it, and that's all.  
> > 

Indeed.

@Po: And I totally agree that emacs packages who use icons from symbol
fonts should not set bold in the `face' property. However, as I said
earlier in this thread, I claim that this solves 90% of the cases, but
not all of them: Users may just want to insert icons in parts of their
files with bold font-lock, e.g., headings in org files or markdown
files (say you want to add a light-bulb icon in your notes for
"ideas"). In this case, while org-mode or markdown-mode (or actually
font-lock-mode) sets the bold face, these modes are not the ones that
insert the icon, so they shouldn't be responsible for setting regular
weight on icons. 

I claim that's a valid use case. Of course, one can totally object that
one should use SVGs, or that all of this is too niche so we shouldn't
care about this, and that even a boolean option is not worth the
complexity. And those are fine arguments, and after some more digging,
I'm also not sure anymore...  

Po wrote:
> > > Would it make sense to introduce a variable that disables
> > synthesizing
> > > bold or oblique font variants?
> > 
> > I think it won't until someone informs us of how those features
> > might
> > be
> > disabled in the font drivers that perform this.  The Mac driver is
> > definitely one of them, and possibly the Fontconfig driver as well.


In fact, now I thought a bit more about this, I agree with your
objections to having a simple knob that just disables overstriking in
xfaces.c... Yes, this would help some users, and it's easy to maintain,
but I suspect the behavior will be equally confusing to the current
one. (Think about a candidate docstring: "Inhibits the creation of
synthetic bold faces. This does not have an effect when the creation of
synthetic bolds is done by emacs font drivers, e.g., this variable has
no effect on Mac"... That is probably hard to understand for the
average user, and also it's simply not a solution for Mac users.)

I think you're right: If we want to add a boolean option, then it
should probably should cover all instances where emacs creates
synthetic bold fonts, i.e., not just the catch-all/fallback
overstriking in xfaces.c but also the synthetic bolds in the various
font drivers. (And the option should perhaps cover synthetic italics as
well, not sure. Or there could be a second option...) 

Yeah, then it's indeed more complex than a DEFSYM and two ifs. Though I
believe the complexity will still be manageable and also I don't think
we'll get bitten by this in the future: If this is an "inhibit"-style
option, the only risk is that we'll ever have font driver in the future
that creates synthetic bolds unconditionally.  

I had a look at the mentioned drivers.

For the MacOs driver, the property is set here in macfont.m, see uses
of synthetic_bold_p for the actual drawing. 

  if (!(sym_traits & kCTFontTraitBold)
      && FONT_WEIGHT_NUMERIC (entity) == FONT_WEIGHT_SYNTHETIC_BOLD)
    macfont_info->synthetic_bold_p = 1;

For Fontconfig / FT, "git grep -i embolden src" will point you to some
relevant code locations, but my digging shows that this driver will
never create synthetic bolds on demand. [1] 

So it's probably only overstriking and the font driver for MacOS that
would be affected by an option. 

Anyway, if people agree that an option should cover all drivers, the
patch is >5 lines and someone will need to work on it. I may have a
look in the future, but I currently don't have the time to work on it
(and I don't have a Mac, so someone else would need to test it.)  

Tim


[1] Okay, and this is where it's a bit of mess. 

While the code in the fontconfig driver doesn't have logic for creating
an synthetic bold variant when we want to display bold text, it
supports the "embolden" attribute that the user could set in their
config, at least kind of: If I set this in my local.conf for
fontconfig, then suddenly all fonts in all applications are synthetic
bolds, and emacs respects this, too.

<match target="font">
    <edit name="embolden" mode="assign">
      <bool>true</bool>
    </edit>
</match>

Of course, this is usually not meaningful. fontconfig ships with a
config file that is actually meaningful and enables synthetic bold
fonts when necessary, i.e., when no bold variant exists:

<match target="font">
    <!-- check to see if the weight in the font is less than medium
which possibly need emboldening -->
    <test name="weight" compare="less_eq">
        <const>medium</const>
    </test>
    <!-- check to see if the pattern requests bold -->
    <test target="pattern" name="weight" compare="more_eq">
        <const>bold</const>
    </test>
    <!--
      set the embolden flag
      needed for applications using cairo, e.g. gucharmap, gedit, ...
    -->
    <edit name="embolden" mode="assign">
        <bool>true</bool>
    </edit>
    <!--
     set weight to bold
     needed for applications using Xft directly, e.g. Firefox, ...
    -->
    <edit name="weight" mode="assign">
        <const>bold</const>
    </edit>
</match>

See the file 90-synthetic.conf, probably to be found in
/etc/fonts/conf.d .  But THAT setting one doesn't work in emacs. 

The reason is that fontconfig works in two steps:
1. build a database of fonts
2. let applications query the database with pattern matching

The second snippet above is supposed to have an effect in step 2. It
basically says "if the application queries for bold, and we don't have
native bold, set the embolden attribute in the query result".

But here's the thing: emacs will simply never ask for bold. What emacs
does is to ask fontconfig for the database resulting from step 1, and
the database doesn't have the bold font because it doesn't exist. So
emacs will learn that this is a font with weight "regular", and then
emacs will forever believe that the font is regular, and just simply
never query for a bold variant of it in step 2. This is just a
consequence of trying to fit fontconfig into the font driver model of
emacs. They use different concepts, and unless throw away all the emacs
font code, it just won't be possible to make fontconfig as in other
applications .

(See my message #47 in this thread for a way to get around this in
certain cases. One can set <match target="scan" ...> and this then will
influence step 1 and thus the database itself. But this is rather crude
and won't make the 90-synthetic.conf "on-demand" synthetic bold work:
We really need to compare the query pattern with the actual font to
determine whether embolden should be set. I said above that this is
also  https://debbugs.gnu.org/cgi/bugreport.cgi?bug=25147 and
 https://debbugs.gnu.org/cgi/bugreport.cgi?bug=17792 , but now I
believe that this these were mostly fixed in
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=35781 already...)

The driver could, of course, set the embolden property automatically if
there's no native bold variant, and this would probably give a nicer
rendering than overstriking. Perhaps the driver should do this.








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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-15  0:36                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-15 13:56                                           ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2024-01-15 14:02                                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 46+ messages in thread
From: Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-15 13:56 UTC (permalink / raw)
  To: Po Lu; +Cc: Tim Ruffing, Eli Zaretskii, 67810, Stefan Kangas

Po Lu <luangruo@yahoo.com> writes:

[...]

>> Ok but is there such usage of SVG icons into Emacs?  If there is it
>> would require a much more smarter cache or, even better, a fast
>> rasterizer.
>
> Not as yet, but it's being proposed.

You mean that you're working on a new SVG rasterizer?  If so, great!

>> I've never hit this case but I don't have a high density display.  Is it
>> something that happen to you regularly?
>
> It was until I reset doc-view-resolution to 100.

I don't know about your setup but if you use mupdf as a converter it
could convert documents to SVG image (see 'doc-view-mupdf-use-svg').

AFAIU, in this case the 'doc-view-resolution' is not used anymore…  But,
yes, zooming in and out will result in big rasterized version in the
image cache.
-- 
Manuel Giraud





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

* bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk
  2024-01-15 13:56                                           ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-01-15 14:02                                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 0 replies; 46+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-15 14:02 UTC (permalink / raw)
  To: Manuel Giraud; +Cc: Tim Ruffing, Eli Zaretskii, 67810, Stefan Kangas

Manuel Giraud <manuel@ledu-giraud.fr> writes:

> Po Lu <luangruo@yahoo.com> writes:
>
> [...]
>
>>> Ok but is there such usage of SVG icons into Emacs?  If there is it
>>> would require a much more smarter cache or, even better, a fast
>>> rasterizer.
>>
>> Not as yet, but it's being proposed.
>
> You mean that you're working on a new SVG rasterizer?  If so, great!

Alas, no.  I was referring to increasing the number of SVG icons loaded
by Emacs.

> I don't know about your setup but if you use mupdf as a converter it
> could convert documents to SVG image (see 'doc-view-mupdf-use-svg').

Thanks.  I will see if it is possible to install mupdf here.





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

end of thread, other threads:[~2024-01-15 14:02 UTC | newest]

Thread overview: 46+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-13 12:03 bug#67810: 29.1; fonts use synthetic bold on Linux / pgtk Tim Ruffing
2023-12-13 12:39 ` Eli Zaretskii
2023-12-13 13:28   ` Tim Ruffing
2023-12-13 13:39     ` Eli Zaretskii
2023-12-13 15:09       ` Tim Ruffing
2023-12-13 15:43         ` Tim Ruffing
2023-12-14  0:09         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-12-14  7:28           ` Eli Zaretskii
2023-12-14  9:32             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-12-14  9:54             ` Tim Ruffing
2023-12-14 10:04               ` Eli Zaretskii
2023-12-14 10:37                 ` Tim Ruffing
2023-12-14 11:19                   ` Eli Zaretskii
2023-12-14 11:26                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-12-14 15:06                   ` Tim Ruffing
2023-12-14 22:55                     ` Stefan Kangas
2024-01-11 15:50                       ` Tim Ruffing
2024-01-12  1:46                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-12  8:37                           ` Eli Zaretskii
2024-01-12  9:59                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-12 11:46                               ` Eli Zaretskii
2024-01-12 12:20                                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-12 12:30                                   ` Eli Zaretskii
2024-01-12 13:12                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-12 14:12                                       ` Eli Zaretskii
2024-01-13  0:46                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-13  6:59                                           ` Eli Zaretskii
2024-01-14  1:02                                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-14  6:24                                               ` Eli Zaretskii
2024-01-14  8:09                                                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-14  9:33                                                   ` Eli Zaretskii
2024-01-14 13:44                                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-14 14:03                                                       ` Eli Zaretskii
2024-01-14 14:19                                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-14 14:55                                                           ` Eli Zaretskii
2024-01-15 13:11                                             ` Tim Ruffing
2024-01-13  6:37                           ` Stefan Kangas
2024-01-14  0:55                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-14  5:23                               ` Stefan Kangas
2024-01-14 10:20                                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-14 12:21                                   ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-14 14:10                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-14 16:37                                       ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-15  0:36                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-15 13:56                                           ` Manuel Giraud via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-15 14:02                                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors

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