Subject: bug#17532: 24.4.50; Options > `set-frame-font' does not work as documented

From: Drew Adams <[email-masked]>
Date: Tue, 20 May 2014 14:00:36 -0700 (PDT)

> Then this is expected behavior: selecting a new font from that menu
> only changes the font for the existing frames, not for the future
> ones.

That's not what the *doc* says.  You don't see that stated anywhere,
do you?

And why should that be the case?  And what happens when you "save this
for future sessions" (node Fonts)?  What good could it do, and what
meaning could it have, to save something that is only for existing
frames (not new frames) in this session?

> > > > The newly displayed buffer's font is not the font you chose using Set
> > > > Default Font.
> > >
> > > I cannot reproduce this with today's trunk: I get the same font as the
> > > one I've chosen from the menu using Set Default Font.
> >
> > I don't. I get the one that I set in `default-frame-alist'.
> 
> As expected.

By you.  Not by what the doc says.

> I think that's what you asked for, by that "-3-" part in the font
> spec.  That's way too small.

Ah yes, that was a "copy-paste" problem.  I meant to use 13, not 3.

The main point about that remains: the font is the one from
`default-frame-alist', not from `Set Default Font'.

> > Anyway, when you use menu item `Set Default Font', it invokes `menu-set-font',
> > which calls `set-frame-font' *non-interactively*, and with `t' as the
> > value for FRAMES.
> 
> But that doesn't cover future frames, either.  It only affects the
> existing GUI frames, per the doc string (and the code, which see).
                       ^^^^^^^^^^^^^^^^^^

Where are you getting this?  `C-h f set-frame-font' says clearly:

   Also, if FRAME is non-nil, alter the user's Customization settings as
   though the font-related attributes of the `default' face had been
   "set in this session", so that the font is applied to future frames.

One of us seems to be sorely missing something. ;-)

(That's a typo, BTW: FRAME here should be FRAMES.)

> > In addition, the doc string for `menu-set-font' says that it makes the
> > font you choose "the default".  It does NOT at all suggest that it changes
> > the font only for the current frame.  Similarly, the menu item itself speaks
> > of "Default".
> 
> "Default font" means the font of the default face, that's all.  Yes,
> that's ambiguous.

A face, including face `default', is not something that is frame-specific.
The doc string of `set-frame-font' clearly mentions face `default'.  This
can only mean that it changes the value of face `default', which if it were
really what happens, would affect also all future frames in the session.

> > > > Note that the doc here includes (emacs) `Fonts'.
> > >
> > > That doesn't seem to imply the font is changed on all frames, either.
> >
> > It says that when you use `Set Default Font' you are changing a user
> > option (although it doesn't tell you which one!).  It suggests that this
> > is for the session generally (it says that for the setting to work also
> > for future sessions you need to save it).
> 
> I don't see how you deduce that.  The text is very simple:
> 
>      * Click on `Set Default Font' in the `Options' menu.  To save this
>        for future sessions, click on `Save Options' in the `Options' menu.
> 
> Unless you are saying that saving the options doesn't make this font
> the default in future sessions, I see nothing wrong or misleading with
> this text (except that the default font is not 12-point, not for many
> years; I will fix that).

See above.  This menu item, in menu **`Options'**, clearly suggests that
you are changing the value (for the session) of a user option.  And that
doc says that you can save this option setting for future sessions.

And when you change the value of a user option (or face) that controls
a default font it affects future frames - whether that be option
`default-frame-alist' or face `default' (or option `special-display-alist'
or `minibuffer-frame-alist'... for such frames.)
 
> > It likens the behavior of `Set Default Font' to modifying `default-frame-
> > alist'.
> 
> No, it doesn't mention default-frame-alist at all.

It most certainly does - the very next bullet!  These bullets are
introduced collectively as "several different ways to specify a different
font".  Different ways to do essentially the same thing.

And they *do* - at least the others do.  They specify the font to use for
the (remainder of) the session.  That includes for all new frames.

I see nothing in the doc that suggests that `Set Default Font' should
be exceptional in this regard, changing the font for only the existing
frames.  You say that, but I see nothing in the doc that supports such
a view.