From: Philipp Pagel on

Hi!

In my .xmodmap file i have assigned Mode_switch to the right Alt key and
have put several uselful characters on various keys:

keycode 108 = Mode_switch
keycode 30 = u U udiaeresis Udiaeresis
[...]

This setup has worked fine for a long time but recently (probably associated with some
update of Debian testing) something strange has happened: The order of pressing Shift and
AltR suddenly matters:

Shift + AltR + U -> U
AltR + Shift + U -> �

I have investigated this behaviour with xev and found:

AltR + Shift + U:

--------------------------------------------------------------------------
KeyPress event, serial 34, synthetic NO, window 0x4400001,
root 0x262, subw 0x0, time 16461700, (434,-2), root:(438,818),
state 0x0, keycode 108 (keysym 0xff7e, Mode_switch), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x4400001,
root 0x262, subw 0x0, time 16462204, (434,-2), root:(438,818),
state 0x2000, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x4400001,
root 0x262, subw 0x0, time 16462575, (434,-2), root:(438,818),
state 0x2001, keycode 30 (keysym 0xdc, Udiaeresis), same_screen YES,
XLookupString gives 2 bytes: (c3 9c) "�"
XmbLookupString gives 2 bytes: (c3 9c) "�"
XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4400001,
root 0x262, subw 0x0, time 16462687, (434,-2), root:(438,818),
state 0x2001, keycode 30 (keysym 0xdc, Udiaeresis), same_screen YES,
XLookupString gives 2 bytes: (c3 9c) "�"
XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4400001,
root 0x262, subw 0x0, time 16462756, (434,-2), root:(438,818),
state 0x2001, keycode 108 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4400001,
root 0x262, subw 0x0, time 16462794, (434,-2), root:(438,818),
state 0x1, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
--------------------------------------------------------------------------

Shift + AltR + U
--------------------------------------------------------------------------
KeyPress event, serial 31, synthetic NO, window 0x4400001,
root 0x262, subw 0x0, time 16587026, (384,-172), root:(388,648),
state 0x0, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x4400001,
root 0x262, subw 0x0, time 16587338, (384,-172), root:(388,648),
state 0x1, keycode 108 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x4400001,
root 0x262, subw 0x0, time 16587613, (384,-172), root:(388,648),
state 0x1, keycode 30 (keysym 0x55, U), same_screen YES,
XLookupString gives 1 bytes: (55) "U"
XmbLookupString gives 1 bytes: (55) "U"
XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4400001,
root 0x262, subw 0x0, time 16587709, (384,-172), root:(388,648),
state 0x1, keycode 30 (keysym 0x55, U), same_screen YES,
XLookupString gives 1 bytes: (55) "U"
XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4400001,
root 0x262, subw 0x0, time 16587785, (384,-172), root:(388,648),
state 0x1, keycode 108 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x4400001,
root 0x262, subw 0x0, time 16587848, (384,-172), root:(388,648),
state 0x1, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
--------------------------------------------------------------------------

So AltR after Shift gives NoSymbol insted of Mode_switch. I spent considerable
time serching and reading various matreial on xmodmap etc. but could not find
anything that seemed to point to a solution or explanation. So I'm asking for
hints to track down the cause of this ununtended behaviour.

Thanks
Philipp

--
Dr. Philipp Pagel
Lehrstuhl f. Genomorientierte Bioinformatik
Technische Universit�t M�nchen
http://webclu.bio.wzw.tum.de/~pagel/
From: J G Miller on
On Thu, 04 Feb 2010 12:46:03 +0000, Philipp Pagel wrote:

> The order of pressing Shift and AltR suddenly matters:

Have you tested your observation independent of window manager
and also with no window manager running at all (made possible in
X Session failsafe mode with initially just a terminal emulator running)?

From: Philipp Pagel on
J G Miller <miller(a)yoyo.org> wrote:
> On Thu, 04 Feb 2010 12:46:03 +0000, Philipp Pagel wrote:

> > The order of pressing Shift and AltR suddenly matters:

> Have you tested your observation independent of window manager
> and also with no window manager running at all (made possible in
> X Session failsafe mode with initially just a terminal emulator running)?

Yes, I had reproduced this with different window managers but not with out a
window manager. Anayway, I think I have figured it out:

I had always been under the impression that modifier keys had no shifted entry
in .xmodmap. Turns out that is not (no longer?) true. Apparently, you can have
a shifted AltR so the solution to my problem lies in including an assignment to
the second (shifted) field in the xmodmap file:

keycode 108 = Mode_switch Mode_switch

I still don't really understand, why this causes the order of the keystrokes to
matter or why it had been working earlier but at least the problemem has gone
away.

cu
Philipp

--
Dr. Philipp Pagel
Lehrstuhl f. Genomorientierte Bioinformatik
Technische Universit�t M�nchen
http://webclu.bio.wzw.tum.de/~pagel/