Subject: Re: bug#6305: 24.0.50; Regression: most, but not all, keyboard shortcuts are missing

From: Lennart Borgman <[email-masked]>
Date: Mon, 31 May 2010 18:33:45 +0200

On Mon, May 31, 2010 at 5:31 PM, Stefan Monnier
<[email-masked]> wrote:
>
>> I have also noticed that key bindings are not always shown in the
>> menus, but I wondered if that was because I was using
>> overriding-terminal-local-map there. I havn't had time to check,
>> however key bindings in global map and normal minor mode maps seems to
>> show up fine in the menus.
>
> I don't know where to start looking without a reproducible recipe.
> The fix for 6171 only touched tmm.el so it can't affect GUI menus.

I think the problem is this:

- Fwhere_is_internal calls Fcurrent_active_maps, but the latter does
not include overriding-terminal-local-map if the first arg is Qnil. It
is Qnil in this case so overriding-terminal-local-map is not
considered.

However using Qt for the first arg is no good either since then only
the overriding map(s) are considered. Obviously Fcurrent_active_maps
behaves this way for the key lookup in the command loop.

Perhaps there should be something like Freally_active_maps ()?

>> In the C code it looks up key bindings like this:
>>   (where-is-internal 'ido-kill-buffer nil t nil nil)
>> However it seems like key remapping is forgotten there.
>
> In which sense?

What was I thinking, I really should learn to be more explicit ... ;-)

Yes, of course it looks at remapping, but for menus it would be good
if this situation was handled too:

- Let us say `kill-buffer' is in the menus.
- It got remapped to `ido-kill-buffer'.

The code in parse_menu_item around line 8008 calls

	  keys = Fwhere_is_internal (def, Qnil, Qt, Qnil, Qnil);

Since the last arg is nil it does not find any binding for
`kill-buffer' AFAICS. Or do I miss something?