all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
       [not found] <87v8dv2ib3.fsf@gmx.at>
@ 2023-08-09  0:02 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-08-15 13:31   ` Alexander Prähauser
  0 siblings, 1 reply; 30+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-08-09  0:02 UTC (permalink / raw)
  To: Alexander Prähauser; +Cc: 65068

Alexander Prähauser <alexander.praehauser@gmx.at> writes:

> I'm using the interception-`dual-function-keys`-plugin
>
> https://gitlab.com/interception/linux/plugins/dual-function-keys
>
> for my keyboard layout. In version 28.2 it worked perfectly, but
> now, if I try to use combinations using keys that have
> a dual function, the combination breaks off sending the wrong
> signals. For instance, my CapsLock key has a dual function,
> sending a F15 (XF86Launch5) if tapped and acting as the
> apostrophe-key (AC11 in xkb) if held, which is configured in xkb
> to act as an xkb level 3 modifier.

Which virtual modifier key have you assigned to the apostrophe key?

> However, now when I try to use
> CapsLock for a key combination using a level 3 symbol, for
> instance if I hold Control, then press CapsLock, it seems to send
> simply the apostrophe-key, so that I receive the
> message "C-' is undefined" and the key sequence is broken off. If
> I continue to hold both Control and CapsLock, it seems
> to access level 3 normally though, so that I can still use
> combinations consisting of C-[level 3 character]. If I only want
> to access a level 3 symbol by holding CapsLock, it works normally,
> it seems
> only combinations are affected. While typing this message I
> noticed an even weirder thing: my F-key is configured to
> have "a" on level and "Right" on level 5, and Rightalt is
> configured to act as a level 5 modifier if held, and if I
> press the F key normally or while holding Rightalt this works, but
> if I first hold Control, then Rightalt, then tap the
> F-key, it seems to interpret the result as C-f, even though on no
> xkb-level the F-key is configured to actually send f.
>
> The problem persists if I instead build the latest Emacs-version
> (30.1) from Github

Nit: Emacs is not developed on GitHub, but on Savannah:

  https://git.sv.gnu.org/cgit/emacs.git





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-09  0:02 ` bug#65068: 29.1; xkb-interception interaction causes problems with key combinations Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-08-15 13:31   ` Alexander Prähauser
  2023-08-16  1:29     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 30+ messages in thread
From: Alexander Prähauser @ 2023-08-15 13:31 UTC (permalink / raw)
  To: Po Lu; +Cc: Alexander Prähauser, 65068


Sorry for the late reply.

> Which virtual modifier key have you assigned to the apostrophe 
> key?

I've made the apostrophe key (AC11 in xkb) a level 3 switch 
through the following function:

> // The AC11 key (while pressed) chooses the third shift level.
> partial modifier_keys
> xkb_symbols "ac11_switch" {
>   key <AC11> {
>     type[Group1]="ONE_LEVEL",
>     symbols[Group1] = [ ISO_Level3_Shift ]
>   };
> };

If tapped it sends an F14 signal (which I use in Emacs to insert 
math symbols in cdlatex).

> Nit: Emacs is not developed on GitHub, but on Savannah:

I see. What I meant was that I built it using the emacs-git entry 
in the AUR.

Po Lu [2023-08-09 Wed 08:02] wrote:

> Alexander Prähauser <alexander.praehauser@gmx.at> writes:
>
>> I'm using the interception-`dual-function-keys`-plugin
>>
>> https://gitlab.com/interception/linux/plugins/dual-function-keys
>>
>> for my keyboard layout. In version 28.2 it worked perfectly, 
>> but
>> now, if I try to use combinations using keys that have
>> a dual function, the combination breaks off sending the wrong
>> signals. For instance, my CapsLock key has a dual function,
>> sending a F15 (XF86Launch5) if tapped and acting as the
>> apostrophe-key (AC11 in xkb) if held, which is configured in 
>> xkb
>> to act as an xkb level 3 modifier.
>
> Which virtual modifier key have you assigned to the apostrophe 
> key?
>
>> However, now when I try to use
>> CapsLock for a key combination using a level 3 symbol, for
>> instance if I hold Control, then press CapsLock, it seems to 
>> send
>> simply the apostrophe-key, so that I receive the
>> message "C-' is undefined" and the key sequence is broken 
>> off. If
>> I continue to hold both Control and CapsLock, it seems
>> to access level 3 normally though, so that I can still use
>> combinations consisting of C-[level 3 character]. If I only 
>> want
>> to access a level 3 symbol by holding CapsLock, it works 
>> normally,
>> it seems
>> only combinations are affected. While typing this message I
>> noticed an even weirder thing: my F-key is configured to
>> have "a" on level and "Right" on level 5, and Rightalt is
>> configured to act as a level 5 modifier if held, and if I
>> press the F key normally or while holding Rightalt this works, 
>> but
>> if I first hold Control, then Rightalt, then tap the
>> F-key, it seems to interpret the result as C-f, even though on 
>> no
>> xkb-level the F-key is configured to actually send f.
>>
>> The problem persists if I instead build the latest 
>> Emacs-version
>> (30.1) from Github
>
> Nit: Emacs is not developed on GitHub, but on Savannah:
>
>   https://git.sv.gnu.org/cgit/emacs.git






^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-15 13:31   ` Alexander Prähauser
@ 2023-08-16  1:29     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-08-16  7:50       ` Alexander Prähauser
  0 siblings, 1 reply; 30+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-08-16  1:29 UTC (permalink / raw)
  To: Alexander Prähauser; +Cc: 65068

Alexander Prähauser <alexander.praehauser@gmx.at> writes:

> Sorry for the late reply.
>
>> Which virtual modifier key have you assigned to the apostrophe key?
>
> I've made the apostrophe key (AC11 in xkb) a level 3 switch through
> the following function:
>
>> // The AC11 key (while pressed) chooses the third shift level.
>> partial modifier_keys
>> xkb_symbols "ac11_switch" {
>>   key <AC11> {
>>     type[Group1]="ONE_LEVEL",
>>     symbols[Group1] = [ ISO_Level3_Shift ]
>>   };
>> };
>
> If tapped it sends an F14 signal (which I use in Emacs to insert math
> symbols in cdlatex).

I guess I still don't fully understand your XKB configuration.  Having
access to the complete XKB configuration on your X server would be a
great help to that end.

Would you please run:

  xkbcomp -xkb $DISPLAY

and attach each generated *.xkb file?





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-16  1:29     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-08-16  7:50       ` Alexander Prähauser
  2023-08-16  8:02         ` Alexander Prähauser
  2023-08-16 12:51         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 2 replies; 30+ messages in thread
From: Alexander Prähauser @ 2023-08-16  7:50 UTC (permalink / raw)
  To: Po Lu; +Cc: Alexander Prähauser, 65068

[-- Attachment #1: xkb file --]
[-- Type: file, Size: 69044 bytes --]

xkb_keymap {
xkb_keycodes "(unnamed)" {
    minimum = 8;
    maximum = 255;
     <ESC> = 9;
    <AE01> = 10;
    <AE02> = 11;
    <AE03> = 12;
    <AE04> = 13;
    <AE05> = 14;
    <AE06> = 15;
    <AE07> = 16;
    <AE08> = 17;
    <AE09> = 18;
    <AE10> = 19;
    <AE11> = 20;
    <AE12> = 21;
    <BKSP> = 22;
     <TAB> = 23;
    <AD01> = 24;
    <AD02> = 25;
    <AD03> = 26;
    <AD04> = 27;
    <AD05> = 28;
    <AD06> = 29;
    <AD07> = 30;
    <AD08> = 31;
    <AD09> = 32;
    <AD10> = 33;
    <AD11> = 34;
    <AD12> = 35;
    <RTRN> = 36;
    <LCTL> = 37;
    <AC01> = 38;
    <AC02> = 39;
    <AC03> = 40;
    <AC04> = 41;
    <AC05> = 42;
    <AC06> = 43;
    <AC07> = 44;
    <AC08> = 45;
    <AC09> = 46;
    <AC10> = 47;
    <AC11> = 48;
    <TLDE> = 49;
    <LFSH> = 50;
    <BKSL> = 51;
    <AB01> = 52;
    <AB02> = 53;
    <AB03> = 54;
    <AB04> = 55;
    <AB05> = 56;
    <AB06> = 57;
    <AB07> = 58;
    <AB08> = 59;
    <AB09> = 60;
    <AB10> = 61;
    <RTSH> = 62;
    <KPMU> = 63;
    <LALT> = 64;
    <SPCE> = 65;
    <CAPS> = 66;
    <FK01> = 67;
    <FK02> = 68;
    <FK03> = 69;
    <FK04> = 70;
    <FK05> = 71;
    <FK06> = 72;
    <FK07> = 73;
    <FK08> = 74;
    <FK09> = 75;
    <FK10> = 76;
    <NMLK> = 77;
    <SCLK> = 78;
     <KP7> = 79;
     <KP8> = 80;
     <KP9> = 81;
    <KPSU> = 82;
     <KP4> = 83;
     <KP5> = 84;
     <KP6> = 85;
    <KPAD> = 86;
     <KP1> = 87;
     <KP2> = 88;
     <KP3> = 89;
     <KP0> = 90;
    <KPDL> = 91;
    <LVL3> = 92;
    <LSGT> = 94;
    <FK11> = 95;
    <FK12> = 96;
    <AB11> = 97;
    <KATA> = 98;
    <HIRA> = 99;
    <HENK> = 100;
    <HKTG> = 101;
    <MUHE> = 102;
    <JPCM> = 103;
    <KPEN> = 104;
    <RCTL> = 105;
    <KPDV> = 106;
    <PRSC> = 107;
    <RALT> = 108;
    <LNFD> = 109;
    <HOME> = 110;
      <UP> = 111;
    <PGUP> = 112;
    <LEFT> = 113;
    <RGHT> = 114;
     <END> = 115;
    <DOWN> = 116;
    <PGDN> = 117;
     <INS> = 118;
    <DELE> = 119;
    <I120> = 120;
    <MUTE> = 121;
    <VOL-> = 122;
    <VOL+> = 123;
    <POWR> = 124;
    <KPEQ> = 125;
    <I126> = 126;
    <PAUS> = 127;
    <I128> = 128;
    <I129> = 129;
    <HNGL> = 130;
    <HJCV> = 131;
    <AE13> = 132;
    <LWIN> = 133;
    <RWIN> = 134;
    <COMP> = 135;
    <STOP> = 136;
    <AGAI> = 137;
    <PROP> = 138;
    <UNDO> = 139;
    <FRNT> = 140;
    <COPY> = 141;
    <OPEN> = 142;
    <PAST> = 143;
    <FIND> = 144;
     <CUT> = 145;
    <HELP> = 146;
    <I147> = 147;
    <I148> = 148;
    <I149> = 149;
    <I150> = 150;
    <I151> = 151;
    <I152> = 152;
    <I153> = 153;
    <I154> = 154;
    <I155> = 155;
    <I156> = 156;
    <I157> = 157;
    <I158> = 158;
    <I159> = 159;
    <I160> = 160;
    <I161> = 161;
    <I162> = 162;
    <I163> = 163;
    <I164> = 164;
    <I165> = 165;
    <I166> = 166;
    <I167> = 167;
    <I168> = 168;
    <I169> = 169;
    <I170> = 170;
    <I171> = 171;
    <I172> = 172;
    <I173> = 173;
    <I174> = 174;
    <I175> = 175;
    <I176> = 176;
    <I177> = 177;
    <I178> = 178;
    <I179> = 179;
    <I180> = 180;
    <I181> = 181;
    <I182> = 182;
    <I183> = 183;
    <I184> = 184;
    <I185> = 185;
    <I186> = 186;
    <I187> = 187;
    <I188> = 188;
    <I189> = 189;
    <I190> = 190;
    <FK13> = 191;
    <FK14> = 192;
    <FK15> = 193;
    <FK16> = 194;
    <FK17> = 195;
    <FK18> = 196;
    <FK19> = 197;
    <FK20> = 198;
    <FK21> = 199;
    <FK22> = 200;
    <FK23> = 201;
    <FK24> = 202;
    <LVL5> = 203;
     <ALT> = 204;
    <META> = 205;
    <SUPR> = 206;
    <HYPR> = 207;
    <I208> = 208;
    <I209> = 209;
    <I210> = 210;
    <I211> = 211;
    <I212> = 212;
    <I213> = 213;
    <I214> = 214;
    <I215> = 215;
    <I216> = 216;
    <I217> = 217;
    <I218> = 218;
    <I219> = 219;
    <I220> = 220;
    <I221> = 221;
    <I222> = 222;
    <I223> = 223;
    <I224> = 224;
    <I225> = 225;
    <I226> = 226;
    <I227> = 227;
    <I228> = 228;
    <I229> = 229;
    <I230> = 230;
    <I231> = 231;
    <I232> = 232;
    <I233> = 233;
    <I234> = 234;
    <I235> = 235;
    <I236> = 236;
    <I237> = 237;
    <I238> = 238;
    <I239> = 239;
    <I240> = 240;
    <I241> = 241;
    <I242> = 242;
    <I243> = 243;
    <I244> = 244;
    <I245> = 245;
    <I246> = 246;
    <I247> = 247;
    <I248> = 248;
    <I249> = 249;
    <I250> = 250;
    <I251> = 251;
    <I252> = 252;
    <I253> = 253;
    <I254> = 254;
    <I255> = 255;
    indicator 1 = "Caps Lock";
    indicator 2 = "Num Lock";
    indicator 3 = "Scroll Lock";
    indicator 4 = "Compose";
    indicator 5 = "Kana";
    indicator 6 = "Sleep";
    indicator 7 = "Suspend";
    indicator 8 = "Mute";
    indicator 9 = "Misc";
    indicator 10 = "Mail";
    indicator 11 = "Charging";
    indicator 12 = "Shift Lock";
    indicator 13 = "Group 2";
    indicator 14 = "Mouse Keys";
    alias <AC12> = <BKSL>;
    alias <ALGR> = <RALT>;
    alias <MENU> = <COMP>;
    alias <HZTG> = <TLDE>;
    alias <LMTA> = <LWIN>;
    alias <RMTA> = <RWIN>;
    alias <OUTP> = <I235>;
    alias <KITG> = <I236>;
    alias <KIDN> = <I237>;
    alias <KIUP> = <I238>;
    alias <I121> = <MUTE>;
    alias <I122> = <VOL->;
    alias <I123> = <VOL+>;
    alias <I124> = <POWR>;
    alias <I125> = <KPEQ>;
    alias <I127> = <PAUS>;
    alias <I130> = <HNGL>;
    alias <I131> = <HJCV>;
    alias <I132> = <AE13>;
    alias <I133> = <LWIN>;
    alias <I134> = <RWIN>;
    alias <I135> = <COMP>;
    alias <I136> = <STOP>;
    alias <I137> = <AGAI>;
    alias <I138> = <PROP>;
    alias <I139> = <UNDO>;
    alias <I140> = <FRNT>;
    alias <I141> = <COPY>;
    alias <I142> = <OPEN>;
    alias <I143> = <PAST>;
    alias <I144> = <FIND>;
    alias <I145> =  <CUT>;
    alias <I146> = <HELP>;
    alias <I191> = <FK13>;
    alias <I192> = <FK14>;
    alias <I193> = <FK15>;
    alias <I194> = <FK16>;
    alias <I195> = <FK17>;
    alias <I196> = <FK18>;
    alias <I197> = <FK19>;
    alias <I198> = <FK20>;
    alias <I199> = <FK21>;
    alias <I200> = <FK22>;
    alias <I201> = <FK23>;
    alias <I202> = <FK24>;
    alias <MDSW> = <LVL5>;
    alias <KPPT> = <I129>;
    alias <LatQ> = <AD01>;
    alias <LatW> = <AD02>;
    alias <LatE> = <AD03>;
    alias <LatR> = <AD04>;
    alias <LatT> = <AD05>;
    alias <LatZ> = <AD06>;
    alias <LatU> = <AD07>;
    alias <LatI> = <AD08>;
    alias <LatO> = <AD09>;
    alias <LatP> = <AD10>;
    alias <LatA> = <AC01>;
    alias <LatS> = <AC02>;
    alias <LatD> = <AC03>;
    alias <LatF> = <AC04>;
    alias <LatG> = <AC05>;
    alias <LatH> = <AC06>;
    alias <LatJ> = <AC07>;
    alias <LatK> = <AC08>;
    alias <LatL> = <AC09>;
    alias <LatY> = <AB01>;
    alias <LatX> = <AB02>;
    alias <LatC> = <AB03>;
    alias <LatV> = <AB04>;
    alias <LatB> = <AB05>;
    alias <LatN> = <AB06>;
    alias <LatM> = <AB07>;
};

xkb_types "(unnamed)" {

    virtual_modifiers NumLock,Alt,LevelThree,LevelFive,Meta,Super,Hyper,ScrollLock;

    type "ONE_LEVEL" {
        modifiers= none;
        level_name[Level1]= "Any";
    };
    type "TWO_LEVEL" {
        modifiers= Shift;
        map[Shift]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
    };
    type "ALPHABETIC" {
        modifiers= Shift+Lock;
        map[Shift]= Level2;
        map[Lock]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Caps";
    };
    type "KEYPAD" {
        modifiers= Shift+NumLock;
        map[NumLock]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Number";
    };
    type "SHIFT+ALT" {
        modifiers= Shift+Alt;
        map[Shift+Alt]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift+Alt";
    };
    type "PC_SUPER_LEVEL2" {
        modifiers= Mod4;
        map[Mod4]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Super";
    };
    type "PC_CONTROL_LEVEL2" {
        modifiers= Control;
        map[Control]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Control";
    };
    type "PC_ALT_LEVEL2" {
        modifiers= Alt;
        map[Alt]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Alt";
    };
    type "CTRL+ALT" {
        modifiers= Shift+Control+Alt+LevelThree;
        map[Shift]= Level2;
        preserve[Shift]= Shift;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        preserve[Shift+LevelThree]= Shift;
        map[Control+Alt]= Level5;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
        level_name[Level5]= "Ctrl+Alt";
    };
    type "LOCAL_EIGHT_LEVEL" {
        modifiers= Shift+Lock+Control+LevelThree;
        map[Shift]= Level2;
        map[Lock]= Level2;
        map[LevelThree]= Level3;
        map[Shift+Lock+LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Lock+LevelThree]= Level4;
        map[Control]= Level5;
        map[Shift+Lock+Control]= Level5;
        map[Shift+Control]= Level6;
        map[Lock+Control]= Level6;
        map[Control+LevelThree]= Level7;
        map[Shift+Lock+Control+LevelThree]= Level7;
        map[Shift+Control+LevelThree]= Level8;
        map[Lock+Control+LevelThree]= Level8;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Level3";
        level_name[Level4]= "Shift Level3";
        level_name[Level5]= "Ctrl";
        level_name[Level6]= "Shift Ctrl";
        level_name[Level7]= "Level3 Ctrl";
        level_name[Level8]= "Shift Level3 Ctrl";
    };
    type "THREE_LEVEL" {
        modifiers= Shift+LevelThree;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level3;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Level3";
    };
    type "EIGHT_LEVEL" {
        modifiers= Shift+LevelThree+LevelFive;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[LevelFive]= Level5;
        map[Shift+LevelFive]= Level6;
        map[LevelThree+LevelFive]= Level7;
        map[Shift+LevelThree+LevelFive]= Level8;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
        level_name[Level5]= "X";
        level_name[Level6]= "X Shift";
        level_name[Level7]= "X Alt Base";
        level_name[Level8]= "X Shift Alt";
    };
    type "EIGHT_LEVEL_ALPHABETIC" {
        modifiers= Shift+Lock+LevelThree+LevelFive;
        map[Shift]= Level2;
        map[Lock]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Lock+LevelThree]= Level4;
        map[Shift+Lock+LevelThree]= Level3;
        map[LevelFive]= Level5;
        map[Shift+LevelFive]= Level6;
        map[Lock+LevelFive]= Level6;
        map[Shift+Lock+LevelFive]= Level5;
        map[LevelThree+LevelFive]= Level7;
        map[Shift+LevelThree+LevelFive]= Level8;
        map[Lock+LevelThree+LevelFive]= Level8;
        map[Shift+Lock+LevelThree+LevelFive]= Level7;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
        level_name[Level5]= "X";
        level_name[Level6]= "X Shift";
        level_name[Level7]= "X Alt Base";
        level_name[Level8]= "X Shift Alt";
    };
    type "EIGHT_LEVEL_SEMIALPHABETIC" {
        modifiers= Shift+Lock+LevelThree+LevelFive;
        map[Shift]= Level2;
        map[Lock]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Lock+LevelThree]= Level3;
        preserve[Lock+LevelThree]= Lock;
        map[Shift+Lock+LevelThree]= Level4;
        preserve[Shift+Lock+LevelThree]= Lock;
        map[LevelFive]= Level5;
        map[Shift+LevelFive]= Level6;
        map[Lock+LevelFive]= Level6;
        map[Shift+Lock+LevelFive]= Level5;
        map[LevelThree+LevelFive]= Level7;
        map[Shift+LevelThree+LevelFive]= Level8;
        map[Lock+LevelThree+LevelFive]= Level7;
        preserve[Lock+LevelThree+LevelFive]= Lock;
        map[Shift+Lock+LevelThree+LevelFive]= Level8;
        preserve[Shift+Lock+LevelThree+LevelFive]= Lock;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
        level_name[Level5]= "X";
        level_name[Level6]= "X Shift";
        level_name[Level7]= "X Alt Base";
        level_name[Level8]= "X Shift Alt";
    };
    type "EIGHT_LEVEL_LEVEL_FIVE_LOCK" {
        modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[LevelFive]= Level5;
        map[Shift+LevelFive]= Level6;
        preserve[Shift+LevelFive]= Shift;
        map[LevelThree+LevelFive]= Level7;
        map[Shift+LevelThree+LevelFive]= Level8;
        map[NumLock]= Level5;
        map[Shift+NumLock]= Level6;
        preserve[Shift+NumLock]= Shift;
        map[NumLock+LevelThree]= Level7;
        map[Shift+NumLock+LevelThree]= Level8;
        map[Shift+NumLock+LevelFive]= Level2;
        map[NumLock+LevelThree+LevelFive]= Level3;
        map[Shift+NumLock+LevelThree+LevelFive]= Level4;
        map[Shift+Lock]= Level2;
        map[Lock+LevelThree]= Level3;
        map[Shift+Lock+LevelThree]= Level4;
        map[Lock+LevelFive]= Level5;
        map[Shift+Lock+LevelFive]= Level6;
        preserve[Shift+Lock+LevelFive]= Shift;
        map[Lock+LevelThree+LevelFive]= Level7;
        map[Shift+Lock+LevelThree+LevelFive]= Level8;
        map[Lock+NumLock]= Level5;
        map[Shift+Lock+NumLock]= Level6;
        preserve[Shift+Lock+NumLock]= Shift;
        map[Lock+NumLock+LevelThree]= Level7;
        map[Shift+Lock+NumLock+LevelThree]= Level8;
        map[Shift+Lock+NumLock+LevelFive]= Level2;
        map[Lock+NumLock+LevelThree+LevelFive]= Level3;
        map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
        level_name[Level5]= "X";
        level_name[Level6]= "X Shift";
        level_name[Level7]= "X Alt Base";
        level_name[Level8]= "X Shift Alt";
    };
    type "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK" {
        modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[LevelFive]= Level5;
        map[Shift+LevelFive]= Level6;
        preserve[Shift+LevelFive]= Shift;
        map[LevelThree+LevelFive]= Level7;
        map[Shift+LevelThree+LevelFive]= Level8;
        map[NumLock]= Level5;
        map[Shift+NumLock]= Level6;
        preserve[Shift+NumLock]= Shift;
        map[NumLock+LevelThree]= Level7;
        map[Shift+NumLock+LevelThree]= Level8;
        map[Shift+NumLock+LevelFive]= Level2;
        map[NumLock+LevelThree+LevelFive]= Level3;
        map[Shift+NumLock+LevelThree+LevelFive]= Level4;
        map[Lock]= Level2;
        map[Lock+LevelThree]= Level3;
        map[Shift+Lock+LevelThree]= Level4;
        map[Lock+LevelFive]= Level5;
        map[Shift+Lock+LevelFive]= Level6;
        map[Lock+LevelThree+LevelFive]= Level7;
        map[Shift+Lock+LevelThree+LevelFive]= Level8;
        map[Lock+NumLock]= Level5;
        map[Shift+Lock+NumLock]= Level6;
        map[Lock+NumLock+LevelThree]= Level7;
        map[Shift+Lock+NumLock+LevelThree]= Level8;
        map[Lock+NumLock+LevelFive]= Level2;
        map[Lock+NumLock+LevelThree+LevelFive]= Level4;
        map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
        level_name[Level5]= "X";
        level_name[Level6]= "X Shift";
        level_name[Level7]= "X Alt Base";
        level_name[Level8]= "X Shift Alt";
    };
    type "FOUR_LEVEL" {
        modifiers= Shift+LevelThree;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
    };
    type "FOUR_LEVEL_ALPHABETIC" {
        modifiers= Shift+Lock+LevelThree;
        map[Shift]= Level2;
        map[Lock]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Lock+LevelThree]= Level4;
        map[Shift+Lock+LevelThree]= Level3;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
    };
    type "FOUR_LEVEL_SEMIALPHABETIC" {
        modifiers= Shift+Lock+LevelThree;
        map[Shift]= Level2;
        map[Lock]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Lock+LevelThree]= Level3;
        preserve[Lock+LevelThree]= Lock;
        map[Shift+Lock+LevelThree]= Level4;
        preserve[Shift+Lock+LevelThree]= Lock;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
    };
    type "FOUR_LEVEL_MIXED_KEYPAD" {
        modifiers= Shift+NumLock+LevelThree;
        map[NumLock]= Level2;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[NumLock+LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Shift+NumLock+LevelThree]= Level4;
        level_name[Level1]= "Base";
        level_name[Level2]= "Number";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
    };
    type "FOUR_LEVEL_X" {
        modifiers= Shift+Control+Alt+LevelThree;
        map[LevelThree]= Level2;
        map[Shift+LevelThree]= Level3;
        map[Control+Alt]= Level4;
        level_name[Level1]= "Base";
        level_name[Level2]= "Alt Base";
        level_name[Level3]= "Shift Alt";
        level_name[Level4]= "Ctrl+Alt";
    };
    type "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC" {
        modifiers= Shift+Lock+LevelThree;
        map[Shift]= Level2;
        map[Lock]= Level4;
        preserve[Lock]= Lock;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Lock+LevelThree]= Level3;
        preserve[Lock+LevelThree]= Lock;
        map[Shift+Lock+LevelThree]= Level3;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "AltGr Base";
        level_name[Level4]= "Shift AltGr";
    };
    type "FOUR_LEVEL_PLUS_LOCK" {
        modifiers= Shift+Lock+LevelThree;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Lock]= Level5;
        map[Shift+Lock]= Level2;
        map[Lock+LevelThree]= Level3;
        map[Shift+Lock+LevelThree]= Level4;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
        level_name[Level5]= "Lock";
    };
    type "FOUR_LEVEL_KEYPAD" {
        modifiers= Shift+NumLock+LevelThree;
        map[Shift]= Level2;
        map[NumLock]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[NumLock+LevelThree]= Level4;
        map[Shift+NumLock+LevelThree]= Level3;
        level_name[Level1]= "Base";
        level_name[Level2]= "Number";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Alt Number";
    };
};

xkb_compatibility "(unnamed)" {

    virtual_modifiers NumLock,Alt,LevelThree,LevelFive,Meta,Super,Hyper,ScrollLock;

    interpret.useModMapMods= AnyLevel;
    interpret.repeat= False;
    interpret.locking= False;
    interpret ISO_Level2_Latch+Exactly(Shift) {
        useModMapMods=level1;
        action= LatchMods(modifiers=Shift,clearLocks,latchToLock);
    };
    interpret Shift_Lock+AnyOf(Shift+Lock) {
        action= LockMods(modifiers=Shift);
    };
    interpret Num_Lock+AnyOf(all) {
        virtualModifier= NumLock;
        action= LockMods(modifiers=NumLock);
    };
    interpret ISO_Level3_Shift+AnyOf(all) {
        virtualModifier= LevelThree;
        useModMapMods=level1;
        action= SetMods(modifiers=LevelThree,clearLocks);
    };
    interpret ISO_Level3_Latch+AnyOf(all) {
        virtualModifier= LevelThree;
        useModMapMods=level1;
        action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
    };
    interpret ISO_Level3_Lock+AnyOf(all) {
        virtualModifier= LevelThree;
        useModMapMods=level1;
        action= LockMods(modifiers=LevelThree);
    };
    interpret Alt_L+AnyOf(all) {
        virtualModifier= Alt;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Alt_R+AnyOf(all) {
        virtualModifier= Alt;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Meta_L+AnyOf(all) {
        virtualModifier= Meta;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Meta_R+AnyOf(all) {
        virtualModifier= Meta;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Super_L+AnyOf(all) {
        virtualModifier= Super;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Super_R+AnyOf(all) {
        virtualModifier= Super;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Hyper_L+AnyOf(all) {
        virtualModifier= Hyper;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Hyper_R+AnyOf(all) {
        virtualModifier= Hyper;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Scroll_Lock+AnyOf(all) {
        virtualModifier= ScrollLock;
        action= LockMods(modifiers=modMapMods);
    };
    interpret ISO_Level5_Shift+AnyOf(all) {
        virtualModifier= LevelFive;
        useModMapMods=level1;
        action= SetMods(modifiers=LevelFive,clearLocks);
    };
    interpret ISO_Level5_Latch+AnyOf(all) {
        virtualModifier= LevelFive;
        useModMapMods=level1;
        action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
    };
    interpret ISO_Level5_Lock+AnyOf(all) {
        virtualModifier= LevelFive;
        useModMapMods=level1;
        action= LockMods(modifiers=LevelFive);
    };
    interpret Mode_switch+AnyOfOrNone(all) {
        action= SetGroup(group=+1);
    };
    interpret ISO_Level3_Shift+AnyOfOrNone(all) {
        action= SetMods(modifiers=LevelThree,clearLocks);
    };
    interpret ISO_Level3_Latch+AnyOfOrNone(all) {
        action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
    };
    interpret ISO_Level3_Lock+AnyOfOrNone(all) {
        action= LockMods(modifiers=LevelThree);
    };
    interpret ISO_Group_Latch+AnyOfOrNone(all) {
        action= LatchGroup(group=2);
    };
    interpret ISO_Next_Group+AnyOfOrNone(all) {
        action= LockGroup(group=+1);
    };
    interpret ISO_Prev_Group+AnyOfOrNone(all) {
        action= LockGroup(group=-1);
    };
    interpret ISO_First_Group+AnyOfOrNone(all) {
        action= LockGroup(group=1);
    };
    interpret ISO_Last_Group+AnyOfOrNone(all) {
        action= LockGroup(group=2);
    };
    interpret KP_1+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=+1);
    };
    interpret KP_End+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=+1);
    };
    interpret KP_2+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+0,y=+1);
    };
    interpret KP_Down+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+0,y=+1);
    };
    interpret KP_3+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=+1);
    };
    interpret KP_Next+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=+1);
    };
    interpret KP_4+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=+0);
    };
    interpret KP_Left+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=+0);
    };
    interpret KP_6+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=+0);
    };
    interpret KP_Right+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=+0);
    };
    interpret KP_7+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=-1);
    };
    interpret KP_Home+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=-1);
    };
    interpret KP_8+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+0,y=-1);
    };
    interpret KP_Up+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+0,y=-1);
    };
    interpret KP_9+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=-1);
    };
    interpret KP_Prior+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=-1);
    };
    interpret KP_5+AnyOfOrNone(all) {
        repeat= True;
        action= PtrBtn(button=default);
    };
    interpret KP_Begin+AnyOfOrNone(all) {
        repeat= True;
        action= PtrBtn(button=default);
    };
    interpret KP_F2+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=1);
    };
    interpret KP_Divide+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=1);
    };
    interpret KP_F3+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=2);
    };
    interpret KP_Multiply+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=2);
    };
    interpret KP_F4+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=3);
    };
    interpret KP_Subtract+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=3);
    };
    interpret KP_Separator+AnyOfOrNone(all) {
        repeat= True;
        action= PtrBtn(button=default,count=2);
    };
    interpret KP_Add+AnyOfOrNone(all) {
        repeat= True;
        action= PtrBtn(button=default,count=2);
    };
    interpret KP_0+AnyOfOrNone(all) {
        repeat= True;
        action= LockPtrBtn(button=default,affect=lock);
    };
    interpret KP_Insert+AnyOfOrNone(all) {
        repeat= True;
        action= LockPtrBtn(button=default,affect=lock);
    };
    interpret KP_Decimal+AnyOfOrNone(all) {
        repeat= True;
        action= LockPtrBtn(button=default,affect=unlock);
    };
    interpret KP_Delete+AnyOfOrNone(all) {
        repeat= True;
        action= LockPtrBtn(button=default,affect=unlock);
    };
    interpret F25+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=1);
    };
    interpret F26+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=2);
    };
    interpret F27+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=-1);
    };
    interpret F29+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=-1);
    };
    interpret F31+AnyOfOrNone(all) {
        repeat= True;
        action= PtrBtn(button=default);
    };
    interpret F33+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=+1);
    };
    interpret F35+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=+1);
    };
    interpret Pointer_Button_Dflt+AnyOfOrNone(all) {
        action= PtrBtn(button=default);
    };
    interpret Pointer_Button1+AnyOfOrNone(all) {
        action= PtrBtn(button=1);
    };
    interpret Pointer_Button2+AnyOfOrNone(all) {
        action= PtrBtn(button=2);
    };
    interpret Pointer_Button3+AnyOfOrNone(all) {
        action= PtrBtn(button=3);
    };
    interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {
        action= PtrBtn(button=default,count=2);
    };
    interpret Pointer_DblClick1+AnyOfOrNone(all) {
        action= PtrBtn(button=1,count=2);
    };
    interpret Pointer_DblClick2+AnyOfOrNone(all) {
        action= PtrBtn(button=2,count=2);
    };
    interpret Pointer_DblClick3+AnyOfOrNone(all) {
        action= PtrBtn(button=3,count=2);
    };
    interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {
        action= LockPtrBtn(button=default,affect=both);
    };
    interpret Pointer_Drag1+AnyOfOrNone(all) {
        action= LockPtrBtn(button=1,affect=both);
    };
    interpret Pointer_Drag2+AnyOfOrNone(all) {
        action= LockPtrBtn(button=2,affect=both);
    };
    interpret Pointer_Drag3+AnyOfOrNone(all) {
        action= LockPtrBtn(button=3,affect=both);
    };
    interpret Pointer_EnableKeys+AnyOfOrNone(all) {
        action= LockControls(controls=MouseKeys);
    };
    interpret Pointer_Accelerate+AnyOfOrNone(all) {
        action= LockControls(controls=MouseKeysAccel);
    };
    interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {
        action= SetPtrDflt(affect=button,button=+1);
    };
    interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {
        action= SetPtrDflt(affect=button,button=-1);
    };
    interpret AccessX_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=AccessXKeys);
    };
    interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=AccessXFeedback);
    };
    interpret RepeatKeys_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=RepeatKeys);
    };
    interpret SlowKeys_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=SlowKeys);
    };
    interpret BounceKeys_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=BounceKeys);
    };
    interpret StickyKeys_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=StickyKeys);
    };
    interpret MouseKeys_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=MouseKeys);
    };
    interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=MouseKeysAccel);
    };
    interpret Overlay1_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=none);
    };
    interpret Overlay2_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=none);
    };
    interpret AudibleBell_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=AudibleBell);
    };
    interpret Terminate_Server+AnyOfOrNone(all) {
        action= Terminate();
    };
    interpret Alt_L+AnyOfOrNone(all) {
        action= SetMods(modifiers=Alt,clearLocks);
    };
    interpret Alt_R+AnyOfOrNone(all) {
        action= SetMods(modifiers=Alt,clearLocks);
    };
    interpret Meta_L+AnyOfOrNone(all) {
        action= SetMods(modifiers=Meta,clearLocks);
    };
    interpret Meta_R+AnyOfOrNone(all) {
        action= SetMods(modifiers=Meta,clearLocks);
    };
    interpret Super_L+AnyOfOrNone(all) {
        action= SetMods(modifiers=Super,clearLocks);
    };
    interpret Super_R+AnyOfOrNone(all) {
        action= SetMods(modifiers=Super,clearLocks);
    };
    interpret Hyper_L+AnyOfOrNone(all) {
        action= SetMods(modifiers=Hyper,clearLocks);
    };
    interpret Hyper_R+AnyOfOrNone(all) {
        action= SetMods(modifiers=Hyper,clearLocks);
    };
    interpret Shift_L+AnyOfOrNone(all) {
        action= SetMods(modifiers=Shift,clearLocks);
    };
    interpret XF86Switch_VT_1+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=1,!same);
    };
    interpret XF86Switch_VT_2+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=2,!same);
    };
    interpret XF86Switch_VT_3+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=3,!same);
    };
    interpret XF86Switch_VT_4+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=4,!same);
    };
    interpret XF86Switch_VT_5+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=5,!same);
    };
    interpret XF86Switch_VT_6+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=6,!same);
    };
    interpret XF86Switch_VT_7+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=7,!same);
    };
    interpret XF86Switch_VT_8+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=8,!same);
    };
    interpret XF86Switch_VT_9+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=9,!same);
    };
    interpret XF86Switch_VT_10+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=10,!same);
    };
    interpret XF86Switch_VT_11+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=11,!same);
    };
    interpret XF86Switch_VT_12+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=12,!same);
    };
    interpret XF86LogGrabInfo+AnyOfOrNone(all) {
        repeat= True;
        action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);
    };
    interpret XF86LogWindowTree+AnyOfOrNone(all) {
        repeat= True;
        action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);
    };
    interpret XF86Next_VMode+AnyOfOrNone(all) {
        repeat= True;
        action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
    };
    interpret XF86Prev_VMode+AnyOfOrNone(all) {
        repeat= True;
        action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
    };
    interpret ISO_Level5_Shift+AnyOfOrNone(all) {
        action= SetMods(modifiers=LevelFive,clearLocks);
    };
    interpret ISO_Level5_Latch+AnyOfOrNone(all) {
        action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
    };
    interpret ISO_Level5_Lock+AnyOfOrNone(all) {
        action= LockMods(modifiers=NumLock);
    };
    interpret Caps_Lock+AnyOfOrNone(all) {
        action= LockMods(modifiers=Lock);
    };
    interpret Any+Exactly(Lock) {
        action= LockMods(modifiers=Lock);
    };
    interpret Any+AnyOf(all) {
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    indicator "Caps Lock" {
        whichModState= locked;
        modifiers= Lock;
    };
    indicator "Num Lock" {
        whichModState= locked;
        modifiers= NumLock;
    };
    indicator "Scroll Lock" {
        whichModState= locked;
        modifiers= ScrollLock;
    };
    indicator "Shift Lock" {
        whichModState= locked;
        modifiers= Shift;
    };
    indicator "Group 2" {
        groups= 0xfe;
    };
    indicator "Mouse Keys" {
        controls= mouseKeys;
    };
};

xkb_symbols "(unnamed)" {

    name[group1]="German (Aus der Neo-Welt)";
    name[group2]="English (US)";
    name[group3]="English (US)";

    key  <ESC> {         [          Escape ] };
    key <AE01> {
        type[group1]= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [               1,          degree,     onesuperior,    onesubscript,     ordfeminine,        NoSymbol,         notsign,        NoSymbol ],
        symbols[Group2]= [               1,          exclam ],
        symbols[Group3]= [               1,          exclam ]
    };
    key <AE02> {
        type[group1]= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [               2,         section,     twosuperior,    twosubscript,    ordmasculine,        NoSymbol,       logicalor,        NoSymbol ],
        symbols[Group2]= [               2,              at ],
        symbols[Group3]= [               2,              at ]
    };
    key <AE03> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        symbols[Group1]= [             Tab,             Tab,   threesuperior,  threesubscript,      numerosign,  threesubscript,      logicaland,        NoSymbol ],
        symbols[Group2]= [               3,      numbersign ],
        symbols[Group3]= [               3,      numbersign ]
    };
    key <AE04> {
        type[group1]= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [               4,  guillemetright,           U203A,    femalesymbol,        NoSymbol,        NoSymbol,           U22A5,        NoSymbol ],
        symbols[Group2]= [               4,          dollar ],
        symbols[Group3]= [               4,          dollar ]
    };
    key <AE05> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        symbols[Group1]= [       Control_L,           U2113,   threesuperior,      malesymbol,      numerosign,  threesubscript,      logicaland,        NoSymbol ],
        symbols[Group2]= [               5,         percent ],
        symbols[Group3]= [               5,         percent ]
    };
    key <AE06> {
        type[group1]= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [               6,          dollar,            cent,           U26A5,        sterling,        NoSymbol,           U2225,        NoSymbol ],
        symbols[Group2]= [               6,     asciicircum ],
        symbols[Group3]= [               6,     asciicircum ]
    };
    key <AE07> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        symbols[Group1]= [       BackSpace,           U2113,   threesuperior,           U03F0,      numerosign,  threesubscript,      logicaland,        NoSymbol ],
        symbols[Group2]= [               7,       ampersand ],
        symbols[Group3]= [               7,       ampersand ]
    };
    key <AE08> {
        type[group1]= "ONE_LEVEL",
        symbols[Group1]= [ ISO_Level5_Shift ],
        symbols[Group2]= [               8,        asterisk ],
        symbols[Group3]= [               8,        asterisk ]
    };
    key <AE09> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        symbols[Group1]= [            KP_9,           U2113,   threesuperior,           U27E9,      numerosign,  threesubscript,      logicaland,        NoSymbol ],
        symbols[Group2]= [               9,       parenleft ],
        symbols[Group3]= [               9,       parenleft ]
    };
    key <AE10> {
        type[group1]= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [       Caps_Lock, rightdoublequotemark, rightsinglequotemark,   zerosubscript,     KP_Multiply,     KP_Multiply,        emptyset,        NoSymbol ],
        symbols[Group2]= [               0,      parenright ],
        symbols[Group3]= [               0,      parenright ]
    };
    key <AE11> {
        type[group1]= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [           minus,          emdash,        NoSymbol,           U2011,     KP_Subtract,     KP_Subtract,          hyphen,        NoSymbol ],
        symbols[Group2]= [           minus,      underscore ],
        symbols[Group3]= [           minus,      underscore ]
    };
    key <AE12> {
        type[group1]= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [      dead_grave,    dead_cedilla,  dead_abovering, dead_abovereversedcomma,  dead_diaeresis,        NoSymbol,     dead_macron,        NoSymbol ],
        symbols[Group2]= [           equal,            plus ],
        symbols[Group3]= [           equal,            plus ]
    };
    key <BKSP> {         [       BackSpace,       BackSpace ] };
    key  <TAB> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [             Tab,    ISO_Left_Tab,       Multi_key, ISO_Level5_Lock,        NoSymbol,        NoSymbol,        NoSymbol, ISO_Level5_Lock ]
    };
    key <AD01> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               p,               P,        ellipsis,        Greek_pi,            Home,        multiply,        Greek_PI,           U043F ],
        symbols[Group2]= [               q,               Q ],
        symbols[Group3]= [               q,               Q ]
    };
    key <AD02> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               u,               U,      underscore,        NoSymbol,          emdash,           U2196,         radical,           U0443 ],
        symbols[Group2]= [               w,               W ],
        symbols[Group3]= [               w,               W ]
    };
    key <AD03> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [        quotedbl,      apostrophe,     bracketleft, Greek_finalsmallsigma,              Up,           U2191,     Greek_LAMDA,     Cyrillic_yu ],
        symbols[Group2]= [               e,               E ],
        symbols[Group3]= [               e,               E ]
    };
    key <AD04> {
        type[group1]= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [           comma, enfilledcircbullet,    bracketright,       Greek_chi,       BackSpace,           U2197,           U2203,           U0448 ],
        symbols[Group2]= [               r,               R ],
        symbols[Group3]= [               r,               R ]
    };
    key <AD05> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               q,               Q,     asciicircum,     Greek_omega,            Next,           U22C9,           U211A,           U044C ],
        symbols[Group2]= [               t,               T ],
        symbols[Group3]= [               t,               T ]
    };
    key <AD06> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               v,               V,      Udiaeresis,     Greek_kappa,      exclamdown,           U22CA,       U0001D54D,           U0432 ],
        symbols[Group2]= [               y,               Y ],
        symbols[Group3]= [               y,               Y ]
    };
    key <AD07> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               c,               C,       semicolon,       Greek_chi,               4,           U227A,           U2102,           U0447 ],
        symbols[Group2]= [               u,               U ],
        symbols[Group3]= [               u,               U ]
    };
    key <AD08> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               l,               L,      adiaeresis,     Greek_lamda,               5,           U2227,     Greek_LAMDA,           U043B ],
        symbols[Group2]= [               i,               I ],
        symbols[Group3]= [               i,               I ]
    };
    key <AD09> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               m,               M,           equal,        Greek_mu,               6,           U227B,       U0001D544,           U043C ],
        symbols[Group2]= [               o,               O ],
        symbols[Group3]= [               o,               O ]
    };
    key <AD10> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               f,               F,       ampersand,       Greek_phi,          KP_Add,           U220F,       Greek_PHI,           U0444 ],
        symbols[Group2]= [               p,               P ],
        symbols[Group3]= [               p,               P ]
    };
    key <AD11> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        symbols[Group1]= [               j,               J,        EuroSign, Greek_finalsmallsigma,           U2212,           U2210,             jot,           U044A ],
        symbols[Group2]= [     bracketleft,       braceleft ],
        symbols[Group3]= [     bracketleft,       braceleft ]
    };
    key <AD12> {
        type[group1]= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [      dead_acute,      dead_tilde,     dead_stroke, dead_abovecomma, dead_doubleacute,        NoSymbol,      dead_breve,        NoSymbol ],
        symbols[Group2]= [    bracketright,      braceright ],
        symbols[Group3]= [    bracketright,      braceright ]
    };
    key <RTRN> {         [          Return ] };
    key <LCTL> {         [       Control_L ] };
    key <AC01> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               h,               H,       backslash,       Greek_eta,           Prior,           U2194,           U210D,           U0445 ],
        symbols[Group2]= [               a,               A ],
        symbols[Group3]= [               a,               A ]
    };
    key <AC02> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               i,               I,           slash,      Greek_iota,            Left,           U2190,        integral,           U0438 ],
        symbols[Group2]= [               s,               S ],
        symbols[Group3]= [               s,               S ]
    };
    key <AC03> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               e,               E,       braceleft,   Greek_epsilon,            Down,           U2193,           U2200,           U044D ],
        symbols[Group2]= [               d,               D ],
        symbols[Group3]= [               d,               D ]
    };
    key <AC04> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               a,               A,      braceright,     Greek_alpha,           Right,           U2192,           U2135,           U044F ],
        symbols[Group2]= [               f,               F ],
        symbols[Group3]= [               f,               F ]
    };
    key <AC05> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               o,               O,        asterisk,   Greek_omicron,            Next,           U21A6,           U2207,           U043E ],
        symbols[Group2]= [               g,               G ],
        symbols[Group3]= [               g,               G ]
    };
    key <AC06> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               d,               D,      udiaeresis,     Greek_delta,          Return, partialderivative,     Greek_DELTA,           U0434 ],
        symbols[Group2]= [               h,               H ],
        symbols[Group3]= [               h,               H ]
    };
    key <AC07> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               t,               T,       parenleft,       Greek_tau,               1,            less,       U0001D54B,           U0442 ],
        symbols[Group2]= [               j,               J ],
        symbols[Group3]= [               j,               J ]
    };
    key <AC08> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               r,               R,      parenright,       Greek_rho,               2,           U2228,           U211D,           U0440 ],
        symbols[Group2]= [               k,               K ],
        symbols[Group3]= [               k,               K ]
    };
    key <AC09> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               n,               N,           minus,        Greek_nu,               3,         greater,           U2115,           U043D ],
        symbols[Group2]= [               l,               L ],
        symbols[Group3]= [               l,               L ]
    };
    key <AC10> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        symbols[Group1]= [               s,               S,           colon,     Greek_sigma,          period,           U2218,     Greek_SIGMA,           U0441 ],
        symbols[Group2]= [       semicolon,           colon ],
        symbols[Group3]= [       semicolon,           colon ]
    };
    key <AC11> {
        type[group1]= "ONE_LEVEL",
        symbols[Group1]= [ ISO_Level3_Shift ],
        symbols[Group2]= [      apostrophe,        quotedbl ],
        symbols[Group3]= [      apostrophe,        quotedbl ]
    };
    key <TLDE> {
        type[group1]= "ONE_LEVEL",
        symbols[Group1]= [         Shift_L ],
        symbols[Group2]= [           grave,      asciitilde ],
        symbols[Group3]= [           grave,      asciitilde ]
    };
    key <LFSH> {         [         Shift_L ] };
    key <BKSL> {
        type[group1]= "ONE_LEVEL",
        symbols[Group1]= [ ISO_Level3_Shift ],
        symbols[Group2]= [       backslash,             bar ],
        symbols[Group3]= [       backslash,             bar ]
    };
    key <AB01> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               k,               K,      numbersign,     Greek_kappa,          Escape,           U2199,       U0001D542,           U043A ],
        symbols[Group2]= [               z,               Z ],
        symbols[Group3]= [               z,               Z ]
    };
    key <AB02> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               y,               Y,          dollar,   Greek_upsilon,           U2219,           U22C4,       U0001D550,           U044E ],
        symbols[Group2]= [               x,               X ],
        symbols[Group3]= [               x,               X ]
    };
    key <AB03> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               x,               X,             bar,        Greek_xi,          ssharp,        emptyset,        Greek_XI,           U044B ],
        symbols[Group2]= [               c,               C ],
        symbols[Group3]= [               c,               C ]
    };
    key <AB04> {
        type[group1]= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [          period,          endash,      asciitilde,        Greek_pi,         notsign,           U2198,           U2261,           U0449 ],
        symbols[Group2]= [               v,               V ],
        symbols[Group3]= [               v,               V ]
    };
    key <AB05> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [ dead_circumflex,      dead_grave,           grave,       Greek_psi,              at,       elementof,       Greek_PSI,           U0446 ],
        symbols[Group2]= [               b,               B ],
        symbols[Group3]= [               b,               B ]
    };
    key <AB06> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               b,               B,            plus,      Greek_beta,             Tab,           U221E,           U05D1,           U0431 ],
        symbols[Group2]= [               n,               N ],
        symbols[Group3]= [               n,               N ]
    };
    key <AB07> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        type[group2]= "ALPHABETIC",
        type[group3]= "ALPHABETIC",
        symbols[Group1]= [               g,               G,         percent,     Greek_gamma,               7,         radical,     Greek_GAMMA,           U0433 ],
        symbols[Group2]= [               m,               M ],
        symbols[Group3]= [               m,               M ]
    };
    key <AB08> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        symbols[Group1]= [               z,               Z,      odiaeresis,      Greek_zeta,               8,           U2225,           U2124,           U0436 ],
        symbols[Group2]= [           comma,            less ],
        symbols[Group3]= [           comma,            less ]
    };
    key <AB09> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        symbols[Group1]= [               w,               W,           U1E9E,     Greek_omega,               9,           U2223,     Greek_OMEGA,           U0437 ],
        symbols[Group2]= [          period,         greater ],
        symbols[Group3]= [          period,         greater ]
    };
    key <AB10> {
        type[group1]= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        symbols[Group1]= [        question,           U1E9E,      odiaeresis,     Greek_theta,           comma,           U222B,     Greek_THETA,           U045A ],
        symbols[Group2]= [           slash,        question ],
        symbols[Group3]= [           slash,        question ]
    };
    key <RTSH> {         [         Shift_R ] };
    key <KPMU> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [     KP_Multiply,     KP_Multiply,           U22C5,           U2299,        multiply,        NoSymbol,           U2297,        NoSymbol ]
    };
    key <LALT> {         [           Alt_L,          Meta_L ] };
    key <SPCE> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [           space,           space,           space,    nobreakspace,            KP_0,            KP_0,           U202F,        NoSymbol ]
    };
    key <CAPS> {
        type= "ONE_LEVEL",
        symbols[Group1]= [ ISO_Level3_Shift ]
    };
    key <FK01> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F1,              F1,              F1,              F1, XF86Switch_VT_1 ]
    };
    key <FK02> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F2,              F2,              F2,              F2, XF86Switch_VT_2 ]
    };
    key <FK03> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F3,              F3,              F3,              F3, XF86Switch_VT_3 ]
    };
    key <FK04> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F4,              F4,              F4,              F4, XF86Switch_VT_4 ]
    };
    key <FK05> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F5,              F5,              F5,              F5, XF86Switch_VT_5 ]
    };
    key <FK06> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F6,              F6,              F6,              F6, XF86Switch_VT_6 ]
    };
    key <FK07> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F7,              F7,              F7,              F7, XF86Switch_VT_7 ]
    };
    key <FK08> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F8,              F8,              F8,              F8, XF86Switch_VT_8 ]
    };
    key <FK09> {
        type= "CTRL+ALT",
        symbols[Group1]= [              F9,              F9,              F9,              F9, XF86Switch_VT_9 ]
    };
    key <FK10> {
        type= "CTRL+ALT",
        symbols[Group1]= [             F10,             F10,             F10,             F10, XF86Switch_VT_10 ]
    };
    key <NMLK> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [             Tab,    ISO_Left_Tab,           equal,        approxeq,        notequal, Pointer_EnableKeys,       identical,        NoSymbol ]
    };
    key <SCLK> {
        type= "TWO_LEVEL",
        symbols[Group1]= [       Multi_key,       Multi_key ]
    };
    key  <KP7> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [            KP_7,           U2714,           U2195,           U226A,         KP_Home,         KP_Home,         upstile,        NoSymbol ]
    };
    key  <KP8> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [            KP_8,           U2718,         uparrow,    intersection,           KP_Up,           KP_Up,           U22C2,        NoSymbol ]
    };
    key  <KP9> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [            KP_9,          dagger,           U20D7,           U226B,        KP_Prior,        KP_Prior,           U2309,        NoSymbol ]
    };
    key <KPSU> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [     KP_Subtract,     KP_Subtract,           U2212,           U2296,           U2216,        NoSymbol,           U2238,        NoSymbol ]
    };
    key  <KP4> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [            KP_4,            club,       leftarrow,      includedin,         KP_Left,         KP_Left,           U2286,        NoSymbol ]
    };
    key  <KP5> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [            KP_5,        EuroSign,           colon,           U22B6,        KP_Begin,        KP_Begin,           U22B7,        NoSymbol ]
    };
    key  <KP6> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [            KP_6,           U2023,      rightarrow,        includes,        KP_Right,        KP_Right,           U2287,        NoSymbol ]
    };
    key <KPAD> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [          KP_Add,          KP_Add,       plusminus,           U2295,           U2213,        NoSymbol,           U2214,        NoSymbol ]
    };
    key  <KP1> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [            KP_1,         diamond,           U2194,   lessthanequal,          KP_End,          KP_End,       downstile,        NoSymbol ]
    };
    key  <KP2> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [            KP_2,           heart,       downarrow,           union,         KP_Down,         KP_Down,           U22C3,        NoSymbol ]
    };
    key  <KP3> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [            KP_3,           U2660,           U21CC, greaterthanequal,         KP_Next,         KP_Next,           U230B,        NoSymbol ]
    };
    key  <KP0> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [            KP_0,           U2423,         percent,           U2030,       KP_Insert,       KP_Insert,           U25A1,        NoSymbol ]
    };
    key <KPDL> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [    KP_Separator,          period,           comma,         minutes,       KP_Delete,       KP_Delete,         seconds,        NoSymbol ]
    };
    key <LVL3> {         [ ISO_Level3_Shift ] };
    key <LSGT> {
        type= "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK",
        symbols[Group1]= [          exclam,      Adiaeresis,      Adiaeresis, Greek_finalsmallsigma,          Escape,           U2199,        NoSymbol,           U0452 ]
    };
    key <FK11> {
        type= "CTRL+ALT",
        symbols[Group1]= [             F11,             F11,             F11,             F11, XF86Switch_VT_11 ]
    };
    key <FK12> {
        type= "CTRL+ALT",
        symbols[Group1]= [             F12,             F12,             F12,             F12, XF86Switch_VT_12 ]
    };
    key <KATA> {         [        Katakana ] };
    key <HIRA> {         [        Hiragana ] };
    key <HENK> {         [     Henkan_Mode ] };
    key <HKTG> {         [ Hiragana_Katakana ] };
    key <MUHE> {         [        Muhenkan ] };
    key <KPEN> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        KP_Enter,        NoSymbol ]
    };
    key <RCTL> {         [       Control_R ] };
    key <KPDV> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [       KP_Divide,       KP_Divide,        division,           U2300,           U2215,        NoSymbol,           U2223,        NoSymbol ]
    };
    key <PRSC> {
        type= "PC_ALT_LEVEL2",
        symbols[Group1]= [           Print,         Sys_Req ]
    };
    key <RALT> {
        type= "ONE_LEVEL",
        symbols[Group1]= [ ISO_Level5_Shift ]
    };
    key <LNFD> {         [        Linefeed ] };
    key <HOME> {         [            Home ] };
    key   <UP> {         [              Up ] };
    key <PGUP> {         [           Prior ] };
    key <LEFT> {         [            Left ] };
    key <RGHT> {         [           Right ] };
    key  <END> {         [             End ] };
    key <DOWN> {         [            Down ] };
    key <PGDN> {         [            Next ] };
    key  <INS> {         [          Insert ] };
    key <DELE> {         [          Delete ] };
    key <MUTE> {         [   XF86AudioMute ] };
    key <VOL-> {         [ XF86AudioLowerVolume ] };
    key <VOL+> {         [ XF86AudioRaiseVolume ] };
    key <POWR> {         [    XF86PowerOff ] };
    key <KPEQ> {
        type= "EIGHT_LEVEL_LEVEL_FIVE_LOCK",
        symbols[Group1]= [        KP_Equal,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol,        NoSymbol ]
    };
    key <I126> {         [       plusminus ] };
    key <PAUS> {
        type= "PC_CONTROL_LEVEL2",
        symbols[Group1]= [           Pause,           Break ]
    };
    key <I128> {         [     XF86LaunchA ] };
    key <I129> {         [      KP_Decimal,      KP_Decimal ] };
    key <HNGL> {         [          Hangul ] };
    key <HJCV> {         [    Hangul_Hanja ] };
    key <LWIN> {         [         Super_L ] };
    key <RWIN> {
        type= "ONE_LEVEL",
        symbols[Group1]= [ ISO_Level3_Shift ]
    };
    key <COMP> {         [            Menu ] };
    key <STOP> {         [          Cancel ] };
    key <AGAI> {         [            Redo ] };
    key <PROP> {         [        SunProps ] };
    key <UNDO> {         [            Undo ] };
    key <FRNT> {         [        SunFront ] };
    key <COPY> {         [        XF86Copy ] };
    key <OPEN> {         [        XF86Open ] };
    key <PAST> {         [       XF86Paste ] };
    key <FIND> {         [            Find ] };
    key  <CUT> {         [         XF86Cut ] };
    key <HELP> {         [            Help ] };
    key <I147> {         [      XF86MenuKB ] };
    key <I148> {         [  XF86Calculator ] };
    key <I150> {         [       XF86Sleep ] };
    key <I151> {         [      XF86WakeUp ] };
    key <I152> {         [    XF86Explorer ] };
    key <I153> {         [        XF86Send ] };
    key <I155> {         [        XF86Xfer ] };
    key <I156> {         [     XF86Launch1 ] };
    key <I157> {         [     XF86Launch2 ] };
    key <I158> {         [         XF86WWW ] };
    key <I159> {         [         XF86DOS ] };
    key <I160> {         [ XF86ScreenSaver ] };
    key <I161> {         [ XF86RotateWindows ] };
    key <I162> {         [    XF86TaskPane ] };
    key <I163> {         [        XF86Mail ] };
    key <I164> {         [   XF86Favorites ] };
    key <I165> {         [  XF86MyComputer ] };
    key <I166> {         [        XF86Back ] };
    key <I167> {         [     XF86Forward ] };
    key <I169> {         [       XF86Eject ] };
    key <I170> {         [       XF86Eject ] };
    key <I171> {         [   XF86AudioNext ] };
    key <I172> {         [   XF86AudioPlay,  XF86AudioPause ] };
    key <I173> {         [   XF86AudioPrev ] };
    key <I174> {         [   XF86AudioStop,       XF86Eject ] };
    key <I175> {         [ XF86AudioRecord ] };
    key <I176> {         [ XF86AudioRewind ] };
    key <I177> {         [       XF86Phone ] };
    key <I179> {         [       XF86Tools ] };
    key <I180> {         [    XF86HomePage ] };
    key <I181> {         [      XF86Reload ] };
    key <I182> {         [       XF86Close ] };
    key <I185> {         [    XF86ScrollUp ] };
    key <I186> {         [  XF86ScrollDown ] };
    key <I187> {         [       parenleft ] };
    key <I188> {         [      parenright ] };
    key <I189> {         [         XF86New ] };
    key <I190> {         [            Redo ] };
    key <FK13> {         [       XF86Tools ] };
    key <FK14> {         [     XF86Launch5 ] };
    key <FK15> {         [     XF86Launch6 ] };
    key <FK16> {         [     XF86Launch7 ] };
    key <FK17> {         [     XF86Launch8 ] };
    key <FK18> {         [     XF86Launch9 ] };
    key <FK20> {         [ XF86AudioMicMute ] };
    key <FK21> {         [ XF86TouchpadToggle ] };
    key <FK22> {         [  XF86TouchpadOn ] };
    key <FK23> {         [ XF86TouchpadOff ] };
    key <LVL5> {         [ ISO_Level5_Shift ] };
    key  <ALT> {         [        NoSymbol,           Alt_L ] };
    key <META> {         [        NoSymbol,          Meta_L ] };
    key <SUPR> {         [        NoSymbol,         Super_L ] };
    key <HYPR> {         [        NoSymbol,         Hyper_L ] };
    key <I208> {         [   XF86AudioPlay ] };
    key <I209> {         [  XF86AudioPause ] };
    key <I210> {         [     XF86Launch3 ] };
    key <I211> {         [     XF86Launch4 ] };
    key <I212> {         [     XF86LaunchB ] };
    key <I213> {         [     XF86Suspend ] };
    key <I214> {         [       XF86Close ] };
    key <I215> {         [   XF86AudioPlay ] };
    key <I216> {         [ XF86AudioForward ] };
    key <I218> {         [           Print ] };
    key <I220> {         [      XF86WebCam ] };
    key <I221> {         [ XF86AudioPreset ] };
    key <I223> {         [        XF86Mail ] };
    key <I224> {         [   XF86Messenger ] };
    key <I225> {         [      XF86Search ] };
    key <I226> {         [          XF86Go ] };
    key <I227> {         [     XF86Finance ] };
    key <I228> {         [        XF86Game ] };
    key <I229> {         [        XF86Shop ] };
    key <I231> {         [          Cancel ] };
    key <I232> {         [ XF86MonBrightnessDown ] };
    key <I233> {         [ XF86MonBrightnessUp ] };
    key <I234> {         [  XF86AudioMedia ] };
    key <I235> {         [     XF86Display ] };
    key <I236> {         [ XF86KbdLightOnOff ] };
    key <I237> {         [ XF86KbdBrightnessDown ] };
    key <I238> {         [ XF86KbdBrightnessUp ] };
    key <I239> {         [        XF86Send ] };
    key <I240> {         [       XF86Reply ] };
    key <I241> {         [ XF86MailForward ] };
    key <I242> {         [        XF86Save ] };
    key <I243> {         [   XF86Documents ] };
    key <I244> {         [     XF86Battery ] };
    key <I245> {         [   XF86Bluetooth ] };
    key <I246> {         [        XF86WLAN ] };
    key <I247> {         [         XF86UWB ] };
    key <I249> {         [  XF86Next_VMode ] };
    key <I250> {         [  XF86Prev_VMode ] };
    key <I251> {         [ XF86MonBrightnessCycle ] };
    key <I252> {         [ XF86BrightnessAuto ] };
    key <I253> {         [  XF86DisplayOff ] };
    key <I254> {         [        XF86WWAN ] };
    key <I255> {         [      XF86RFKill ] };
    modifier_map Control { <AE05> };
    modifier_map Lock { <AE10> };
    modifier_map Shift { <TLDE> };
    modifier_map Shift { <RTSH> };
    modifier_map Mod1 { <LALT> };
    modifier_map Mod5 { <LVL3> };
    modifier_map Control { <RCTL> };
    modifier_map Mod4 { <LWIN> };
    modifier_map Mod3 { <LVL5> };
    modifier_map Mod1 { <ALT> };
    modifier_map Mod1 { <META> };
    modifier_map Mod4 { <SUPR> };
    modifier_map Mod4 { <HYPR> };
};

};

[-- Attachment #2: Type: text/plain, Size: 462 bytes --]


Note that I the command produced the following warning:

> Warning:          Could not load keyboard geometry for :0
>                   BadName (named color or font does not exist)
>                   Resulting keymap file will not describe
>                   geometry

The keymap seems alright though. I've been modifying the
adnw-keymap because making a new one didn't really work with
the modifiers. Here is also my dual-function-keys config:


[-- Attachment #3: dual function keys config --]
[-- Type: file, Size: 2315 bytes --]

MAPPINGS:
  - KEY: KEY_SPACE
    TAP: KEY_SPACE
    HOLD: KEY_RIGHTCTRL

# Level 2 modifiers (Shift modifiers)

  - KEY: KEY_SLASH
    TAP: KEY_SLASH
    HOLD: KEY_RIGHTSHIFT

  - KEY: KEY_102ND
    TAP: KEY_102ND
    HOLD: KEY_LEFTSHIFT

# Level 3 modifiers (Special symbols)

  - KEY: KEY_APOSTROPHE
    TAP: KEY_F14
    HOLD: KEY_APOSTROPHE

  - KEY: KEY_CAPSLOCK
    TAP: KEY_F14
    HOLD: KEY_APOSTROPHE

# Level 4 modifiers (Lowercase Greek letters)

  - KEY: KEY_RIGHTSHIFT
    TAP: [KEY_CAPSLOCK, KEY_RIGHTSHIFT]
    HOLD: [KEY_CAPSLOCK, KEY_RIGHTSHIFT]

  - KEY: KEY_9
    TAP: KEY_KP9
    HOLD: [KEY_CAPSLOCK, KEY_LEFTSHIFT]

  - KEY: KEY_E
    TAP: KEY_E
    HOLD: [KEY_BACKSLASH, KEY_GRAVE]

# Level 5 modifiers (Numbers and Arrows)

  - KEY: KEY_LEFTALT
    TAP: KEY_F15
    HOLD: KEY_RIGHTALT 

  - KEY: KEY_RIGHTALT
    TAP: KEY_F15
    HOLD: KEY_RIGHTALT 

# Level 6 modifiers (Math symbols)

  - KEY: KEY_8
    TAP: KEY_SCROLLLOCK
    HOLD: [KEY_RIGHTALT, KEY_RIGHTSHIFT]

  - KEY: KEY_B
    TAP: KEY_B
    HOLD: [KEY_8, KEY_GRAVE]


# Level 7 modifiers (Uppercase Greek letters)

  - KEY: KEY_TAB
    TAP: KEY_SCROLLLOCK
    HOLD: [KEY_CAPSLOCK, KEY_RIGHTALT]

  - KEY: KEY_RIGHTBRACE
    TAP: KEY_RIGHTBRACE
    HOLD: [KEY_CAPSLOCK, KEY_RIGHTALT]

  - KEY: KEY_7
    TAP: KEY_SCROLLLOCK
    HOLD: [KEY_CAPSLOCK, KEY_RIGHTALT]

# Level 8 modifiers (Cyrillic letters)

  - KEY: KEY_COMPOSE
    TAP: KEY_KPASTERISK
    HOLD: [KEY_RIGHTALT, KEY_CAPSLOCK, KEY_RIGHTSHIFT]

  - KEY: KEY_LEFTSHIFT
    TAP: [KEY_RIGHTALT, KEY_CAPSLOCK, KEY_LEFTSHIFT]
    HOLD: [KEY_RIGHTALT, KEY_CAPSLOCK, KEY_LEFTSHIFT]

  - KEY: KEY_LEFTMETA
    TAP: KEY_KPSLASH
    HOLD: [KEY_RIGHTALT, KEY_CAPSLOCK, KEY_LEFTSHIFT]

  - KEY: KEY_6
    TAP: KEY_6
    HOLD: [KEY_RIGHTALT, KEY_CAPSLOCK, KEY_LEFTSHIFT]

  - KEY: KEY_RIGHTCTRL
    TAP: KEY_RIGHTCTRL
    HOLD: KEY_RIGHTCTRL
#    HOLD: [KEY_RIGHTALT, KEY_CAPSLOCK, KEY_RIGHTSHIFT]


# Use 2, 3, 4 and 5 keys to navigate between tabs and programs (3 key is configured in xkb) 

  - KEY: KEY_4
    TAP: KEY_LEFTMETA
    HOLD: KEY_LEFTALT

  - KEY: KEY_5
    TAP: KEY_RIGHTCTRL
    HOLD: KEY_RIGHTCTRL 

  - KEY: KEY_2
    TAP: [KEY_LEFTSHIFT, KEY_TAB]
    HOLD: [KEY_LEFTSHIFT, KEY_TAB]

  # - KEY: KEY_1
  #   TAP: [KEY_LEFTSHIFT, KEY_TAB] 
  #   HOLD: KEY_LEFTALT
x




[-- Attachment #4: Type: text/plain, Size: 978 bytes --]



Po Lu [2023-08-16 Wed 09:29] wrote:

> Alexander Prähauser <alexander.praehauser@gmx.at> writes:
>
>> Sorry for the late reply.
>>
>>> Which virtual modifier key have you assigned to the apostrophe 
>>> key?
>>
>> I've made the apostrophe key (AC11 in xkb) a level 3 switch 
>> through
>> the following function:
>>
>>> // The AC11 key (while pressed) chooses the third shift level.
>>> partial modifier_keys
>>> xkb_symbols "ac11_switch" {
>>>   key <AC11> {
>>>     type[Group1]="ONE_LEVEL",
>>>     symbols[Group1] = [ ISO_Level3_Shift ]
>>>   };
>>> };
>>
>> If tapped it sends an F14 signal (which I use in Emacs to 
>> insert math
>> symbols in cdlatex).
>
> I guess I still don't fully understand your XKB configuration. 
> Having
> access to the complete XKB configuration on your X server would 
> be a
> great help to that end.
>
> Would you please run:
>
>   xkbcomp -xkb $DISPLAY
>
> and attach each generated *.xkb file?


^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-16  7:50       ` Alexander Prähauser
@ 2023-08-16  8:02         ` Alexander Prähauser
  2023-08-16 12:51         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  1 sibling, 0 replies; 30+ messages in thread
From: Alexander Prähauser @ 2023-08-16  8:02 UTC (permalink / raw)
  To: Alexander Prähauser; +Cc: Po Lu, 65068


I just noticed that the last line in the dual-function-keys config 
contains an x I must have inadvertantly written in at
some point and not noticed because I hadn't restarted udevmon 
since. Please remove that x if you try it out, otherwise
it will produce an error.

Alexander Prähauser [2023-08-16 Wed 09:50] wrote:

> [1. xkb file --- text/plain; server-0.xkb]...
>
>
> Note that I the command produced the following warning:
>
>> Warning:          Could not load keyboard geometry for :0
>>                   BadName (named color or font does not exist)
>>                   Resulting keymap file will not describe
>> geometry
>
> The keymap seems alright though. I've been modifying the 
> adnw-keymap
> because making a new one didn't really work with
> the modifiers. Here is also my dual-function-keys config:
>
> [3. dual function keys config --- text/plain; 
> my-mappings.yaml]...
>
>
>
> Po Lu [2023-08-16 Wed 09:29] wrote:
>
>> Alexander Prähauser <alexander.praehauser@gmx.at> writes:
>>
>>> Sorry for the late reply.
>>>
>>>> Which virtual modifier key have you assigned to the 
>>>> apostrophe
>>>> key?
>>>
>>> I've made the apostrophe key (AC11 in xkb) a level 3 switch 
>>> through
>>> the following function:
>>>
>>>> // The AC11 key (while pressed) chooses the third shift 
>>>> level.
>>>> partial modifier_keys
>>>> xkb_symbols "ac11_switch" {
>>>>   key <AC11> {
>>>>     type[Group1]="ONE_LEVEL",
>>>>     symbols[Group1] = [ ISO_Level3_Shift ]
>>>>   };
>>>> };
>>>
>>> If tapped it sends an F14 signal (which I use in Emacs to 
>>> insert
>>> math
>>> symbols in cdlatex).
>>
>> I guess I still don't fully understand your XKB
>> configuration. Having
>> access to the complete XKB configuration on your X server would 
>> be a
>> great help to that end.
>>
>> Would you please run:
>>
>>   xkbcomp -xkb $DISPLAY
>>
>> and attach each generated *.xkb file?






^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-16  7:50       ` Alexander Prähauser
  2023-08-16  8:02         ` Alexander Prähauser
@ 2023-08-16 12:51         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-08-16 14:04           ` Alexander Prähauser
  1 sibling, 1 reply; 30+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-08-16 12:51 UTC (permalink / raw)
  To: Alexander Prähauser; +Cc: 65068


Thank you for providing these details.  Sadly, I still don't understand
how xkb-interception operates, so please also run:

  xinput test-xi2

then type the following sequence of keys with the window `xinput'
displays focused:

  press and release Caps Lock
  press and release Ctrl
  press Ctrl, then Caps Lock, before releasing Ctrl

and send me the output of `xinput'.  Thanks in advance.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-16 12:51         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-08-16 14:04           ` Alexander Prähauser
  2023-08-17  1:09             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 30+ messages in thread
From: Alexander Prähauser @ 2023-08-16 14:04 UTC (permalink / raw)
  To: Po Lu; +Cc: Alexander Prähauser, 65068


Since I normally use Space as Ctrl with interception I did the 
second two steps twice, with Space instead of Ctrl the
second time. The last two events were me closing the window using 
my mouse:

> [alex@Archlaptop ~]$ xinput test-xi2
> WARNING: running xinput against an Xwayland server. See the 
> xinput man page for details.
> ⎡ Virtual core pointer                    	id=2	[master 
> pointer  (3)]
> ⎜   ↳ Virtual core XTEST pointer              	id=4 
> [slave  pointer  (2)]
> ⎜   ↳ xwayland-pointer:15                     	id=6 
> [slave  pointer  (2)]
> ⎜   ↳ xwayland-relative-pointer:15            	id=7 
> [slave  pointer  (2)]
> ⎜   ↳ xwayland-pointer-gestures:15            	id=8 
> [slave  pointer  (2)]
> ⎣ Virtual core keyboard                   	id=3	[master 
> keyboard (2)]
>     ↳ Virtual core XTEST keyboard             	id=5 
>     [slave  keyboard (3)]
>     ↳ xwayland-keyboard:15                    	id=9 
>     [slave  keyboard (3)]
> EVENT type 9 (FocusIn)
>     device: 3 (3)
>     time:   7243828
>     windows: root 0x3cf event 0xc00001 child 0x0
>     mode: NotifyNormal (detail NotifyNonlinear)
>     flags:  [same screen]
>     buttons:
>     modifiers: locked 0 latched 0 base 0 effective: 0
>     group: locked 0 latched 0 base 0 effective: 0
>     root x/y:  268.00 / 153.00
>     event x/y: 178.00 / -20.00
> EVENT type 14 (RawKeyRelease)
>     device: 3 (9)
>     time:   7243838
>     detail: 36
>     valuators:

> EVENT type 3 (KeyRelease)
>     device: 3 (9)
>     time: 7243838
>     detail: 36
>     flags: 
>     root: 268.00/153.00
>     event: 178.00/-20.00
>     buttons:
>     modifiers: locked 0 latched 0 base 0 effective: 0
>     group: locked 0 latched 0 base 0 effective: 0
>     valuators:
>     windows: root 0x3cf event 0xc00001 child 0x0
> EVENT type 13 (RawKeyPress)
>     device: 3 (9)
>     time:   7244995
>     detail: 48
>     valuators:

> EVENT type 2 (KeyPress)
>     device: 3 (9)
>     time: 7244995
>     detail: 48
>     flags: 
>     root: 268.00/153.00
>     event: 178.00/-20.00
>     buttons:
>     modifiers: locked 0 latched 0 base 0 effective: 0
>     group: locked 0 latched 0 base 0 effective: 0
>     valuators:
>     windows: root 0x3cf event 0xc00001 child 0x0
> EVENT type 14 (RawKeyRelease)
>     device: 3 (9)
>     time:   7245351
>     detail: 48
>     valuators:

> EVENT type 3 (KeyRelease)
>     device: 3 (9)
>     time: 7245351
>     detail: 48
>     flags: 
>     root: 268.00/153.00
>     event: 178.00/-20.00
>     buttons:
>     modifiers: locked 0 latched 0 base 0x80 effective: 0x80
>     group: locked 0 latched 0 base 0 effective: 0
>     valuators:
>     windows: root 0x3cf event 0xc00001 child 0x0
> EVENT type 13 (RawKeyPress)
>     device: 3 (9)
>     time:   7246301
>     detail: 37
>     valuators:

> EVENT type 2 (KeyPress)
>     device: 3 (9)
>     time: 7246301
>     detail: 37
>     flags: 
>     root: 268.00/153.00
>     event: 178.00/-20.00
>     buttons:
>     modifiers: locked 0 latched 0 base 0 effective: 0
>     group: locked 0 latched 0 base 0 effective: 0
>     valuators:
>     windows: root 0x3cf event 0xc00001 child 0x0
> EVENT type 14 (RawKeyRelease)
>     device: 3 (9)
>     time:   7246520
>     detail: 37
>     valuators:

> EVENT type 3 (KeyRelease)
>     device: 3 (9)
>     time: 7246520
>     detail: 37
>     flags: 
>     root: 268.00/153.00
>     event: 178.00/-20.00
>     buttons:
>     modifiers: locked 0 latched 0 base 0 effective: 0
>     group: locked 0 latched 0 base 0 effective: 0
>     valuators:
>     windows: root 0x3cf event 0xc00001 child 0x0
> EVENT type 13 (RawKeyPress)
>     device: 3 (9)
>     time:   7247580
>     detail: 37
>     valuators:

> EVENT type 2 (KeyPress)
>     device: 3 (9)
>     time: 7247580
>     detail: 37
>     flags: 
>     root: 268.00/153.00
>     event: 178.00/-20.00
>     buttons:
>     modifiers: locked 0 latched 0 base 0 effective: 0
>     group: locked 0 latched 0 base 0 effective: 0
>     valuators:
>     windows: root 0x3cf event 0xc00001 child 0x0
> EVENT type 13 (RawKeyPress)
>     device: 3 (9)
>     time:   7247975
>     detail: 48
>     valuators:

> EVENT type 2 (KeyPress)
>     device: 3 (9)
>     time: 7247975
>     detail: 48
>     flags: 
>     root: 268.00/153.00
>     event: 178.00/-20.00
>     buttons:
>     modifiers: locked 0 latched 0 base 0 effective: 0
>     group: locked 0 latched 0 base 0 effective: 0
>     valuators:
>     windows: root 0x3cf event 0xc00001 child 0x0
> EVENT type 14 (RawKeyRelease)
>     device: 3 (9)
>     time:   7248180
>     detail: 48
>     valuators:

> EVENT type 3 (KeyRelease)
>     device: 3 (9)
>     time: 7248180
>     detail: 48
>     flags: 
>     root: 268.00/153.00
>     event: 178.00/-20.00
>     buttons:
>     modifiers: locked 0 latched 0 base 0x80 effective: 0x80
>     group: locked 0 latched 0 base 0 effective: 0
>     valuators:
>     windows: root 0x3cf event 0xc00001 child 0x0
> EVENT type 14 (RawKeyRelease)
>     device: 3 (9)
>     time:   7248552
>     detail: 37
>     valuators:

> EVENT type 3 (KeyRelease)
>     device: 3 (9)
>     time: 7248552
>     detail: 37
>     flags: 
>     root: 268.00/153.00
>     event: 178.00/-20.00
>     buttons:
>     modifiers: locked 0 latched 0 base 0 effective: 0
>     group: locked 0 latched 0 base 0 effective: 0
>     valuators:
>     windows: root 0x3cf event 0xc00001 child 0x0
> EVENT type 13 (RawKeyPress)
>     device: 3 (9)
>     time:   7249763
>     detail: 105
>     valuators:

> EVENT type 2 (KeyPress)
>     device: 3 (9)
>     time: 7249763
>     detail: 105
>     flags: 
>     root: 268.00/153.00
>     event: 178.00/-20.00
>     buttons:
>     modifiers: locked 0 latched 0 base 0 effective: 0
>     group: locked 0 latched 0 base 0 effective: 0
>     valuators:
>     windows: root 0x3cf event 0xc00001 child 0x0
> EVENT type 14 (RawKeyRelease)
>     device: 3 (9)
>     time:   7250099
>     detail: 105
>     valuators:

> EVENT type 3 (KeyRelease)
>     device: 3 (9)
>     time: 7250099
>     detail: 105
>     flags: 
>     root: 268.00/153.00
>     event: 178.00/-20.00
>     buttons:
>     modifiers: locked 0 latched 0 base 0x4 effective: 0x4
>     group: locked 0 latched 0 base 0 effective: 0
>     valuators:
>     windows: root 0x3cf event 0xc00001 child 0x0
> EVENT type 13 (RawKeyPress)
>     device: 3 (9)
>     time:   7251504
>     detail: 105
>     valuators:

> EVENT type 2 (KeyPress)
>     device: 3 (9)
>     time: 7251504
>     detail: 105
>     flags: 
>     root: 268.00/153.00
>     event: 178.00/-20.00
>     buttons:
>     modifiers: locked 0 latched 0 base 0 effective: 0
>     group: locked 0 latched 0 base 0 effective: 0
>     valuators:
>     windows: root 0x3cf event 0xc00001 child 0x0
> EVENT type 13 (RawKeyPress)
>     device: 3 (9)
>     time:   7252051
>     detail: 48
>     valuators:

> EVENT type 2 (KeyPress)
>     device: 3 (9)
>     time: 7252051
>     detail: 48
>     flags: 
>     root: 268.00/153.00
>     event: 178.00/-20.00
>     buttons:
>     modifiers: locked 0 latched 0 base 0x4 effective: 0x4
>     group: locked 0 latched 0 base 0 effective: 0
>     valuators:
>     windows: root 0x3cf event 0xc00001 child 0x0
> EVENT type 14 (RawKeyRelease)
>     device: 3 (9)
>     time:   7252342
>     detail: 48
>     valuators:

> EVENT type 3 (KeyRelease)
>     device: 3 (9)
>     time: 7252342
>     detail: 48
>     flags: 
>     root: 268.00/153.00
>     event: 178.00/-20.00
>     buttons:
>     modifiers: locked 0 latched 0 base 0x84 effective: 0x84
>     group: locked 0 latched 0 base 0 effective: 0
>     valuators:
>     windows: root 0x3cf event 0xc00001 child 0x0
> EVENT type 14 (RawKeyRelease)
>     device: 3 (9)
>     time:   7252568
>     detail: 105
>     valuators:

> EVENT type 3 (KeyRelease)
>     device: 3 (9)
>     time: 7252568
>     detail: 105
>     flags: 
>     root: 268.00/153.00
>     event: 178.00/-20.00
>     buttons:
>     modifiers: locked 0 latched 0 base 0x4 effective: 0x4
>     group: locked 0 latched 0 base 0 effective: 0
>     valuators:
>     windows: root 0x3cf event 0xc00001 child 0x0
> EVENT type 15 (RawButtonPress)
>     device: 2 (7)
>     time:   7256662
>     detail: 1
>     flags: 
>     valuators:

> EVENT type 16 (RawButtonRelease)
>     device: 2 (7)
>     time:   7256802
>     detail: 1
>     flags: 
>     valuators:

> X connection to :0 broken (explicit kill or server shutdown).


Po Lu [2023-08-16 Wed 20:51] wrote:

> Thank you for providing these details.  Sadly, I still don't 
> understand
> how xkb-interception operates, so please also run:
>
>   xinput test-xi2
>
> then type the following sequence of keys with the window 
> `xinput'
> displays focused:
>
>   press and release Caps Lock
>   press and release Ctrl
>   press Ctrl, then Caps Lock, before releasing Ctrl
>
> and send me the output of `xinput'.  Thanks in advance.






^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-16 14:04           ` Alexander Prähauser
@ 2023-08-17  1:09             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-08-17  2:37               ` Alexander Prähauser
  0 siblings, 1 reply; 30+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-08-17  1:09 UTC (permalink / raw)
  To: Alexander Prähauser; +Cc: 65068

Thanks.  Please instrument handle_one_xevent in xterm.c as follows:

diff --git a/src/xterm.c b/src/xterm.c
index 6a1642ff56e..a199bae9f16 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -23886,6 +23886,9 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 		  if (!XkbTranslateKeyCode (dpyinfo->xkb_desc, keycode,
 					    xkb_state, &mods_rtrn, &keysym))
 		    goto XI_OTHER;
+
+		  fprintf (stderr, "keycode: %d, keysym: %d, %u\n", keycode,
+			   (int) keysym, state);
 		}
 	      else
 		{

then tell me what is printed when you press Caps Lock (which appears to
be directly translated to AC11 prior to it ever being registered by the
X server), and also if the text changes if you press Caps Lock in
conjunction with Ctrl.





^ permalink raw reply related	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-17  1:09             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-08-17  2:37               ` Alexander Prähauser
  2023-08-17  2:45                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 30+ messages in thread
From: Alexander Prähauser @ 2023-08-17  2:37 UTC (permalink / raw)
  To: Po Lu; +Cc: Alexander Prähauser, 65068


How do I do that? I tried putting the code into a bash script and
it says `diff: unrecognized option '--git'`.

Po Lu [2023-08-17 Thu 09:09] wrote:

> Thanks.  Please instrument handle_one_xevent in xterm.c as
> follows:
>
> diff --git a/src/xterm.c b/src/xterm.c
> index 6a1642ff56e..a199bae9f16 100644
> --- a/src/xterm.c
> +++ b/src/xterm.c
> @@ -23886,6 +23886,9 @@ handle_one_xevent (struct x_display_info
> *dpyinfo,
>  		  if (!XkbTranslateKeyCode (dpyinfo->xkb_desc,
>  keycode,
>  					    xkb_state, &mods_rtrn,
>  &keysym))
>  		    goto XI_OTHER;
> +
> +		  fprintf (stderr, "keycode: %d, keysym: %d,
> %u\n", keycode,
> +			   (int) keysym, state);
>  		}
>  	      else
>  		{
>
> then tell me what is printed when you press Caps Lock (which
> appears to
> be directly translated to AC11 prior to it ever being registered
> by the
> X server), and also if the text changes if you press Caps Lock
> in
> conjunction with Ctrl.






^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-17  2:37               ` Alexander Prähauser
@ 2023-08-17  2:45                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-08-17  3:28                   ` Alexander Prähauser
  0 siblings, 1 reply; 30+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-08-17  2:45 UTC (permalink / raw)
  To: Alexander Prähauser; +Cc: 65068

Alexander Prähauser <alexander.praehauser@gmx.at> writes:

> How do I do that? I tried putting the code into a bash script and
> it says `diff: unrecognized option '--git'`.

You should save the entire diff into the kill ring, run:

  git apply -

then type:

  C-y
  C-q C-d RET





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-17  2:45                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-08-17  3:28                   ` Alexander Prähauser
  2023-08-17  4:41                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 30+ messages in thread
From: Alexander Prähauser @ 2023-08-17  3:28 UTC (permalink / raw)
  To: Po Lu; +Cc: Alexander Prähauser, 65068


It says

> error: src/xterm.c: No such file or directory

I also can't find xterm.c on my system, though I have xterm 
installed.


Po Lu [2023-08-17 Thu 10:45] wrote:

> Alexander Prähauser <alexander.praehauser@gmx.at> writes:
>
>> How do I do that? I tried putting the code into a bash script 
>> and
>> it says `diff: unrecognized option '--git'`.
>
> You should save the entire diff into the kill ring, run:
>
>   git apply -
>
> then type:
>
>   C-y
>   C-q C-d RET






^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-17  3:28                   ` Alexander Prähauser
@ 2023-08-17  4:41                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-08-19 13:35                       ` Alexander Prähauser
  0 siblings, 1 reply; 30+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-08-17  4:41 UTC (permalink / raw)
  To: Alexander Prähauser; +Cc: 65068

Alexander Prähauser <alexander.praehauser@gmx.at> writes:

> It says
>
>> error: src/xterm.c: No such file or directory
>
> I also can't find xterm.c on my system, though I have xterm installed.

Did you run that within the Git repository where your Emacs checkout
resides?

src/xterm.c is an Emacs source file.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-17  4:41                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-08-19 13:35                       ` Alexander Prähauser
  2023-08-23 11:02                         ` Alexander Prähauser
  0 siblings, 1 reply; 30+ messages in thread
From: Alexander Prähauser @ 2023-08-19 13:35 UTC (permalink / raw)
  To: Po Lu; +Cc: Alexander Prähauser, 65068


After I couldn't resolve the keyboard issue I reinstalled an old 
binary version from the Arch archives but I've now
downloaded the Emacs source files and tried to apply the patch in 
that local directory. However, I get the error
message:

> [alex@Archlaptop emacs]$ git apply -
> diff --git a/src/xterm.c b/src/xterm.c
> index 6a1642ff56e..a199bae9f16 100644
> --- a/src/xterm.c
> +++ b/src/xterm.c
> @@ -23886,6 +23886,9 @@ handle_one_xevent (struct x_display_info 
> *dpyinfo,
>  		  if (!XkbTranslateKeyCode (dpyinfo->xkb_desc, 
>  keycode,
>  					    xkb_state, &mods_rtrn, 
>  &keysym))
>  		    goto XI_OTHER;
> +
> +		  fprintf (stderr, "keycode: %d, keysym: %d, 
> %u\n", keycode,
> +			   (int) keysym, state);
>  		}
>  	      else
>  		{
> error: patch failed: src/xterm.c:23886
> error: src/xterm.c: patch does not apply

I tried again after compiling Emacs with make and got the same 
error. I didn't install that Emacs version though so not
to overwrite my current one. If necessary I can install a 
source-compiled Emacs version on another system though, but I
wanted to ask before if that might be useful.

Po Lu [2023-08-17 Thu 12:41] wrote:

> Alexander Prähauser <alexander.praehauser@gmx.at> writes:
>
>> It says
>>
>>> error: src/xterm.c: No such file or directory
>>
>> I also can't find xterm.c on my system, though I have xterm 
>> installed.
>
> Did you run that within the Git repository where your Emacs 
> checkout
> resides?
>
> src/xterm.c is an Emacs source file.






^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-19 13:35                       ` Alexander Prähauser
@ 2023-08-23 11:02                         ` Alexander Prähauser
  2023-08-23 11:39                           ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 30+ messages in thread
From: Alexander Prähauser @ 2023-08-23 11:02 UTC (permalink / raw)
  To: Po Lu; +Cc: 65068


So, what should I do next?

Alexander Prähauser [2023-08-19 Sat 15:35] wrote:

> After I couldn't resolve the keyboard issue I reinstalled an old
> binary version from the Arch archives but I've now
> downloaded the Emacs source files and tried to apply the patch 
> in that
> local directory. However, I get the error
> message:
>
>> [alex@Archlaptop emacs]$ git apply -
>> diff --git a/src/xterm.c b/src/xterm.c
>> index 6a1642ff56e..a199bae9f16 100644
>> --- a/src/xterm.c
>> +++ b/src/xterm.c
>> @@ -23886,6 +23886,9 @@ handle_one_xevent (struct 
>> x_display_info
>> *dpyinfo,
>>  		  if (!XkbTranslateKeyCode (dpyinfo->xkb_desc,
>> keycode,
>>  					    xkb_state, &mods_rtrn,
>> &keysym))
>>  		    goto XI_OTHER;
>> +
>> +		  fprintf (stderr, "keycode: %d, keysym: %d, 
>> %u\n",
>> keycode,
>> +			   (int) keysym, state);
>>  		}
>>  	      else
>>  		{
>> error: patch failed: src/xterm.c:23886
>> error: src/xterm.c: patch does not apply
>
> I tried again after compiling Emacs with make and got the same
> error. I didn't install that Emacs version though so not
> to overwrite my current one. If necessary I can install a
> source-compiled Emacs version on another system though, but I
> wanted to ask before if that might be useful.
>
> Po Lu [2023-08-17 Thu 12:41] wrote:
>
>> Alexander Prähauser <alexander.praehauser@gmx.at> writes:
>>
>>> It says
>>>
>>>> error: src/xterm.c: No such file or directory
>>>
>>> I also can't find xterm.c on my system, though I have xterm
>>> installed.
>>
>> Did you run that within the Git repository where your Emacs 
>> checkout
>> resides?
>>
>> src/xterm.c is an Emacs source file.






^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-23 11:02                         ` Alexander Prähauser
@ 2023-08-23 11:39                           ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-08-23 14:05                             ` Alexander Prähauser
  0 siblings, 1 reply; 30+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-08-23 11:39 UTC (permalink / raw)
  To: Alexander Prähauser; +Cc: 65068

Alexander Prähauser <alexander.praehauser@gmx.at> writes:

> So, what should I do next?

Assuming that you've applied the patch, press the problematic key
sequence and reply with the subsequent printouts.

TIA.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-23 11:39                           ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-08-23 14:05                             ` Alexander Prähauser
  2023-08-24  0:00                               ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 30+ messages in thread
From: Alexander Prähauser @ 2023-08-23 14:05 UTC (permalink / raw)
  To: Po Lu; +Cc: 65068


I've built emacs on another system with the same keyboard 
configuration, then applied the patch, then recompiled it and
started it from the terminal. The problem persists, but I got 
outputs in the console everytime I pressed a key, I'm
assuming due to the patch. The following is the output I got from 
tapping Space, then holding Space (so that it
functions as Ctrl), then holding Space and tapping CapsLock, then 
holding Space, holding CapsLock and tapping the U-key
(which should translate to the keyboard-sequence C-ö):

> keycode: 105, keysym: 65508, 0
> keycode: 65, keysym: 32, 0
> keycode: 105, keysym: 65508, 0
> keycode: 105, keysym: 65508, 0
> keycode: 48, keysym: 65027, 4
> keycode: 192, keysym: 269025093, 4
> keycode: 105, keysym: 65508, 0
> keycode: 48, keysym: 65027, 4
> keycode: 30, keysym: 246, 132




Po Lu [2023-08-23 Wed 19:39] wrote:

> Alexander Prähauser <alexander.praehauser@gmx.at> writes:
>
>> So, what should I do next?
>
> Assuming that you've applied the patch, press the problematic 
> key
> sequence and reply with the subsequent printouts.
>
> TIA.






^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-23 14:05                             ` Alexander Prähauser
@ 2023-08-24  0:00                               ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-08-24 11:06                                 ` Alexander Prähauser
  0 siblings, 1 reply; 30+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-08-24  0:00 UTC (permalink / raw)
  To: Alexander Prähauser; +Cc: 65068

Alexander Prähauser <alexander.praehauser@gmx.at> writes:

> I've built emacs on another system with the same keyboard
> configuration, then applied the patch, then recompiled it and
> started it from the terminal. The problem persists, but I got outputs
> in the console everytime I pressed a key, I'm
> assuming due to the patch. The following is the output I got from
> tapping Space, then holding Space (so that it
> functions as Ctrl), then holding Space and tapping CapsLock, then
> holding Space, holding CapsLock and tapping the U-key
> (which should translate to the keyboard-sequence C-ö):

Thanks; however, the keys I asked you to type were:

  press and release Caps Lock
  press and release Ctrl
  press Ctrl, then Caps Lock, before releasing Ctrl

I don't understand the pertinence of a ``U-key'' here, nor which key
that is.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-24 11:06                                 ` Alexander Prähauser
@ 2023-08-24  9:56                                   ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-08-24 14:12                                     ` Alexander Prähauser
  0 siblings, 1 reply; 30+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-08-24  9:56 UTC (permalink / raw)
  To: Alexander Prähauser; +Cc: 65068

Alexander Prähauser <alexander.praehauser@gmx.at> writes:

> The significance of the U-key is that when I press Space-CapsLock-U
> (or any other key, I think), it doesn't send the signal
> that is configured by xkb but the corresponding key of the default
> English keymap (u for the U-key), which really
> shouldn't happen. Anyway, here the output after pressing the sequence
> you wanted:
>
> keycode: 48, keysym: 65027, 0
> keycode: 192, keysym: 269025093, 0
> keycode: 37, keysym: 65507, 0
> keycode: 37, keysym: 65507, 0 <- Control_R
> keycode: 48, keysym: 65027, 0 <- AC11, ISO_Level3_Shift
> keycode: 192, keysym: 269025093, <- XF86Launch5

This attests to Emacs registering the keysyms you meant it to.  If
ISO_Level3_Shift is registered as a modifier key, it should not be
translated into keyboard input afterwards, let alone the original
apostrophe symbol.

Does this patch resolve your problems with typing level 3 characters
coupled with Control?

diff --git a/src/xterm.c b/src/xterm.c
index 6a1642ff56e..7391041ea0c 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -23734,6 +23734,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 	      ptrdiff_t i;
 	      unsigned int old_state;
 	      struct xi_device_t *device, *source;
+	      bool is_modifier_key;
 
 	      coding = Qlatin_1;
 
@@ -24175,17 +24176,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 		       /* Any "vendor-specific" key is ok.  */
 		       || (keysym & (1 << 28))
 		       || (keysym != NoSymbol && nbytes == 0))
-		      && ! (IsModifierKey (keysym)
-			    /* The symbols from XK_ISO_Lock
-			       to XK_ISO_Last_Group_Lock
-			       don't have real modifiers but
-			       should be treated similarly to
-			       Mode_switch by Emacs. */
-#if defined XK_ISO_Lock && defined XK_ISO_Last_Group_Lock
-			    || (XK_ISO_Lock <= keysym
-				&& keysym <= XK_ISO_Last_Group_Lock)
-#endif
-			    ))
+		      && !is_modifier_key)
 		    {
 		      STORE_KEYSYM_FOR_DEBUG (keysym);
 		      /* make_lispy_event will convert this to a symbolic
@@ -24204,7 +24195,11 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 		      STORE_KEYSYM_FOR_DEBUG (copy_bufptr[i]);
 		    }
 
-		  if (nbytes)
+		  /* Mind that NBYTES can be set even if KEYSYM
+		     represents a modifier key, but that no character
+		     events should be sent in that case.  */
+
+		  if (nbytes && !is_modifier_key)
 		    {
 		      inev.ie.kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT;
 		      inev.ie.arg = make_unibyte_string (copy_bufptr, nbytes);





^ permalink raw reply related	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-24  0:00                               ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-08-24 11:06                                 ` Alexander Prähauser
  2023-08-24  9:56                                   ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 30+ messages in thread
From: Alexander Prähauser @ 2023-08-24 11:06 UTC (permalink / raw)
  To: Po Lu; +Cc: 65068


The significance of the U-key is that when I press 
Space-CapsLock-U (or any other key, I think), it doesn't send the 
signal
that is configured by xkb but the corresponding key of the default 
English keymap (u for the U-key), which really
shouldn't happen. Anyway, here the output after pressing the 
sequence you wanted:

keycode: 48, keysym: 65027, 0
keycode: 192, keysym: 269025093, 0
keycode: 37, keysym: 65507, 0
keycode: 37, keysym: 65507, 0
keycode: 48, keysym: 65027, 0
keycode: 192, keysym: 269025093, 0


Po Lu [2023-08-24 Thu 08:00] wrote:

> Alexander Prähauser <alexander.praehauser@gmx.at> writes:
>
>> I've built emacs on another system with the same keyboard
>> configuration, then applied the patch, then recompiled it and
>> started it from the terminal. The problem persists, but I got 
>> outputs
>> in the console everytime I pressed a key, I'm
>> assuming due to the patch. The following is the output I got 
>> from
>> tapping Space, then holding Space (so that it
>> functions as Ctrl), then holding Space and tapping CapsLock, 
>> then
>> holding Space, holding CapsLock and tapping the U-key
>> (which should translate to the keyboard-sequence C-ö):
>
> Thanks; however, the keys I asked you to type were:
>
>   press and release Caps Lock
>   press and release Ctrl
>   press Ctrl, then Caps Lock, before releasing Ctrl
>
> I don't understand the pertinence of a ``U-key'' here, nor which 
> key
> that is.






^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-24 14:12                                     ` Alexander Prähauser
@ 2023-08-24 12:41                                       ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-08-24 15:34                                         ` Alexander Prähauser
  0 siblings, 1 reply; 30+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-08-24 12:41 UTC (permalink / raw)
  To: Alexander Prähauser; +Cc: 65068

Alexander Prähauser <alexander.praehauser@gmx.at> writes:

> It does seem to register the correct level shifts now, but it seems to
> evaluate each key immediately after having been
> pressed. For instance, when I press Space-CapsLock-U, this should
> evaluate to C-; and it does, but this is the output
> I'm receiving in-between:
>
> <Control_R> is undefined
> C-' is undefined
> C-; is undefined
>
> Po Lu [2023-08-24 Thu 17:56] wrote:
>
>> Alexander Prähauser <alexander.praehauser@gmx.at> writes:
>>
>>> The significance of the U-key is that when I press Space-CapsLock-U
>>> (or any other key, I think), it doesn't send the signal
>>> that is configured by xkb but the corresponding key of the default
>>> English keymap (u for the U-key), which really
>>> shouldn't happen. Anyway, here the output after pressing the
>>> sequence
>>> you wanted:
>>>
>>> keycode: 48, keysym: 65027, 0
>>> keycode: 192, keysym: 269025093, 0
>>> keycode: 37, keysym: 65507, 0
>>> keycode: 37, keysym: 65507, 0 <- Control_R
>>> keycode: 48, keysym: 65027, 0 <- AC11, ISO_Level3_Shift
>>> keycode: 192, keysym: 269025093, <- XF86Launch5
>>
>> This attests to Emacs registering the keysyms you meant it to. If
>> ISO_Level3_Shift is registered as a modifier key, it should not be
>> translated into keyboard input afterwards, let alone the original
>> apostrophe symbol.
>>
>> Does this patch resolve your problems with typing level 3 characters
>> coupled with Control?
>>
>> diff --git a/src/xterm.c b/src/xterm.c
>> index 6a1642ff56e..7391041ea0c 100644
>> --- a/src/xterm.c
>> +++ b/src/xterm.c
>> @@ -23734,6 +23734,7 @@ handle_one_xevent (struct x_display_info
>> *dpyinfo,
>>  	      ptrdiff_t i;
>>  	      unsigned int old_state;
>>  	      struct xi_device_t *device, *source;
>> +	      bool is_modifier_key;
>>   	      coding = Qlatin_1;
>>  @@ -24175,17 +24176,7 @@ handle_one_xevent (struct x_display_info
>> *dpyinfo,
>>  		       /* Any "vendor-specific" key is ok.  */
>>  		       || (keysym & (1 << 28))
>>  		       || (keysym != NoSymbol && nbytes == 0))
>> -		      && ! (IsModifierKey (keysym)
>> -			    /* The symbols from XK_ISO_Lock
>> -			       to XK_ISO_Last_Group_Lock
>> -			       don't have real modifiers but
>> -			       should be treated similarly to
>> -			       Mode_switch by Emacs. */
>> -#if defined XK_ISO_Lock && defined XK_ISO_Last_Group_Lock
>> -			    || (XK_ISO_Lock <= keysym
>> -				&& keysym <= XK_ISO_Last_Group_Lock)
>> -#endif
>> -			    ))
>> +		      && !is_modifier_key)
>>  		    {
>>  		      STORE_KEYSYM_FOR_DEBUG (keysym);
>>  		      /* make_lispy_event will convert this to a
>> symbolic
>> @@ -24204,7 +24195,11 @@ handle_one_xevent (struct x_display_info
>> *dpyinfo,
>>  		      STORE_KEYSYM_FOR_DEBUG (copy_bufptr[i]);
>>  		    }
>>  -		  if (nbytes)
>> +		  /* Mind that NBYTES can be set even if KEYSYM
>> +		     represents a modifier key, but that no character
>> +		     events should be sent in that case.  */
>> +
>> +		  if (nbytes && !is_modifier_key)
>>  		    {
>>  		      inev.ie.kind =  MULTIBYTE_CHAR_KEYSTROKE_EVENT;
>>  		      inev.ie.arg = make_unibyte_string  (copy_bufptr,
>> nbytes);

Please excuse my carelessness, I appear to have ommitted a chunk of the
diff:

diff --git a/src/xterm.c b/src/xterm.c
index 6a1642ff56e..4b2da066694 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -23734,6 +23734,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 	      ptrdiff_t i;
 	      unsigned int old_state;
 	      struct xi_device_t *device, *source;
+	      bool is_modifier_key;
 
 	      coding = Qlatin_1;
 
@@ -24091,6 +24092,18 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 		      goto xi_done_keysym;
 		    }
 
+		  is_modifier_key = (IsModifierKey (keysym)
+				     /* The symbols from XK_ISO_Lock
+					to XK_ISO_Last_Group_Lock
+					don't have real modifiers but
+					should be treated similarly to
+					Mode_switch by Emacs. */
+#if defined XK_ISO_Lock && defined XK_ISO_Last_Group_Lock
+				     || (XK_ISO_Lock <= keysym
+					 && keysym <= XK_ISO_Last_Group_Lock)
+#endif
+				     );
+
 		  /* Random non-modifier sorts of keysyms.  */
 		  if (((keysym >= XK_BackSpace && keysym <= XK_Escape)
 		       || keysym == XK_Delete
@@ -24175,17 +24188,7 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 		       /* Any "vendor-specific" key is ok.  */
 		       || (keysym & (1 << 28))
 		       || (keysym != NoSymbol && nbytes == 0))
-		      && ! (IsModifierKey (keysym)
-			    /* The symbols from XK_ISO_Lock
-			       to XK_ISO_Last_Group_Lock
-			       don't have real modifiers but
-			       should be treated similarly to
-			       Mode_switch by Emacs. */
-#if defined XK_ISO_Lock && defined XK_ISO_Last_Group_Lock
-			    || (XK_ISO_Lock <= keysym
-				&& keysym <= XK_ISO_Last_Group_Lock)
-#endif
-			    ))
+		      && !is_modifier_key)
 		    {
 		      STORE_KEYSYM_FOR_DEBUG (keysym);
 		      /* make_lispy_event will convert this to a symbolic
@@ -24204,7 +24207,11 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 		      STORE_KEYSYM_FOR_DEBUG (copy_bufptr[i]);
 		    }
 
-		  if (nbytes)
+		  /* Mind that NBYTES can be set even if KEYSYM
+		     represents a modifier key, but that no character
+		     events should be sent in that case.  */
+
+		  if (nbytes && !is_modifier_key)
 		    {
 		      inev.ie.kind = MULTIBYTE_CHAR_KEYSTROKE_EVENT;
 		      inev.ie.arg = make_unibyte_string (copy_bufptr, nbytes);





^ permalink raw reply related	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-24  9:56                                   ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-08-24 14:12                                     ` Alexander Prähauser
  2023-08-24 12:41                                       ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 30+ messages in thread
From: Alexander Prähauser @ 2023-08-24 14:12 UTC (permalink / raw)
  To: Po Lu; +Cc: 65068


It does seem to register the correct level shifts now, but it 
seems to evaluate each key immediately after having been
pressed. For instance, when I press Space-CapsLock-U, this should 
evaluate to C-; and it does, but this is the output
I'm receiving in-between:

<Control_R> is undefined
C-' is undefined
C-; is undefined

Po Lu [2023-08-24 Thu 17:56] wrote:

> Alexander Prähauser <alexander.praehauser@gmx.at> writes:
>
>> The significance of the U-key is that when I press 
>> Space-CapsLock-U
>> (or any other key, I think), it doesn't send the signal
>> that is configured by xkb but the corresponding key of the 
>> default
>> English keymap (u for the U-key), which really
>> shouldn't happen. Anyway, here the output after pressing the 
>> sequence
>> you wanted:
>>
>> keycode: 48, keysym: 65027, 0
>> keycode: 192, keysym: 269025093, 0
>> keycode: 37, keysym: 65507, 0
>> keycode: 37, keysym: 65507, 0 <- Control_R
>> keycode: 48, keysym: 65027, 0 <- AC11, ISO_Level3_Shift
>> keycode: 192, keysym: 269025093, <- XF86Launch5
>
> This attests to Emacs registering the keysyms you meant it to. 
> If
> ISO_Level3_Shift is registered as a modifier key, it should not 
> be
> translated into keyboard input afterwards, let alone the 
> original
> apostrophe symbol.
>
> Does this patch resolve your problems with typing level 3 
> characters
> coupled with Control?
>
> diff --git a/src/xterm.c b/src/xterm.c
> index 6a1642ff56e..7391041ea0c 100644
> --- a/src/xterm.c
> +++ b/src/xterm.c
> @@ -23734,6 +23734,7 @@ handle_one_xevent (struct x_display_info 
> *dpyinfo,
>  	      ptrdiff_t i;
>  	      unsigned int old_state;
>  	      struct xi_device_t *device, *source;
> +	      bool is_modifier_key;
>  
>  	      coding = Qlatin_1;
>  
> @@ -24175,17 +24176,7 @@ handle_one_xevent (struct 
> x_display_info *dpyinfo,
>  		       /* Any "vendor-specific" key is ok.  */
>  		       || (keysym & (1 << 28))
>  		       || (keysym != NoSymbol && nbytes == 0))
> -		      && ! (IsModifierKey (keysym)
> -			    /* The symbols from XK_ISO_Lock
> -			       to XK_ISO_Last_Group_Lock
> -			       don't have real modifiers but
> -			       should be treated similarly to
> -			       Mode_switch by Emacs. */
> -#if defined XK_ISO_Lock && defined XK_ISO_Last_Group_Lock
> -			    || (XK_ISO_Lock <= keysym
> -				&& keysym <= 
> XK_ISO_Last_Group_Lock)
> -#endif
> -			    ))
> +		      && !is_modifier_key)
>  		    {
>  		      STORE_KEYSYM_FOR_DEBUG (keysym);
>  		      /* make_lispy_event will convert this to a 
>  symbolic
> @@ -24204,7 +24195,11 @@ handle_one_xevent (struct 
> x_display_info *dpyinfo,
>  		      STORE_KEYSYM_FOR_DEBUG (copy_bufptr[i]);
>  		    }
>  
> -		  if (nbytes)
> +		  /* Mind that NBYTES can be set even if KEYSYM
> +		     represents a modifier key, but that no 
> character
> +		     events should be sent in that case.  */
> +
> +		  if (nbytes && !is_modifier_key)
>  		    {
>  		      inev.ie.kind = 
>  MULTIBYTE_CHAR_KEYSTROKE_EVENT;
>  		      inev.ie.arg = make_unibyte_string 
>  (copy_bufptr, nbytes);






^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-24 12:41                                       ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-08-24 15:34                                         ` Alexander Prähauser
  2023-08-25  2:49                                           ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 30+ messages in thread
From: Alexander Prähauser @ 2023-08-24 15:34 UTC (permalink / raw)
  To: Po Lu; +Cc: 65068


Now when I press for instance Space, it doesn't seem to evaluate 
immediately, but it does evaluate when I
press another dual-function-modified key. So if I press the same 
sequence as below the first message doesn't appear but
the second one does.

Po Lu [2023-08-24 Thu 20:41] wrote:

> Alexander Prähauser <alexander.praehauser@gmx.at> writes:
>
>> It does seem to register the correct level shifts now, but it 
>> seems to
>> evaluate each key immediately after having been
>> pressed. For instance, when I press Space-CapsLock-U, this 
>> should
>> evaluate to C-; and it does, but this is the output
>> I'm receiving in-between:
>>
>> <Control_R> is undefined
>> C-' is undefined
>> C-; is undefined
>>
>> Po Lu [2023-08-24 Thu 17:56] wrote:
>>
>>> Alexander Prähauser <alexander.praehauser@gmx.at> writes:
>>>
>>>> The significance of the U-key is that when I press 
>>>> Space-CapsLock-U
>>>> (or any other key, I think), it doesn't send the signal
>>>> that is configured by xkb but the corresponding key of the 
>>>> default
>>>> English keymap (u for the U-key), which really
>>>> shouldn't happen. Anyway, here the output after pressing the
>>>> sequence
>>>> you wanted:
>>>>
>>>> keycode: 48, keysym: 65027, 0
>>>> keycode: 192, keysym: 269025093, 0
>>>> keycode: 37, keysym: 65507, 0
>>>> keycode: 37, keysym: 65507, 0 <- Control_R
>>>> keycode: 48, keysym: 65027, 0 <- AC11, ISO_Level3_Shift
>>>> keycode: 192, keysym: 269025093, <- XF86Launch5
>>>
>>> This attests to Emacs registering the keysyms you meant it 
>>> to. If
>>> ISO_Level3_Shift is registered as a modifier key, it should 
>>> not be
>>> translated into keyboard input afterwards, let alone the 
>>> original
>>> apostrophe symbol.
>>>
>>> Does this patch resolve your problems with typing level 3 
>>> characters
>>> coupled with Control?
>>>
>>> diff --git a/src/xterm.c b/src/xterm.c
>>> index 6a1642ff56e..7391041ea0c 100644
>>> --- a/src/xterm.c
>>> +++ b/src/xterm.c
>>> @@ -23734,6 +23734,7 @@ handle_one_xevent (struct 
>>> x_display_info
>>> *dpyinfo,
>>>  	      ptrdiff_t i;
>>>  	      unsigned int old_state;
>>>  	      struct xi_device_t *device, *source;
>>> +	      bool is_modifier_key;
>>>   	      coding = Qlatin_1;
>>>  @@ -24175,17 +24176,7 @@ handle_one_xevent (struct 
>>>  x_display_info
>>> *dpyinfo,
>>>  		       /* Any "vendor-specific" key is ok.  */
>>>  		       || (keysym & (1 << 28))
>>>  		       || (keysym != NoSymbol && nbytes == 0))
>>> -		      && ! (IsModifierKey (keysym)
>>> -			    /* The symbols from XK_ISO_Lock
>>> -			       to XK_ISO_Last_Group_Lock
>>> -			       don't have real modifiers but
>>> -			       should be treated similarly to
>>> -			       Mode_switch by Emacs. */
>>> -#if defined XK_ISO_Lock && defined XK_ISO_Last_Group_Lock
>>> -			    || (XK_ISO_Lock <= keysym
>>> -				&& keysym <= 
>>> XK_ISO_Last_Group_Lock)
>>> -#endif
>>> -			    ))
>>> +		      && !is_modifier_key)
>>>  		    {
>>>  		      STORE_KEYSYM_FOR_DEBUG (keysym);
>>>  		      /* make_lispy_event will convert this to a
>>> symbolic
>>> @@ -24204,7 +24195,11 @@ handle_one_xevent (struct 
>>> x_display_info
>>> *dpyinfo,
>>>  		      STORE_KEYSYM_FOR_DEBUG (copy_bufptr[i]);
>>>  		    }
>>>  -		  if (nbytes)
>>> +		  /* Mind that NBYTES can be set even if KEYSYM
>>> +		     represents a modifier key, but that no 
>>> character
>>> +		     events should be sent in that case.  */
>>> +
>>> +		  if (nbytes && !is_modifier_key)
>>>  		    {
>>>  		      inev.ie.kind = 
>>>  MULTIBYTE_CHAR_KEYSTROKE_EVENT;
>>>  		      inev.ie.arg = make_unibyte_string 
>>>  (copy_bufptr,
>>> nbytes);
>
> Please excuse my carelessness, I appear to have ommitted a chunk 
> of the
> diff:
>
> diff --git a/src/xterm.c b/src/xterm.c
> index 6a1642ff56e..4b2da066694 100644
> --- a/src/xterm.c
> +++ b/src/xterm.c
> @@ -23734,6 +23734,7 @@ handle_one_xevent (struct x_display_info 
> *dpyinfo,
>  	      ptrdiff_t i;
>  	      unsigned int old_state;
>  	      struct xi_device_t *device, *source;
> +	      bool is_modifier_key;
>  
>  	      coding = Qlatin_1;
>  
> @@ -24091,6 +24092,18 @@ handle_one_xevent (struct 
> x_display_info *dpyinfo,
>  		      goto xi_done_keysym;
>  		    }
>  
> +		  is_modifier_key = (IsModifierKey (keysym)
> +				     /* The symbols from 
> XK_ISO_Lock
> +					to XK_ISO_Last_Group_Lock
> +					don't have real modifiers 
> but
> +					should be treated 
> similarly to
> +					Mode_switch by Emacs. */
> +#if defined XK_ISO_Lock && defined XK_ISO_Last_Group_Lock
> +				     || (XK_ISO_Lock <= keysym
> +					 && keysym <= 
> XK_ISO_Last_Group_Lock)
> +#endif
> +				     );
> +
>  		  /* Random non-modifier sorts of keysyms.  */
>  		  if (((keysym >= XK_BackSpace && keysym <= 
>  XK_Escape)
>  		       || keysym == XK_Delete
> @@ -24175,17 +24188,7 @@ handle_one_xevent (struct 
> x_display_info *dpyinfo,
>  		       /* Any "vendor-specific" key is ok.  */
>  		       || (keysym & (1 << 28))
>  		       || (keysym != NoSymbol && nbytes == 0))
> -		      && ! (IsModifierKey (keysym)
> -			    /* The symbols from XK_ISO_Lock
> -			       to XK_ISO_Last_Group_Lock
> -			       don't have real modifiers but
> -			       should be treated similarly to
> -			       Mode_switch by Emacs. */
> -#if defined XK_ISO_Lock && defined XK_ISO_Last_Group_Lock
> -			    || (XK_ISO_Lock <= keysym
> -				&& keysym <= 
> XK_ISO_Last_Group_Lock)
> -#endif
> -			    ))
> +		      && !is_modifier_key)
>  		    {
>  		      STORE_KEYSYM_FOR_DEBUG (keysym);
>  		      /* make_lispy_event will convert this to a 
>  symbolic
> @@ -24204,7 +24207,11 @@ handle_one_xevent (struct 
> x_display_info *dpyinfo,
>  		      STORE_KEYSYM_FOR_DEBUG (copy_bufptr[i]);
>  		    }
>  
> -		  if (nbytes)
> +		  /* Mind that NBYTES can be set even if KEYSYM
> +		     represents a modifier key, but that no 
> character
> +		     events should be sent in that case.  */
> +
> +		  if (nbytes && !is_modifier_key)
>  		    {
>  		      inev.ie.kind = 
>  MULTIBYTE_CHAR_KEYSTROKE_EVENT;
>  		      inev.ie.arg = make_unibyte_string 
>  (copy_bufptr, nbytes);






^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-24 15:34                                         ` Alexander Prähauser
@ 2023-08-25  2:49                                           ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-08-25 10:11                                             ` Alexander Prähauser
  0 siblings, 1 reply; 30+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-08-25  2:49 UTC (permalink / raw)
  To: Alexander Prähauser; +Cc: 65068

Alexander Prähauser <alexander.praehauser@gmx.at> writes:

> Now when I press for instance Space, it doesn't seem to evaluate
> immediately, but it does evaluate when I
> press another dual-function-modified key. So if I press the same
> sequence as below the first message doesn't appear but
> the second one does.

Please pull from the master branch and ascertain if your issues have
been resolved.  TIA.






^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-25 10:11                                             ` Alexander Prähauser
@ 2023-08-25  8:23                                               ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
       [not found]                                                 ` <87o7iv34z0.FSF@yahoo.com>
  0 siblings, 1 reply; 30+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-08-25  8:23 UTC (permalink / raw)
  To: Alexander Prähauser; +Cc: 65068

Alexander Prähauser <alexander.praehauser@gmx.at> writes:

> I stashed the patch and pulled from the master branch, then ran make
> and make install, then restarted Emacs. Now when I
> press Space-CapsLock I get C-' is undefined
> C-<XF86Launch5> is undefined

That's very strange, as the XI keyboard mapping code should now be
equivalent to the core event code.  What if you run Emacs with:

  src/emacs -q -xrm 'Emacs.disableInputExtension: true'

?





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-25  2:49                                           ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-08-25 10:11                                             ` Alexander Prähauser
  2023-08-25  8:23                                               ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 30+ messages in thread
From: Alexander Prähauser @ 2023-08-25 10:11 UTC (permalink / raw)
  To: Po Lu; +Cc: 65068


I stashed the patch and pulled from the master branch, then ran 
make and make install, then restarted Emacs. Now when I
press Space-CapsLock I get 

C-' is undefined
C-<XF86Launch5> is undefined

Po Lu [2023-08-25 Fri 10:49] wrote:

> Alexander Prähauser <alexander.praehauser@gmx.at> writes:
>
>> Now when I press for instance Space, it doesn't seem to 
>> evaluate
>> immediately, but it does evaluate when I
>> press another dual-function-modified key. So if I press the 
>> same
>> sequence as below the first message doesn't appear but
>> the second one does.
>
> Please pull from the master branch and ascertain if your issues 
> have
> been resolved.  TIA.






^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
       [not found]                                                 ` <87o7iv34z0.FSF@yahoo.com>
@ 2023-08-25 10:36                                                   ` Alexander Prähauser
  2023-08-26  1:39                                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 30+ messages in thread
From: Alexander Prähauser @ 2023-08-25 10:36 UTC (permalink / raw)
  To: Po Lu; +Cc: 65068


When I press Space-CapsLock there, exactly the same thing happens, 
and similar for other combinations. BTW, I'm
currently experimenting with StumpWM and they seem to have a 
similar problem. If we can fix this here, maybe we can tell
them what the solution.

Po Lu [2023-08-25 Fri 16:23] wrote:

> Alexander Prähauser <alexander.praehauser@gmx.at> writes:
>
>> I stashed the patch and pulled from the master branch, then ran 
>> make
>> and make install, then restarted Emacs. Now when I
>> press Space-CapsLock I get C-' is undefined
>> C-<XF86Launch5> is undefined
>
> That's very strange, as the XI keyboard mapping code should now 
> be
> equivalent to the core event code.  What if you run Emacs with:
>
>   src/emacs -q -xrm 'Emacs.disableInputExtension: true'
>
> ?






^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-25 10:36                                                   ` Alexander Prähauser
@ 2023-08-26  1:39                                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-08-26 11:39                                                       ` Alexander Prähauser
  0 siblings, 1 reply; 30+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-08-26  1:39 UTC (permalink / raw)
  To: Alexander Prähauser; +Cc: 65068

Alexander Prähauser <alexander.praehauser@gmx.at> writes:

> When I press Space-CapsLock there, exactly the same thing happens, and
> similar for other combinations.

How about now?





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-26 11:39                                                       ` Alexander Prähauser
@ 2023-08-26 10:01                                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  2023-08-26 10:08                                                           ` Eli Zaretskii
  0 siblings, 1 reply; 30+ messages in thread
From: Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-08-26 10:01 UTC (permalink / raw)
  To: Alexander Prähauser; +Cc: Eli Zaretskii, 65068-done

Alexander Prähauser <alexander.praehauser@gmx.at> writes:

> It works! Thanks so much! Finally I can transition to the new Emacs
> version! Say, can you write a high-level summary about what you did so
> I can send it to the Stumpwm-people?

The remedy is disabling non-standard behavior imposed by the XFree86 XKB
library, through changing the ControlFallback X library control:

#ifdef XkbLC_ControlFallback
  XkbSetXlibControls (dpyinfo->display, XkbLC_ControlFallback, 0);
#endif /* XkbLC_ControlFallback */

Otherwise, XLookupString (and XmbLookupString) endeavor to locate an
ASCII character within a different group if ControlMask is set and the
standard means of keycode mapping produce a function key.  In your case,
the keycode array for AC11 still assigned ASCII characters to groups 2
through 4; consequently, group 2 would be consulted in lieu of the key
event's effective group.

I'm closing this bug as fixed; Eli, do you object to installing a
three-line fix incorporating only the code quoted in this e-mail on
emacs-29?





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-26 10:01                                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-08-26 10:08                                                           ` Eli Zaretskii
  0 siblings, 0 replies; 30+ messages in thread
From: Eli Zaretskii @ 2023-08-26 10:08 UTC (permalink / raw)
  To: Po Lu; +Cc: alexander.praehauser, 65068-done

> From: Po Lu <luangruo@yahoo.com>
> Cc: 65068-done@debbugs.gnu.org, Eli Zaretskii <eliz@gnu.org>
> Date: Sat, 26 Aug 2023 18:01:59 +0800
> 
> Eli, do you object to installing a three-line fix incorporating only
> the code quoted in this e-mail on emacs-29?

Please feel free to backport to emacs-29, and thanks.





^ permalink raw reply	[flat|nested] 30+ messages in thread

* bug#65068: 29.1; xkb-interception interaction causes problems with key combinations
  2023-08-26  1:39                                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2023-08-26 11:39                                                       ` Alexander Prähauser
  2023-08-26 10:01                                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
  0 siblings, 1 reply; 30+ messages in thread
From: Alexander Prähauser @ 2023-08-26 11:39 UTC (permalink / raw)
  To: Po Lu; +Cc: Alexander Prähauser, 65068


It works! Thanks so much! Finally I can transition to the new 
Emacs version! Say, can you write a high-level summary about what 
you did so I can send it to the Stumpwm-people?

Po Lu [2023-08-26 Sat 09:39] wrote:

> Alexander Prähauser <alexander.praehauser@gmx.at> writes:
>
>> When I press Space-CapsLock there, exactly the same thing 
>> happens, and
>> similar for other combinations.
>
> How about now?






^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2023-08-26 11:39 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <87v8dv2ib3.fsf@gmx.at>
2023-08-09  0:02 ` bug#65068: 29.1; xkb-interception interaction causes problems with key combinations Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-08-15 13:31   ` Alexander Prähauser
2023-08-16  1:29     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-08-16  7:50       ` Alexander Prähauser
2023-08-16  8:02         ` Alexander Prähauser
2023-08-16 12:51         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-08-16 14:04           ` Alexander Prähauser
2023-08-17  1:09             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-08-17  2:37               ` Alexander Prähauser
2023-08-17  2:45                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-08-17  3:28                   ` Alexander Prähauser
2023-08-17  4:41                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-08-19 13:35                       ` Alexander Prähauser
2023-08-23 11:02                         ` Alexander Prähauser
2023-08-23 11:39                           ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-08-23 14:05                             ` Alexander Prähauser
2023-08-24  0:00                               ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-08-24 11:06                                 ` Alexander Prähauser
2023-08-24  9:56                                   ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-08-24 14:12                                     ` Alexander Prähauser
2023-08-24 12:41                                       ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-08-24 15:34                                         ` Alexander Prähauser
2023-08-25  2:49                                           ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-08-25 10:11                                             ` Alexander Prähauser
2023-08-25  8:23                                               ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
     [not found]                                                 ` <87o7iv34z0.FSF@yahoo.com>
2023-08-25 10:36                                                   ` Alexander Prähauser
2023-08-26  1:39                                                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-08-26 11:39                                                       ` Alexander Prähauser
2023-08-26 10:01                                                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-08-26 10:08                                                           ` Eli Zaretskii

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.