xdb - problems using virtual keys and ISO_Level3_Shift key

cheater00 . cheater00 at gmail.com
Mon May 19 15:11:47 PDT 2014

Hi again!

Following the recent success in getting new types to work, I'm now
trying to fix some things that always nagged me and I could never get

In my layout, so that I don't have to move the palms of my hands from
the home position, I added an ISO_Level3_Shift key (it's on the right
Alt), and pressing that with hjkl will move the cursor left, down, up,
and right; yuio is home, page down, page up, and end respectively. The
same thing is on the left: asdf and qwer.

Source can be found here:

1. In most desktop programs, if I'm editing text, I can hold shift and
use the cursor keys to select text. This also works with my virtual
arrow keys, nearly everywhere. The two situations where it doesn't
work are: under gedit (or its fork pluma), and under nautilus (or its
fork caja), e.g. when editing a file name or editing the path in the
address bar. In both of those what happens is that the cursor just
moves around without selecting text, like if shift weren't pressed. In
both of those pressing shift and using actual, physical cursor keys

I have fixed this by using a type definition where I added
preserve[Shift+LevelThree]=Shift. I use it for hjkl etc.

2. In some places, the ISO_Level3_Shift key is intercepted. This is
especially painful on websites that have a search field. An example is
http://dict.leo.org. If I want to scroll down, normally I would press
ISO_Level3_Shift+j; however, before I get to pressing j, the website
notices I'm holding what it thinks is AltGr (after all they're the
same key) and places the cursor in the search field; at this point
pressing j will not do anything, because the window will not scroll
when the cursor is in the search field.

I tried fixing this:

- by using a compat with interpret ISO_Level3_Shift commented out (I
also commented out the block in compat/iso9995). However, at that
point, the key stopped working altogether.

- by setting preserve[LevelThree] = None in the type used by hjkl & co

- by setting preserve = None for all levels in the type used by the
keys that resolve to ISO_Level3_Shift; that didn't work. (see

- using the Redirect action on h to redirect when ISO_Level3_Shift was
held; that made the key not work at all with ISO_Level3_Shift at all.
I tried redirecting to <LEFT> like this in the symbols file:

    key <AC08> {
    symbols[Group1]=[    h, H, Left, Left    ],
    actions[Group1]=[ NoAction(), NoAction(), RedirectKey(key=<LEFT>),
RedirectKey(key=<LEFT>, modifiers=Shift) ] };

- by removing (commenting out) the lines that made ISO_Level3_Shift
get mapped to Mod5:

//    modifier_map Mod5 { ISO_Level3_Shift };
//    modifier_map Mod5 { <LEFT> };
//    modifier_map Mod5 { <MENU> };
//    modifier_map Mod5 { <LALT> };

At this point I'm seriously out of ideas; does anyone have any pointers?
I only want the ISO_Level3_Shift key to work when in use with the
"virtual" cursor keys; its key press doesn't need to be recognized by
any programs; it doesn't even need to be ISO_Level3_Shift.

3. This doesn't work in the editing window in Skype. This is the only
place this doesn't work; normal cursors work, but pressing
ISO_Level3_Shift+h just doesn't move the cursor at all.

Funnily enough my virtual arrow keys work in the contacts window; just
not in the message window.

I noticed that if I press ISO_Level3_Shift and try to use one of the
physical cursor keys the cursor doesn't move either; so apparently
this issue is the same as issue 2, in that the program notices I'm
holding ISO_Level3_Shift and decides to do something retarded.

I would appreciate any ideas or comments.


More information about the xorg mailing list