* 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 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 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 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 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 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 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 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
[parent not found: <87o7iv34z0.FSF@yahoo.com>]
* 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 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
* 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
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.