Subject: bug#25216: 26.0.50 [regression]; Curly quotes are not found in some sizes of ‘Terminus’ font

From: Eli Zaretskii <[email-masked]>
Date: Mon, 19 Dec 2016 05:42:59 +0200

> From: Dmitry Alexandrov <[email-masked]>
> Cc: [email-masked]
> Date: Mon, 19 Dec 2016 06:17:57 +0300
> 
> > It doesn't surprise me.  What I don't understand is why this happens.
> > Emacs explicitly tests the default font for supporting any symbol or
> > punctuation character it needs to display, before it looks for another
> > font.  See the function face_for_char in fontset.c.
> >
> >> Aha!  Thanks.  The exact problematic commit is ‘2276a19d’ [0].
> >> 
> >> By the way, how could I prove that without rebuilding the whole Emacs?  I tried:
> >> 
> >>    $ git show 2276a19^:lisp/international/fontset.el > /tmp/lisp/fontset.el
> >>    $ emacs --directory /tmp/lisp --quick --font '-*-terminus-medium-r-*-*-20-*-*-*-*-*-*-*'
> >> 
> >> Despite that:
> >> 
> >>    (locate-library "fontset")
> >>         ⇒ "/tmp/lisp/fontset.el"
> >> 
> >> I did not see any effect.
> >
> > You must rebuild Emacs or manually load fontset.el after changing it.
> > fontset.el is preloaded when Emacs is built.
> 
> So I need to use ‘temacs’?  Yes, that works, thank you.

If you want to rebuild Emacs, then yes, you will need to run the
command which dumps it after changing fontset.el.

> >> However, It might be even better if I could erase that rule, as if
> >> there were no lines about that range in ‘fontsel.el’. Is it
> >> possible?
> >
> > That would adversely affect all the users.  We arrived at that rule
> > after many complaints that symbol and punctuation characters are not
> > displayed at all, or displayed using variable-pitch fonts, so we made
> > the default fontset "smarter" about that by using fonts people
> > generally have installed and which are the default fonts in Emacs.
> 
> Well, I’m the only user on most my machines, so that’s probably bearable.

No, I meant all the users of Emacs, world wide.

> However, we apparently misunderstood each other — I did not ask how to patch ‘fontsel.el’ machine-wide (I hope, I do understand how to do that).  I meant, is it possible to remove elements from the default fontset *user-wide*?  ‘Terminus’ is not the only font I use, so that would be cleaner than appending it there.

You don't need (and cannot, AFAIK) to remove that.  What you need is
to prepend your rules, which will override what's there.  Like this:

 (set-fontset-font "fontset-default" '(#x2000 . #x2067) "Terminus" 'prepend)

Note the "prepend" part.