Bug#263073: xlibs: Super still Super+Hyper
On Sun, Sep 12, 2004 at 07:57:56PM +0000, Tim Bagot wrote:
> Sorry, my steps to reproduce weren't exactly very detailed. I'll try
> again:
>
> Sawfish: From Gnome, go to Desktop Preferences, Windows; Bindings tab.
> Set default modifier to super. (Should take effect immediately.) Try
> e.g. Win-TAB. Set to hyper, and try again.
>
> Emacs: Type C-h c Win-<key>
Great, thanks a lot for these detailed instructions.
I was quite surprised to see that Alt and Meta are not corrupted the
same way, and found in emacs21-21.3+1/src/xterm.c l.6442:
/* If some keys are both alt and meta,
make them just meta, not alt. */
if (dpyinfo->alt_mod_mask & dpyinfo->meta_mod_mask)
{
dpyinfo->alt_mod_mask &= ~dpyinfo->meta_mod_mask;
}
It seems that emacs does rely on the assumption that an X modifier
is bound to only one kind of key, and as this is not true for
Alt and Meta, a workaround was added. A similar trick can be added
for Super/Hyper, but a better idea is to skip the newly introduced
fake keys, since emacs has its own views about modifiers.
A patch is attached. It also shows that my patch to fix #234081 was
partly wrong, I will revert it.
On my slow machine, I was not able to build a patched emacs21 package,
but only that this portion behaves as desired with XFree86 4.3.
Emacs maintainer, do you believe that this bug should be cloned and
reassigned to emacs21?
Denis
--- emacs21-21.3+1/src/xterm.c.orig 2004-09-12 20:50:34.000000000 +0000
+++ emacs21-21.3+1/src/xterm.c 2004-09-12 20:52:26.000000000 +0000
@@ -6399,6 +6399,9 @@
{
int sym = syms[((code - min_code) * syms_per_code) + code_col];
+ /* Is this a fake key? */
+ if (code_col == 0 && sym == NoSymbol)
+ break;
switch (sym)
{
case XK_Meta_L:
Reply to: