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: