//------------------------------------------------------------------------------ // XKB Custom french keyboard (flawless) // 2012-10-30 //------------------------------------------------------------------------------ // Installation: copy this file to '/usr/{local/,}share/X11/xkb/symbols'. You // can use it by selecting the "frex" layout from Xorg configuration file, or by // using the following command: // setxkbmap frex // This is used to fix the conflicts generated by chain-includes from original // files. // List of common issues // * Right-Ctrl does not behave like Left-Ctrl. // * A lot of warning are reported by setxkbmap (you can see them in the TTY). // * Ctrl+Space generates a space instead of ^@ (which is used by Emacs). partial default alphanumeric_keys xkb_symbols "basic" { // Default for latin languages. include "latin" // Original "level3(ralt_switch)" is messy, so we use our own one (see below). include "frex(ralt_switch)" // Not very useful? include "nbsp(level4n)" // Useless if you do not have level5 keys. // include "level5(rctrl_switch)" // Not so common keypad. Might be messy. // include "keypad(oss)" // Here follows the Xorg "oss" variant of the french keyboard. name[Group1]="French (alternative)"; // First row key { [ twosuperior, threesuperior, onesuperior, dead_cedilla ] }; // ² ³ ¹ ¸ key { [ ampersand, 1, dead_caron, dead_ogonek ] }; // & 1 ˇ ̨ key { [ eacute, 2, asciitilde, Eacute ] }; // é 2 ~ É key { [ quotedbl, 3, numbersign, dead_breve ] }; // " 3 # ˘ key { [ apostrophe, 4, braceleft, 0x1002014 ] }; // ' 4 { — (tiret cadratin) key { [ parenleft, 5, bracketleft, 0x1002013 ] }; // ( 5 [ – (tiret demi-cadratin) key { [ minus, 6, bar, 0x1002011 ] }; // - 6 | ‑ (tiret insécable) key { [ egrave, 7, grave, Egrave ] }; // è 7 ` È key { [ underscore, 8, backslash, trademark ] }; // _ 8 \ ™ key { [ ccedilla, 9, asciicircum, Ccedilla ] }; // ç 9 ^ Ç key { [ agrave, 0, at, Agrave ] }; // à 0 @ À key { [ parenright, degree, bracketright, notequal ] }; // ) ° ] ≠ key { [ equal, plus, braceright, plusminus ] }; // = + } ± // Second row key { [ a, A, ae, AE ] }; // a A æ Æ key { [ z, Z, acircumflex, Acircumflex ] }; // z Z â  key { [ e, E, EuroSign, cent ] }; // e E € ¢ key { [ r, R, ecircumflex, Ecircumflex ] }; // r R ê Ê key { [ t, T, thorn, THORN ] }; // t T þ Þ key { [ y, Y, ydiaeresis, Ydiaeresis ] }; // y Y ÿ Ÿ key { [ u, U, ucircumflex, Ucircumflex ] }; // u U û Û key { [ i, I, icircumflex, Icircumflex ] }; // i I î Î key { [ o, O, oe, OE ] }; // o O œ Œ key { [ p, P, ocircumflex, Ocircumflex ] }; // p P ô Ô key { [ dead_circumflex, dead_diaeresis, dead_tilde, dead_abovering ] }; // ^ ̈ ̃ ˚ key { [ dollar, sterling, oslash, Ooblique ] }; // $ £ ø Ø // Third row key { [ q, Q, adiaeresis, Adiaeresis ] }; // q Q ä Ä key { [ s, S, ssharp, doublelowquotemark ] }; // s S ß „ key { [ d, D, ediaeresis, Ediaeresis ] }; // d D ë Ë key { [ f, F, leftsinglequotemark, singlelowquotemark ] }; // f F ‘ ‚ key { [ g, G, rightsinglequotemark, yen ] }; // g G ’ ¥ key { [ h, H, eth, ETH ] }; // h H ð Ð key { [ j, J, udiaeresis, Udiaeresis ] }; // j J ü Ü key { [ k, K, idiaeresis, Idiaeresis ] }; // k K ï Ï key { [ l, L, 0x1000140, 0x100013F ] }; // l L ŀ Ŀ key { [ m, M, odiaeresis, Odiaeresis ] }; // m M ö Ö key { [ ugrave, percent, dead_acute, Ugrave ] }; // ù % ' Ù key { [ asterisk, mu, dead_grave, dead_macron ] }; // * µ ` ̄ // Fourth row key { [ less, greater, lessthanequal, greaterthanequal ] }; // < > ≤ ≥ key { [ w, W, guillemotleft, leftdoublequotemark ] }; // w W « “ key { [ x, X, guillemotright, rightdoublequotemark ] }; // x X » ” key { [ c, C, copyright, registered ] }; // c C © ® key { [ v, V, 0x100202F, leftarrow ] }; // v V ⍽ ← (espace fine insécable) key { [ b, B, downarrow, uparrow ] }; // b B ↓ ↑ key { [ n, N, notsign, rightarrow ] }; // n N ¬ → key { [ comma, question, questiondown, 0x1002026 ] }; // , ? ¿ … key { [ semicolon, period, multiply, 0x10022C5 ] }; // ; . × ⋅ key { [ colon, slash, division, 0x1002215 ] }; // : / ÷ ∕ key { [ exclam, section, exclamdown, 0x1002212 ] }; // ! § ¡ − }; // RALT (a.k.a. Alt_Gr) modifier. // // The Xorg issue comes from 'symbol/pc(pc104)' where RALT is defined as a // // type[Group1]="TWO_LEVEL" // // whereas it is defined as a // // type[Group1]="ONE_LEVEL" // // in 'level3'. Since we do not want to change the original file, there is two // possible fixes: // // * Instead of using 'level3', we use our own TWO_LEVEL definition. // // * We use our own reimplementation of pc104. The user needs to specify the new // geometry explicitely, either in Xorg config or with setxkbmap. // // TODO: if the next section is put before the alphabetical section, it messes up. Why? partial modifier_keys xkb_symbols "ralt_switch" { key { type[Group1]="TWO_LEVEL", symbols[Group1] = [ ISO_Level3_Shift , ISO_Level3_Shift ] }; modifier_map Mod5 { ISO_Level3_Shift }; };