Subject: bug#16479: 24.3.50; daemon freeze with tty menus

From: Stefan Monnier <[email-masked]>
Date: Sun, 26 Jan 2014 21:07:20 -0500

>> >> do that same thing for terminal-local bindings.
>> > Could this be related to the fact that Voverriding_terminal_local_map
>> > is a per-keyboard variable?
>> Right: "terminal-local" == "per-keyboard".
> Any guidance as to how to solve this?

In specbind we need to add special handling for "per-keyboard variables"
by setting the `where' slot to hold the corresponding keyboard.
And then in all the places where the `where' slot is used, adjust the
code to handle the case where it holds a keyboard rather than a buffer
(or a frame).

One problem will bite us along the way: keyboards are not visible as
Lisp_Object objects.  You'll have to store in `where' the terminal
object instead.

The distinction between keyboards and terminals is subtle.  In 99.9% of
the cases, there's a one-to-one correspondence between the two, the 0.1%
remaining is when you have an X server with 2 "screens" (this is
"screen" in the X11 sense, i.e. one has name ":0.0" and the other
":0.1"), in which case we will have two terminals for a single keyboard.

So storing the terminal instead of the keyword is correct in 99.9% of
the cases.  And to tell you the truth, this subtlety is much too subtle
for us, so we have such "errors" in many other places.  As I mentioned in
the past in some other thread, we should simply get rid of this subtlety,
i.e. get rid of the distinction between terminals and keyboards.

        Stefan