Hi,
XFree86 broken the logic behind this bit of code in event-Xt.c:
/* If this key contains two distinct keysyms, that is,
"shift" generates a different keysym than the
non-shifted key, then don't apply the shift modifier
bit: it's implicit. Otherwise, if there would be no
other way to tell the difference between the shifted
and unshifted version of this key, apply the shift bit.
Non-graphics, like Backspace and F1 get the shift bit
in the modifiers slot. Neither the characters "a",
"A", "2", nor "@" normally have the shift bit set.
However, "F1" normally does. */
if (modifiers & XEMACS_MOD_SHIFT)
{
int Mode_switch_p = *state & xd->ModeMask;
KeySym bot = XLookupKeysym (ev, Mode_switch_p ? 2 : 0);
KeySym top = XLookupKeysym (ev, Mode_switch_p ? 3 : 1);
if (top && bot && top != bot)
modifiers &= ~XEMACS_MOD_SHIFT;
}
They (and I imagine x.org, until it’s proven otherwise) are shipping with
keymaps that bind, for example,
derrick [ xmodmap -pke | grep XF86
keycode 63 = KP_Multiply XF86_ClearGrab
[...]
Shift with KP_Multiply to some keysym.
XLookupKeysym(event, 1) returns that keysym, while XLookupString(event, buf,
bufsize, &keysym, &status) with an event that describes a shifted
KP_Multiply keypress returns KP_Multiply in *keysym. Previously, these were
always identical.
I’m sure there is some way to work around this within XEmacs, and it’s
probably going to be ugly and long, because we various input methods,
determined at compile time, that may or may not use XLookupString. Whee.
Dinos, you can edit your XF86Config file, add
Option "HandleSpecialKeys" "Always"
to the ServerFlags section, and add
xmodmap -pke | sed 's/XF86_.*$//g' | xmodmap -
to your X11 initialisation scripts. After that, you should be able to bind
shift plus any of the keypad keys to whatever you want. Note that xmodmap
command may break if you are using an obscure XKB layout; it won’t for any I
have available to me.
Best regards,
- Aidan
--
“I, for instance, am gung-ho about open source because my family is being
held hostage in Rob Malda’s basement. But who fact-checks me, or Enderle,
when we say something in public? No-one!” -- Danny O’Brien