Comment 206 for bug 1245473

Revision history for this message
In , Purkrtadam (purkrtadam) wrote :

xkb should be extended to be able to recognize a sequence of key presses and key releases and fire action upon it. Again, this would be an extension, not a violation of current standard.

Currently, the group switching is defined in /usr/share/X11/xkb/symbols/group with parts like

partial modifier_keys
xkb_symbols "lalt_lshift_toggle" {
    virtual_modifiers Alt;
    key <LALT> {
        symbols[Group1] = [ NoSymbol, ISO_Next_Group ],
        virtualMods= Alt
    };
    key <LFSH> {
        type[Group1]="PC_ALT_LEVEL2",
        symbols[Group1] = [ Shift_L, ISO_Next_Group ]
    };
};

The following is what this part of the file would look like after appropiate changes in xkb code:

xkb_sequences "lalt_lshift_toggle" {
    sequence { keydown <LALT>, keydown <LFSH>, keyup <LFSH> } = ISO_Next_Group;
    sequence { keydown <LFSH>, keydown <LALT>, keyup <LALT> } = ISO_Next_Group;
}

For this to work
1) http://www.x.org/docs/XKB/XKBproto.pdf need to be extended with a small chapter
2) http://cgit.freedesktop.org/xorg/xserver/tree/xkb - code the run time check for sequences; changes to xkm format required
3) http://cgit.freedesktop.org/xorg/app/xkbcomp/tree/ - code the parsing of "xkb_sequences", "keydown", and "keyup" keywords

At least this is my impression after a day of investigation. I know this seems like unnecessarily big change compared to Ilya's patch. But, basically, that is what I mean by "clean solution". Unfortunatelly, it is more of a "dream solution", since I feel I will hardly be able to code this..