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

From: Drew Adams <[email-masked]>
Date: Tue, 20 May 2014 10:49:13 -0700 (PDT)

> > emacs -Q
> >
> > M-: (setq default-frame-alist '
> >  ((font . "-outline-Lucida
> >  Console-normal-normal-normal-mono-3-*-*-*-c-*-iso8859-1")))
> >
> > or some other font that is different from the default emacs -Q font.
> >
> > Choose menu item Options > Set Default Font..., and choose yet another
> > font.
> >
> > C-x 4 d RET ; or another command to display another buffer

I should have said:

C-x 5 d RET ; or another command to display another buffer in a new frame
    ^                                                      ^^^^^^^^^^^^^^

You can also try C-x 5 b *Messages*, for instance, to see *Messages* in a new frame.

This is about `default-frame-alist', as it applies to a new frame.

> > 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'.
Except that the size is shrunk *way* down, for some reason (another bug,
presumably).

In the original frame, the font is the one I picked using `Set Default Font'.

100% reproducible, for me, both with a build from 5/17 and with the pretest,
emacs -Q each time.

> > In any case, the doc for `set-frame-font' and the description of `Set
> > Default Font' tell users that the font specified will be used not only
> > for all current frames but also for future frames, and that it will act
> > as the default font from now on.
> 
> I don't see this in the doc string, please show the relevant text.  My
> interpretation of the doc string is that when that function is called
> interactively, it always sets font only of the currently selected
> frame.  To do that for other frames, you need to call the function
> non-interactively to be able to pass it a non-nil last arg.

I guess you could interpret it that way.  To make that clearer, start a
new paragraph for the "When called from Lisp", put a colon after that,
and then list the info for the parameters.

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.

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".

Yes, "default" can mean different things - here especially.  But the most
likely thing that users will think is that they are setting the default 
font for frames for the rest of the session.  If this is not intended to 
be the case (and it is currently not necessarily the case - see above),
the description needs to remove this possible (and natural) interpretation.

> > 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).

It likens the behavior of `Set Default Font' to modifying `default-frame-alist'.
It does not say that they are alternative ways to accomplish the same thing
wrt font, but it suggests that they are both ways to set the default font for
your session (as are the other ways listed).