Subject: bug#13709: bug#13793: 24.3.50; M-x broken in viper and X

From: Stefan Monnier <[email-masked]>
Date: Sun, 24 Feb 2013 22:55:34 -0500

> Meta bindings do not work if Emacs is started in X and viper is
> enabled. To reproduce, type

>   emacs -Q
>   M-x viper RET
>   M-x

> the last command M-x shows 'M-x undefined'.

I can reproduce it here, but it's tricky to investigate because of all
the various keymap trickery.  The thing I noticed is that in emacs-24,
`f1 k M-x' also tells me "M-x is undefined" although M-x does work.

> As far as I can tell, the reason is viper's trick with the ESC
> key. viper binds (kbd "ESC") to a special command call
> `viper-intercept-ESC-key`.

AFAICT in the GUI case, viper-intercept-ESC-key is not called when you
hit M-x (at least that's what trace-function-background told me, both in
trunk and in emacs-24).

The same commit caused a problem in Evil as well (see bug#13709), and
I hope the problem is the same and can be fixed in the same way, but I'm
also having trouble figuring out what's happening in that case.

If someone familiar with Evil or Viper's keymap tricks could investigate
a bit more to try and see where the behavior changes, I can then
hopefully see how it relates to my read-key-sequence changes.

        Stefan