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

From: Dima Kogan <[email-masked]>
Date: Thu, 30 Dec 2021 12:17:44 -0800

Hi. I'm running a very recent emacs snapshot from 2021/12/19:
0bc2900bbcb. I'm on Debian GNU/Linux, using the GTK-based build on X.

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.

Thanks!