[XEmacs-beta CC:'ed since action needs to be taken.]
> Falls du doch noch Probleme finden solltest und es ist schon
Mittwoch
> bitte martin(a)xemacs.org kontaktieren.
>
Hi Martin and Jan,
No, XEmacs 21.0 does _not_ accept Shift+AltGr as Compose (aka
Multi_key).
I just found that under an old XEmacs 20.4 (no Mule, Motif) I have
lying aroung I can reproduce this, but not under 21.1-Mule-XIMMotif.
I set some breakpoints (unfortunately this not a debug compile) and I
think I found it.
Removing the Mode_Switch keysym from the unshifted key (or replacing
it by, say, find) fixed the bug.
113 0xff7e (Mode_switch) 0xff20 (Multi_key)
In x_event_to_emacs_event
if (key_event_p)
{
Lisp_Object keysym;
XKeyEvent *ev = &x_event->xkey;
KeyCode keycode = ev->keycode;
if (x_key_is_modifier_p (keycode, d)) /* it's a modifier key */
return 0;
/* This used to compute the frame from the given X window and
store it here, but we really don't care about the frame. */
emacs_event->channel = DEVICE_CONSOLE (d);
keysym = x_to_emacs_keysym (&x_event->xkey, 0);
Now x_key_is_modifier_p is defined as
static int
x_key_is_modifier_p (KeyCode keycode, struct device *d)
{
struct x_device *xd = DEVICE_X_DATA (d);
KeySym *syms;
int i;
if (keycode < xd->x_keysym_map_min_code ||
keycode > xd->x_keysym_map_max_code)
return 0;
syms = &xd->x_keysym_map [(keycode - xd->x_keysym_map_min_code) *
xd->x_keysym_map_keysyms_per_code];
for (i = 0; i < xd->x_keysym_map_keysyms_per_code; i++)
if (IsModifierKey (syms [i]) ||
syms [i] == XK_Mode_switch) /* why doesn't IsModifierKey count this? */
return 1;
return 0;
So
1. XEmacs explcitly considers Mode_switch a modifier key.
2. XEmacs Considers a key a modifier if ANY of its Keysyms is a
modifier.
So at least one of these two is wrong (or at the very least
inconsistent with the rest of the X world).
[time passes]
I have checked in Xutil.h and it considers Mode_switch a modifier key.
That means 2. is the culprit.
Fix left to the reader.
Jan