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

From: Dmitry Alexandrov <[email-masked]>
Date: Sat, 17 Dec 2016 12:33:01 +0300

>> Steps to reproduce:
>> 
>>    $ emacs --quick --font '-*-terminus-medium-r-*-*-20-*-*-*-*-*-*-*'
>> 
>> Find some document with curly quotes: ‘’ and “”.  GNU Emacs Manual (‘<f1> r’) uses them heavily, for instance.
>> 
>> It looks wrong:
>
> What is wrong with how it looks?

That’s apparently another font.

> Info mode uses several fonts anyway,

‘GNU Emacs Manual’ was a mere example of an easy accessible page that uses that symbols.  And the quotes are not the only problematic glyphs, just the most notable ones.  Now I noticed the same issue with arrows: ↑ ← ↓ and →, I guess there are others.

> so seeing a different font used for quotes shouldn't be a disaster.
>
>> ‘C-u C-x =’ says that instead of Terminus
>> ‘x:-misc-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1’ font
>> is used for rendering quotes. When I request 24th size, I got yet
>> another font —
>> ‘x:-efont-fixed-medium-r-normal--24-240-75-75-c-240-iso10646-1’.
>> 
>> In a strange way there is no such a problem with some other sizes:
>> 
>>    $ emacs --quick --font '-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*'
>> 
>> is okay, for example. ‘C-u C-x =’ says that
>> ‘xft:-xos4-Terminus-normal-normal-normal-*-16-*-*-*-c-80-iso10646-1’
>> is used in that case.
>
> Emacs 25 should prefer the default font for symbol and punctuation
> characters, as long as the default font supports them.  So I don't
> understand why you see these character displayed using another
> if the default one has the corresponding glyphs.
>
>> The reason is *not* that Terminus just does not have these glyphs —
>> it does. Moreover — GNU Emacs 24.4.1 finds and renders them
>> correctly:
>
> Emacs 25 has different settings of the default fontset, see
> fontset.el.

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.

[0] https://lists.gnu.org/archive/html/emacs-diffs/2015-06/msg00150.html

> It instructs Emacs to use fixed-medium fonts for symbols
> and punctuation characters that are absent from the default font.
> Emacs 24 didn't have those settings.

> I think you should be able to force Emacs to use your font for these
> characters by using set-fontset-font for the range of codepoints you
> want to be displayed by the Terminus font.

Yes, indeed.  Many thanks.

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

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?

> Of course, if you or someone can explain why Emacs doesn't use the
> default font, as it should have, for these characters, that would be
> even better, since we might then be able to fix the problem without
> any need for user customizations.
>
> One idea I have is that the way you specify the font on the Emacs
> command line doesn't specify a registry.  Did you try using iso10646-1
> as the registry?

I’ve just tried — no effect.