Subject: Re: bug#52905: 29.0.50; "fixed-pitch" face doesn't respect the font in "default-frame-alist"

From: Eli Zaretskii <[email-masked]>
Date: Fri, 31 Dec 2021 09:26:44 +0200

> From: Dima Kogan <[email-masked]>
> Date: Thu, 30 Dec 2021 12:17:44 -0800
> 
> In the last few months I've been observing some font handling updates in
> emacs that cause an inconsistency with the way things are displayed. As
> suggested by the emacs documentation, I set the font I want by touching
> default-frame-alist. The docs are here:
> 
>   https://www.gnu.org/software/emacs/manual/html_node/emacs/Fonts.html
> 
> I've had this setting in my .emacs for many years. Today this isn't
> respected everywhere. A recipe:
> 
>   emacs -Q --eval \
>   "(progn
>      (setf (alist-get 'font default-frame-alist)
>        \"-adobe-courier-medium-r-*-*-14-*-*-*-*-*-iso8859-*\")
>    (org-mode)
>    (insert \"abc\\n#+begin_\"))"
> 
> Here I start up emacs without .emacs, but with some default-frame-alist
> setting. I enter org-mode and insert some text.
> 
> Invoking C-u C-x = on any of "abc" tells me that no particular face is
> active there, and that my default font is being used.
> 
> Invoking C-u C-x = on any of "#+begin_" tells me that the org-meta-line
> face is active there. This face ultimately derives from the fixed-pitch
> face, which uses a different monospace font: ftcrhb:-Bits-Bitstream Vera
> Sans Mono-regular-normal-normal-*-14-*-*-*-m-0-iso10646-1.
> 
> But I already selected a monospaced font in default-frame-alist, so I
> expect to get the same font here, which was the case for many years. The
> fixed-pitch face is defined like this in faces.el:
> 
>   (defface fixed-pitch
>     '((t :family "Monospace"))
>     "The basic fixed-pitch face."
>     :group 'basic-faces)
> 
> I can "fix" this by resetting the fixed-pitch face to use the default:
> 
>   (defface fixed-pitch
>     '((t))
>     "The basic fixed-pitch face."
>     :group 'basic-faces)
> 
> 
> So is this a "bug"? Is this a documentation problem? Setting the default
> font to a monospace font, as described by the emacs docs should end up
> being picked up by the fixed-pitch face.

You seem to assume that the default face's font is also the font
used by the fixed-pitch face?  There's no basis for this assumption:
as long as a face defines :font or :family attributes, the font for
that face is selected independently.  The "Monospace" family
doesn't stand for "the monospace font selected fro thedefault face",
it stands for some font that belongs to the "Monospace" family.  What
exactly does that family include depends on your font back-end and the
fonts installed on your system, but Vera Sans Mono doesn't sound like
it shouldn't be in that family, it sounds right to me.

So, given the data you presented, I don't yet see any bug, but a
well-documented and expected behavior.  If you want the same font for
the fixed-pitch face, you should customize that face as well, e.g. by
using set-face-attribute, to set its font attribute, or by using
set-face-font directly.