// // File : qwerty-l.xkb // Project page : https://github.com/fabi1cazenave/qwerty-lafayette // Author : Fabien Cazenave // Version : 0.6.0 // Last change : 2018-04-02 // License : WTFPL - Do What The Fuck You Want Public License // // French (Qwerty-Lafayette) // // To apply this keymap, use: // xkbcomp -w9 qwerty-l.xkb $DISPLAY // xkb_keymap { xkb_keycodes { include "evdev" }; xkb_types { include "complete" }; xkb_compatibility { include "complete" }; // Base layer + dead key // ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━━┓ // │ ~ │ ! ¡ │ @ ‘ │ # ’ │ $ ¢ │ % ‰ │ ^ │ & │ * ★ │ ( │ ) │ _ – │ + ± ┃ ┃ // │ ` │ 1 „ │ 2 “ │ 3 ” │ 4 £ │ 5 € │ 6 │ 7 | │ 8 ∞ │ 9 │ 0 ° │ - — │ = ≠ ┃ ⌫ ┃ // ┢━━━━━┷━━┱──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┺━━┳━━━━━━━┫ // ┃ ┃ Q │ W │ E │ R ™ │ T │ Y ¤ │ U │ I │ O │ P ¶ │ « { │ » } ┃ ┃ // ┃ ↹ ┃ æ │ é │ è │ ® │ þ │ ¥ │ ù │ ij │ œ │ § │ ̂ [ │ ̈ ] ┃ ┃ // ┣━━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ⏎ ┃ // ┃ ┃ A │ S │ D │ F ª │ G │ H │ J │ K │ L │ ⃡ │ " │ | ┃ ┃ // ┃ ⇬ ┃ à │ ß │ ð │ ſ │ © │ ← │ ↓ │ ↑ │ → │ ⃡ ` │ ' │ \ ┃ ┃ // ┣━━━━━━┳━━┹──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┲━━┷━━━━━┻━━━━━━┫ // ┃ ┃ > ≥ │ Z │ X │ C │ V │ B │ N │ M º │ ; • │ : │ ? ¿ ┃ ┃ // ┃ ⇧ ┃ < ≤ │ < │ > │ ç │ ŭ │ † │ ñ │ µ │ , · │ . … │ / \ ┃ ⇧ ┃ // ┣━━━━━━┻┳━━━━┷━━┳━━┷━━━━┱┴─────┴─────┴─────┴─────┴─────┴─┲━━━┷━━━┳━┷━━━━━╋━━━━━━━┳━━━━━━━┫ // ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ // ┃ Ctrl ┃ super ┃ Alt ┃ ␣ ┃ AltGr ┃ super ┃ menu ┃ Ctrl ┃ // ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┛ // AltGr layer // ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━━┓ // │ ̃ │ │ « │ » │ ́ │ ̈ │ ̂ │ ⁷ │ ⁸ │ ⁹ │ ÷ │ │ ┃ ┃ // │ ̀ │ ! │ ( │ ) │ ' │ " │ ^ │ 7 │ 8 │ 9 │ / │ │ ┃ ⌫ ┃ // ┢━━━━━┷━━┱──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┺━━┳━━━━━━━┫ // ┃ ┃ ≠ │ │ │ — │ ± │ │ ⁴ │ ⁵ │ ⁶ │ × │ │ ┃ ┃ // ┃ ↹ ┃ = │ < │ > │ - │ + │ │ 4 │ 5 │ 6 │ * │ │ ┃ ┃ // ┣━━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ⏎ ┃ // ┃ ┃ │ │ │ │ │ │ ¹ │ ² │ ³ │ − │ ̇ │ ┃ ┃ // ┃ ⇬ ┃ { │ [ │ ] │ } │ / │ │ 1 │ 2 │ 3 │ - │ ́ │ ┃ ┃ // ┣━━━━━━┳━━┹──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┲━━┷━━━━━┻━━━━━━┫ // ┃ ┃ │ ̃ │ ̀ │ │ – │ │ │ ⁰ │ │ │ ¬ ┃ ┃ // ┃ ⇧ ┃ │ ~ │ ` │ | │ _ │ \ │ │ 0 │ , │ . │ + ┃ ⇧ ┃ // ┣━━━━━━┻┳━━━━┷━━┳━━┷━━━━┱┴─────┴─────┴─────┴─────┴─────┴─┲━━━┷━━━┳━┷━━━━━╋━━━━━━━┳━━━━━━━┫ // ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ // ┃ Ctrl ┃ super ┃ Alt ┃ ␣ ┃ AltGr ┃ super ┃ menu ┃ Ctrl ┃ // ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┛ partial alphanumeric_keys modifier_keys xkb_symbols "lafayette" { include "pc" // The “OneDeadKey” is an ISO_Level3_Latch, i.e. a “dead AltGr” key. // This is the only way to have a multi-purpose dead key with XKB. // The real AltGr key should be an ISO_Level5_Switch; however, // ISO_Level5_Switch does not work as expected when applying this layout // with xkbcomp, so let’s use two groups instead and make the AltGr key a // group selector. name[group1]= "French (Qwerty-Lafayette)"; name[group2]= "AltGr"; key.type[group1] = "FOUR_LEVEL"; key.type[group2] = "TWO_LEVEL"; // Options // include "capslock(swapescape)" // Swap CapsLock and Escape -- Vim powwa! // include "compose(menu)" // Compose on the 'Menu' key // Digits key {[ 1 , exclam , U201E , exclamdown ],[ exclam , VoidSymbol ]}; // 1 ! „ ¡ ! key {[ 2 , at , U201C , U2018 ],[ parenleft , guillemotleft ]}; // 2 @ “ ‘ ( « key {[ 3 , numbersign , U201D , U2019 ],[ parenright , guillemotright ]}; // 3 # ” ’ ) » key {[ 4 , dollar , sterling , cent ],[ apostrophe , dead_acute ]}; // 4 $ £ ¢ ' ´ key {[ 5 , percent , EuroSign , U2030 ],[ quotedbl , dead_diaeresis ]}; // 5 % € ‰ " ¨ key {[ 6 , asciicircum , VoidSymbol , VoidSymbol ],[ asciicircum , dead_circumflex ]}; // 6 ^ ^ ^ key {[ 7 , ampersand , bar , brokenbar ],[ 7 , U2077 ]}; // 7 & | ¦ 7 ⁷ key {[ 8 , asterisk , infinity , U2605 ],[ 8 , U2078 ]}; // 8 * ∞ ★ 8 ⁸ key {[ 9 , parenleft , VoidSymbol , VoidSymbol ],[ 9 , U2079 ]}; // 9 ( 9 ⁹ key {[ 0 , parenright , degree , VoidSymbol ],[ slash , division ]}; // 0 ) ° / ÷ // Letters, first row key {[ q , Q , ae , AE ],[ equal , notequal ]}; // q Q æ Æ = ≠ key {[ w , W , eacute , Eacute ],[ less , lessthanequal ]}; // w W é É < ≤ key {[ e , E , egrave , Egrave ],[ greater , greaterthanequal]}; // e E è È > ≥ key {[ r , R , registered , trademark ],[ minus , emdash ]}; // r R ® ™ - — key {[ t , T , thorn , Thorn ],[ plus , plusminus ]}; // t T þ Þ + ± key {[ y , Y , yen , currency ],[ VoidSymbol , VoidSymbol ]}; // y Y ¥ ¤ key {[ u , U , ugrave , Ugrave ],[ 4 , U2074 ]}; // u U ù Ù 4 ⁴ key {[ i , I , U0133 , U0132 ],[ 5 , U2075 ]}; // i I ij IJ 5 ⁵ key {[ o , O , oe , OE ],[ 6 , U2076 ]}; // o O œ Œ 6 ⁶ key {[ p , P , section , paragraph ],[ asterisk , multiply ]}; // p P § ¶ * × // Letters, second row key {[ a , A , agrave , Agrave ],[ braceleft , VoidSymbol ]}; // a A à À { key {[ s , S , ssharp , U1E9E ],[ bracketleft , VoidSymbol ]}; // s S ß ẞ [ key {[ d , D , eth , Eth ],[ bracketright , VoidSymbol ]}; // d D ð Ð ] key {[ f , F , U017F , ordfeminine ],[ braceright , VoidSymbol ]}; // f F ſ ª } key {[ g , G , copyright , VoidSymbol ],[ slash , VoidSymbol ]}; // g G © / key {[ h , H , leftarrow , U21D0 ],[ VoidSymbol , VoidSymbol ]}; // h H ← ⇐ key {[ j , J , downarrow , U21D3 ],[ 1 , onesuperior ]}; // j J ↓ ⇓ 1 ¹ key {[ k , K , uparrow , U21D1 ],[ 2 , twosuperior ]}; // k K ↑ ⇑ 2 ² key {[ l , L , rightarrow , U21D2 ],[ 3 , threesuperior ]}; // l L → ⇒ 3 ³ key {[ ISO_Level3_Latch, ISO_Level3_Latch, grave , VoidSymbol ],[ minus , U2212 ]}; // ` ` ` - − // Letters, third row key {[ z , Z , less , lessthanequal ],[ asciitilde , dead_tilde ]}; // z Z < ≤ ~ ~ key {[ x , X , greater , greaterthanequal],[ grave , dead_grave ]}; // x X > ≥ ` ` key {[ c , C , ccedilla , Ccedilla ],[ bar , brokenbar ]}; // c C ç Ç | ¦ key {[ v , V , ubreve , Ubreve ],[ underscore , endash ]}; // v V ŭ Ŭ _ – key {[ b , B , dagger , doubledagger ],[ backslash , VoidSymbol ]}; // b B † ‡ \ key {[ n , N , ntilde , Ntilde ],[ VoidSymbol , VoidSymbol ]}; // n N ñ Ñ key {[ m , M , mu , masculine ],[ 0 , U2070 ]}; // m M µ º 0 ⁰ key {[ comma , semicolon , periodcentered , U2022 ],[ comma , VoidSymbol ]}; // , ; · • , key {[ period , colon , ellipsis , VoidSymbol ],[ period , VoidSymbol ]}; // . : … . key {[ slash , question , backslash , questiondown ],[ plus , notsign ]}; // / ? \ ¿ + ¬ // Pinky keys key {[ grave , asciitilde , VoidSymbol , VoidSymbol ],[ dead_grave , dead_tilde ]}; // ` ~ ` ~ key {[ minus , underscore , emdash , endash ],[ VoidSymbol , VoidSymbol ]}; // - _ — – key {[ equal , plus , notequal , plusminus ],[ VoidSymbol , VoidSymbol ]}; // = + ≠ ± key {[ dead_circumflex , guillemotleft , bracketleft , braceleft ],[ VoidSymbol , VoidSymbol ]}; // ^ « [ { key {[ dead_diaeresis , guillemotright , bracketright , braceright ],[ VoidSymbol , VoidSymbol ]}; // ¨ » ] } key {[ apostrophe , quotedbl , VoidSymbol , VoidSymbol ],[ dead_acute , dead_abovedot ]}; // ' " ´ ˙ key {[ backslash , bar , VoidSymbol , VoidSymbol ],[ VoidSymbol , VoidSymbol ]}; // \ | key {[ less , greater , lessthanequal , greaterthanequal],[ VoidSymbol , VoidSymbol ]}; // < > ≤ ≥ // Space bar key {[ space , nobreakspace , U2019 , U2019 ],[ nobreakspace , U202F ]}; //   ’ ’ // AltGr // Note: the `ISO_Level5_Latch` here is meaningless but helps with Chromium // (no idea why). key { type = "TWO_LEVEL", symbols = [ ISO_Level5_Latch, ISO_Level5_Latch ], actions = [ SetGroup(group=2), SetGroup(group=2) ] }; }; //xkb_geometry { include "pc(pc105)" }; }; // vim: ft=xkb:fdm=indent:ts=2