[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#241034: xlibs: Meta key not working in emacs with XkbOptions altwin:left_meta_win



On Wed, Mar 31, 2004 at 01:02:43PM +0200, Felix Kühling wrote:
[...]
> If this is a bug in Emacs then I wonder why the Meta-key works correctly
> with altwin:meta_win but fails with altwin:left_meta_win. How is the
> left Windows key handled differently between the two options? Should
> there be any difference? If not then I'd suspect that it's rather a
> problem in X.

Erwan David explained (in French) in this thread
  http://lists.debian.org/debian-user-french-0404/msg00412.html
and in #234081 that with altwin:left_meta_win, Mod4 is bound to Meta_L
and Super_R.  But (X)emacs seems not to be XKB-aware, and thus it cannot
determine whether Meta_L or Super_R is pressed when it received a Mod4
event, and Mod4 is disabled.

If (X)emacs used XKB extensions, it could make this distinction, so one
could argue that this is a limitation in (X)emacs.

But on the other hand, having 2 keys of distinct types (Meta and Super)
bound to the same modifier is certainly not a good idea; if these keys
handle different actions, binding them to different modifiers is
natural.  This is what Erwan does in #234081 to fix this problem.
I filed http://bugzilla.xfree86.org/show_bug.cgi?id=1344 but I am afraid
that mapping a key to another modifier might cause other trouble, so
let's see what upstream will propose.

It seems that people use altwin:left_meta_win mostly because
altwin:meta_win cancels AltGr, see
  http://bugzilla.xfree86.org/show_bug.cgi?id=1341
But this one can easily be fixed, here is a patch.  All *_win options
are then handled in a similar manner and do not modify Alt keys.

Denis
--- symbols/altwin.orig	2004-04-17 00:46:14.000000000 +0200
+++ symbols/altwin	2004-04-17 00:47:24.000000000 +0200
@@ -10,19 +10,14 @@
 
 partial modifier_keys 
 xkb_symbols "meta_win" {
-    key <LALT> {	[ 	Alt_L,	Alt_L		]	};
-    key <RALT> {	[ 	Alt_R,	Alt_R		]	};
     key <LWIN> {	[ 	Meta_L			]	};
     key <RWIN> {	[ 	Meta_R			]	};
-    modifier_map Mod1	{ Alt_L, Alt_R };
     modifier_map Mod4	{ Meta_L, Meta_R };
 };
 
 partial modifier_keys 
 xkb_symbols "left_meta_win" {
-    key <LALT> {	[ 	Alt_L,	Alt_L		]	};
     key <LWIN> {	[ 	Meta_L			]	};
-    modifier_map Mod1	{ Alt_L };
     modifier_map Mod4	{ Meta_L };
 };
 

Reply to: