Holding ISO_Level5_Shift is wrongly interpreted as normal shift.
Steps to reproduce
- Select the german keyboard layout neo2:
$ setxkbmap de neo
- Start a program with a shortcut for
Shift
+Arrow Up
, like xfce4-terminal (I usedxfce4-terminal 1.1.3 (Xfce 4.18)
. By default it should scroll up one line.) - Press
Alt Gr
+E
(the qwertyE
). In this layout, this corresponds toArrow Up
.
Current behavior
The terminal scrolls up one line or nothing happens, if there is not enough content to scroll. This should only happen if I additionally hold Shift
.
Expected outcome
You should see the last command in your shell history, i.e. just as if I had pressed Arrow Up
.
Version information
- gtk2 2.24.33-3
- gtk3 1:3.24.41-1
- gtk4 1:4.13.5-1.2
- artix linux (rolling distro, up 2 date system), kernel 6.7.6-artix1-1
Additional information
Alt Gr
+E
should be recognized as Arrow Up
and not Shift
+Arrow Up
. It seems the ISO_Level5_Shift from Alt Gr
is being interpreted as normal shift.
Using xev I get for Alt Gr
+E
:
KeyPress event, serial 28, synthetic NO, window 0x4e00001,
root 0x41c, subw 0x0, time 3095926, (132,28), root:(839,591),
state 0x0, keycode 108 (keysym 0xfe11, ISO_Level5_Shift), same_screen YES,
XKeysymToKeycode returns keycode: 94
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 28, synthetic NO, window 0x4e00001,
root 0x41c, subw 0x0, time 3096431, (132,28), root:(839,591),
state 0x20, keycode 26 (keysym 0xff52, Up), same_screen YES,
XKeysymToKeycode returns keycode: 111
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
and for Shift
+Alt Gr
+E
:
KeyPress event, serial 28, synthetic NO, window 0x4e00001,
root 0x41c, subw 0x0, time 2962277, (89,77), root:(494,404),
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 28, synthetic NO, window 0x4e00001,
root 0x41c, subw 0x0, time 2963940, (89,77), root:(494,404),
state 0x1, keycode 108 (keysym 0xfe11, ISO_Level5_Shift), same_screen YES,
XKeysymToKeycode returns keycode: 94
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 28, synthetic NO, window 0x4e00001,
root 0x41c, subw 0x0, time 2965564, (89,77), root:(494,404),
state 0x21, keycode 26 (keysym 0xff52, Up), same_screen YES,
XKeysymToKeycode returns keycode: 111
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
and for Arrow Up
:
KeyPress event, serial 28, synthetic NO, window 0x4e00001,
root 0x41c, subw 0x0, time 2904395, (89,77), root:(680,554),
state 0x0, keycode 111 (keysym 0xff52, Up), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
and for Shift+Arrow Up
:
KeyPress event, serial 37, synthetic NO, window 0x4000001,
root 0x53d, subw 0x0, time 343845960, (308,128), root:(594,481),
state 0x1, keycode 111 (keysym 0xff52, Up), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
The xfce people told me this is a gtk issue.
Testing with gedit (I suppose it uses gtk, too.) I get the expected result: Alt Gr
+E
just moves one line up, and Shift
+Alt Gr
+E
moves one line up and selects everything between from the new position to the old position. I don't know, what gedit does different.