Subject: Re: bug#1077: 23.0.60; x-create-frame: (wrong-type-argument number-or-marker-p nil)

From: Eli Zaretskii <[email-masked]>
Date: Tue, 30 Nov 2010 10:11:36 -0500

> Date: Tue, 30 Nov 2010 15:01:09 +0100
> From: martin rudalics <[email-masked]>
> CC: [email-masked], [email-masked]
> 
>  > Is it different from (menu-bar-lines . 0) ?
> 
> The only difference I can think of is that nil stands for "this frame
> cannot have a menubar" and zero for "the menubar has been temporarily
> disabled".

What is the difference between these two?  What does "cannot have a
menu bar" mean in practice?  Just wondering.

> But if not entry for `menu-bar-lines' exists, calling
> (frame-parameter ... 'menu-bar-lines) returns nil.

That's not guaranteed to be true.  You will see in the implementation
of frame-parameter and frame-parameters that we return values for some
frame parameters without ever looking at the frame's parameter alist.
It's true that frame-parameter actually does look in frame's parameter
alist when the value of menu-bar-lines is requested, but
frame-parameters does not, at least for TTYs.

That said, I agree that any code which is called during frame creation
should be able to avoid signaling an error.

>  > If not, do you happen to
>  > know why are we using two different conventions to convey the same
>  > information?
> 
> Probably for using `menu-bar-lines' in a uniform manner instead of a
> combination of `menu-bar-mode' and `menu-bar-lines'.

If so, this is a thing of the past, as we no longer need
menu-bar-mode, menu-bar-lines alone is enough, right?

> The most
> interesting thing about this is that on GNU systems Emacs never uses a
> value greater than 1 (if I correctly recall a discussion about this).
> And on Windows any calculations with a value greater than 1 are broken
> anway.  So using a boolean `menu-bar' should suffice.

Even funnier, the ELisp manual shows an example of building a menu bar
with two lines, see the node "Menu Bar" there.