Subject: bug#42603: EWW shows chars > #xFF with font set by "set-fontset-font"

From: Eli Zaretskii <[email-masked]>
Date: Fri, 31 Jul 2020 15:43:49 +0300

> From: Sebastian Urban <[email-masked]>
> Cc: [email-masked]
> Date: Fri, 31 Jul 2020 14:01:49 +0200
> 
> >> 2. M-: (set-fontset-font t 'unicode "Times New Roman")
> >
> > This setting makes no sense: no single font can cover all of Unicode,
> > so you should never do that.
> >
> > Why did you think you needed to do it in your case?
> 
> My use case is not related to EWW, but to fonts overall.  I use it to
> "prevent" Emacs from searching for fonts, and to display codes of
> characters instead of glyphs, to speed up loading text in situations
> like in case of view-hello-file.

In that case, you should indeed use set-fontset-font, but instead of
telling Emacs that each of the fonts covers all of the Unicode, you
should tell Emacs which ranges of characters, or which scripts, should
be rendered by what fonts.

>     (set-fontset-font "fontset-default" 'unicode "Consolas")
>     (set-fontset-font "fontset-default" 'unicode "Symbola" nil 'append)

Instead of using 'unicode' in the above 2 lines, use either symbols of
scripts you want to render with each font, or explicit ranges of
character codepoints.  The node "Modifying Fontsets" in the Emacs user
manual and the node "Fontsets" in the ELisp manual have examples of
how to do that.

> When I type C-u C-x = on any of above letters, it says:
>     There are text properties here:
>       face                 variable-pitch
> and the variable-pitch says Arial, but it's not Arial.

You countermanded that with you over-optimistic set-fontset-font
setting, I think.

> I DON'T want to change whole text to TNR, or any other font, with this
> command, quite the opposite, I don't want IT to change chars above
> 256, in EWW buffer that uses variable-pitch font, which is Arial.

Then why did you use this:

  (set-fontset-font t 'unicode "Times New Roman")

?  It tells Emacs the opposite: to use Times New Roman for _any_
character (because the 'unicode' script spans all the characters you
can possibly have).