From da9b4e29cca056d257150c34758083317bafa6ce Mon Sep 17 00:00:00 2001 From: nicolas <821778+novalic@users.noreply.github.com> Date: Tue, 9 Aug 2022 23:50:38 +0300 Subject: [PATCH] adds keyboard layout file and updates readme --- README.md | 33 +- mapping.png | Bin 0 -> 65214 bytes rc | 1981 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2013 insertions(+), 1 deletion(-) create mode 100644 mapping.png create mode 100644 rc diff --git a/README.md b/README.md index 95fef4e..6c41781 100644 --- a/README.md +++ b/README.md @@ -1 +1,32 @@ -# eng_rus_keyboard_mapping \ No newline at end of file +# English - Russian keyboard mapping + +This is my custom mapping for russian alphabet in my english keyboard in Ubuntu. +I did this to avoid buying keyboard stickers for the usual Russian keyboard layout while I was learning Russian language. + + +## How to install + +_Ubuntu 20.04.4 LTS_ + +1) Copy the file `rc` to the directory `/usr/share/X11/xkb/symbols` +2) Edit the file `/usr/share/X11/xkb/rules/evdev.xml: + 1) Find the section layoutlist. + 2) Add the following: + ```xml + + + rc + rc + RussianCustom + + cod + + + + + + ``` + +## Mapping + +![Mapping](mapping.png) diff --git a/mapping.png b/mapping.png new file mode 100644 index 0000000000000000000000000000000000000000..8b2a956d892ebad0d1c296a0da457660bc2aa2b8 GIT binary patch literal 65214 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 +// 2001/12/23 by Leon Kanter +// 2005/12/09 Valery Inozemtsev +// 2018/07/15 @a13 (a.k.a. @dbvvmpg) and Stepanenko Andrey +// 2022/04/01 Nicolas Novalic + +// Windows layout +default partial alphanumeric_keys +xkb_symbols "winkeys" { + + include "ru(common)" + name[Group1]= "RussianCustom"; + + key { [ comma, period ] }; + key { [ 1, exclam ] }; + key { [ 2, at ] }; + key { [ 3, numbersign ] }; + key { [ 4, dollar ] }; + key { [ 5, percent ] }; + key { [ 6, asciicircum ] }; + key { [ 7, ampersand ] }; + key { [ 8, asterisk ] }; + key { [ 9, parenleft ] }; + key { [ 0, parenright ] }; + key { [ apostrophe, quotedbl ] }; + key { [ equal, question ] }; + + key { [ Cyrillic_io, Cyrillic_IO ] }; + key { [ Cyrillic_shcha, Cyrillic_SHCHA ] }; + key { [ Cyrillic_ie, Cyrillic_IE ] }; + key { [ Cyrillic_er, Cyrillic_ER ] }; + key { [ Cyrillic_te, Cyrillic_TE ] }; + key { [ Cyrillic_yeru, Cyrillic_YERU ] }; + key { [ Cyrillic_u, Cyrillic_U ] }; + key { [ Cyrillic_i, Cyrillic_I ] }; + key { [ Cyrillic_o, Cyrillic_O ] }; + key { [ Cyrillic_pe, Cyrillic_PE ] }; + key { [ Cyrillic_che, Cyrillic_CHE ] }; + key { [ Cyrillic_sha, Cyrillic_SHA ] }; + + key { [ Cyrillic_a, Cyrillic_A ] }; + key { [ Cyrillic_es, Cyrillic_ES ] }; + key { [ Cyrillic_de, Cyrillic_DE ] }; + key { [ Cyrillic_ef, Cyrillic_EF ] }; + key { [ Cyrillic_ghe, Cyrillic_GHE ] }; + key { [ Cyrillic_en, Cyrillic_EN ] }; + key { [ Cyrillic_shorti, Cyrillic_SHORTI ] }; + key { [ Cyrillic_ka, Cyrillic_KA ] }; + key { [ Cyrillic_el, Cyrillic_EL ] }; + key { [ Cyrillic_ya, Cyrillic_YA ] }; + key { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] }; + + key { [ Cyrillic_ze, Cyrillic_ZE ] }; + key { [ Cyrillic_ha, Cyrillic_HA ] }; + key { [ Cyrillic_tse, Cyrillic_TSE ] }; + key { [ Cyrillic_ve, Cyrillic_VE ] }; + key { [ Cyrillic_be, Cyrillic_BE ] }; + key { [ Cyrillic_en, Cyrillic_EN ] }; + key { [ Cyrillic_em, Cyrillic_EM ] }; + key { [ Cyrillic_yu, Cyrillic_YU ] }; + key { [ Cyrillic_e, Cyrillic_E ] }; + key { [ Cyrillic_hardsign, Cyrillic_HARDSIGN ] }; + + key { [ Cyrillic_zhe, Cyrillic_ZHE ] }; +}; + +partial alphanumeric_keys +xkb_symbols "euro" { + + include "us(basic)" + name[Group1]= "English (US, euro on 5)"; + + include "eurosign(5)" + + include "level3(ralt_switch)" +}; + + +partial alphanumeric_keys +xkb_symbols "ibm238l" { + + include "us(basic)" + name[Group1]= "English (US, IBM Arabic 238_L)"; + + key { [ comma, comma ] }; + key { [ period, period ] }; + key { [ quoteleft, asciitilde ] }; + key { [ backslash, bar ] }; + key { [ leftcaret, rightcaret ] }; +}; + +partial alphanumeric_keys +xkb_symbols "intl" { + + include "us(basic)" + name[Group1]= "English (US, intl., with dead keys)"; + + key { [dead_grave, dead_tilde, grave, asciitilde ] }; + key { [ 1, exclam, exclamdown, onesuperior ] }; + key { [ 2, at, twosuperior, dead_doubleacute ] }; + key { [ 3, numbersign, threesuperior, dead_macron ] }; + key { [ 4, dollar, currency, sterling ] }; + key { [ 5, percent, EuroSign, dead_cedilla ] }; + key { [ 6, dead_circumflex, onequarter, asciicircum ] }; + key { [ 7, ampersand, onehalf, dead_horn ] }; + key { [ 8, asterisk, threequarters, dead_ogonek ] }; + key { [ 9, parenleft, leftsinglequotemark, dead_breve ] }; + key { [ 0, parenright, rightsinglequotemark, dead_abovering ] }; + key { [ minus, underscore, yen, dead_belowdot ] }; + key { [ equal, plus, multiply, division ] }; + + key { [ q, Q, adiaeresis, Adiaeresis ] }; + key { [ w, W, aring, Aring ] }; + key { [ e, E, eacute, Eacute ] }; + key { [ r, R, registered, registered ] }; + key { [ t, T, thorn, THORN ] }; + key { [ y, Y, udiaeresis, Udiaeresis ] }; + key { [ u, U, uacute, Uacute ] }; + key { [ i, I, iacute, Iacute ] }; + key { [ o, O, oacute, Oacute ] }; + key { [ p, P, odiaeresis, Odiaeresis ] }; + key { [ bracketleft, braceleft, guillemotleft, leftdoublequotemark ] }; + key { [bracketright, braceright, guillemotright, rightdoublequotemark ] }; + + key { [ a, A, aacute, Aacute ] }; + key { [ s, S, ssharp, section ] }; + key { [ d, D, eth, ETH ] }; + key { [ f, F, f, F ] }; + key { [ g, G, g, G ] }; + key { [ h, H, h, H ] }; + key { [ j, J, j, J ] }; + key { [ k, K, oe, OE ] }; + + key { [ l, L, oslash, Ooblique ] }; + key { [ semicolon, colon, paragraph, degree ] }; + key { [dead_acute, dead_diaeresis, apostrophe, quotedbl ] }; + + key { [ z, Z, ae, AE ] }; + key { [ x, X, x, X ] }; + key { [ c, C, copyright, cent ] }; + key { [ v, V, v, V ] }; + key { [ b, B, b, B ] }; + key { [ n, N, ntilde, Ntilde ] }; + key { [ m, M, mu, mu ] }; + key { [ comma, less, ccedilla, Ccedilla ] }; + key { [ period, greater, dead_abovedot, dead_caron ] }; + key { [ slash, question, questiondown, dead_hook ] }; + key { [ backslash, bar, notsign, brokenbar ] }; + + key { [ backslash, bar, backslash, bar ] }; + + include "level3(ralt_switch)" +}; + +// Based on symbols/us_intl keyboard map: +// Dead-keys definition for a very simple US/ASCII layout. +// by Conectiva (http://www.conectiva.com.br) +// modified by Ricardo Y. Igarashi (iga@that.com.br) + +// Added the following deadkeys, to make it truly international: +// +// dead_macron: on AltGr-minus +// dead_breve: on AltGr-parenleft +// dead_abovedot: on AltGr-period +// dead_abovering: on AltGr-0 +// dead_doubleacute: on AltGr-equal (as quotedbl is already used) +// dead_caron: on AltGr-less (AltGr-shift-comma) +// dead_cedilla: on AltGr-comma +// dead_ogonek: on AltGr-semicolon +// dead_belowdot: on AltGr-underscore (AltGr-shift-minus) +// dead_hook: on AltGr-question +// dead_horn: on AltGr-plus (AltGr-shift-equal) +// dead_diaeresis: on AltGr-colon (Alt-shift-semicolon) +// +// those were already there: +// dead_grave +// dead_acute +// dead_circumflex +// dead_tilde +// dead_diaeresis + +partial alphanumeric_keys +xkb_symbols "alt-intl" { + + include "us" + name[Group1]= "English (US, alt. intl.)"; + + key { [ dead_grave, dead_tilde, grave, asciitilde ] }; + key { [ 5, percent, EuroSign ] }; + key { [ 6, dead_circumflex, asciicircum, asciicircum ] }; + key { [ 9, parenleft, leftsinglequotemark, dead_breve ] }; + key { [ 0, parenright, rightsinglequotemark, dead_abovering ] }; + key { [ minus, underscore, dead_macron, dead_belowdot ] }; + key { [ equal, plus, dead_doubleacute, dead_horn ] }; + + key { [ e, E, EuroSign, cent ] }; + + key { [ semicolon, colon, dead_ogonek, dead_diaeresis ] }; + key { [ dead_acute, dead_diaeresis, apostrophe, quotedbl ] }; + + key { [ comma, less, dead_cedilla, dead_caron ] }; + key { [ period, greater, dead_abovedot, dead_circumflex ] }; + key { [ slash, question, dead_hook, dead_hook ] }; + + key { [ backslash, bar, backslash, bar ] }; + + include "level3(ralt_switch)" +}; + +// based on a keyboard map from an 'xkb/symbols/dk' file + +partial alphanumeric_keys +xkb_symbols "dvorak" { + + name[Group1]= "English (Dvorak)"; + + key { [ grave, asciitilde, dead_grave, dead_tilde ] }; + + key { [ 1, exclam ] }; + key { [ 2, at ] }; + key { [ 3, numbersign ] }; + key { [ 4, dollar ] }; + key { [ 5, percent ] }; + key { [ 6, asciicircum, dead_circumflex, dead_circumflex ] }; + key { [ 7, ampersand ] }; + key { [ 8, asterisk ] }; + key { [ 9, parenleft, dead_grave] }; + key { [ 0, parenright ] }; + key { [ bracketleft, braceleft ] }; + key { [ bracketright, braceright, dead_tilde] }; + + key { [ apostrophe, quotedbl, dead_acute, dead_diaeresis ] }; + key { [ comma, less, dead_cedilla, dead_caron ] }; + key { [ period, greater, dead_abovedot, periodcentered ] }; + key { [ p, P ] }; + key { [ y, Y ] }; + key { [ f, F ] }; + key { [ g, G ] }; + key { [ c, C ] }; + key { [ r, R ] }; + key { [ l, L ] }; + key { [ slash, question ] }; + key { [ equal, plus ] }; + + key { [ a, A ] }; + key { [ o, O ] }; + key { [ e, E ] }; + key { [ u, U ] }; + key { [ i, I ] }; + key { [ d, D ] }; + key { [ h, H ] }; + key { [ t, T ] }; + key { [ n, N ] }; + key { [ s, S ] }; + key { [ minus, underscore ] }; + + key { [ semicolon, colon, dead_ogonek, dead_doubleacute ] }; + key { [ q, Q ] }; + key { [ j, J ] }; + key { [ k, K ] }; + key { [ x, X ] }; + key { [ b, B ] }; + key { [ m, M ] }; + key { [ w, W ] }; + key { [ v, V ] }; + key { [ z, Z ] }; + + key { [ backslash, bar ] }; +}; + +// Dvorak intl., with dead keys +// Olivier Mehani (shtrom-xorg@ssji.net) +// Reproduce the per-key mapping of us(intl) for the dvorak layout +// aka "I just swapped my keys over" +partial alphanumeric_keys +xkb_symbols "dvorak-intl" { + + include "us(dvorak)" + name[Group1]= "English (Dvorak, intl., with dead keys)"; + + key { [dead_grave, dead_tilde, grave, asciitilde ] }; + + key { [ 1, exclam, exclamdown, onesuperior ] }; + key { [ 2, at, twosuperior, dead_doubleacute ] }; + key { [ 3, numbersign, threesuperior, dead_macron ] }; + key { [ 4, dollar, currency, sterling ] }; + key { [ 5, percent, EuroSign, dead_cedilla ] }; + key { [ 6, dead_circumflex, onequarter, asciicircum ] }; + key { [ 7, ampersand, onehalf, dead_horn ] }; + key { [ 8, asterisk, threequarters, dead_ogonek ] }; + key { [ 9, parenleft, leftsinglequotemark, dead_breve ] }; + key { [ 0, parenright, rightsinglequotemark, dead_abovering ] }; + key { [ bracketleft, braceleft, guillemotleft, leftdoublequotemark ] }; + key { [bracketright, braceright, guillemotright, rightdoublequotemark ] }; + + key { [dead_acute, dead_diaeresis, apostrophe, quotedbl ] }; + key { [ comma, less, ccedilla, Ccedilla ] }; + key { [ period, greater, dead_abovedot, dead_caron ] }; + key { [ p, P, odiaeresis, Odiaeresis ] }; + key { [ y, Y, udiaeresis, Udiaeresis ] }; + // key { [ f, F ] }; + // key { [ g, G ] }; + key { [ c, C, copyright, cent ] }; + key { [ r, R, registered, registered ] }; + key { [ l, L, oslash, Ooblique ] }; + key { [ slash, question, questiondown, dead_hook ] }; + // key { [ equal, plus, multiply, division ] }; + + key { [ a, A, aacute, Aacute ] }; + key { [ o, O, oacute, Oacute ] }; + key { [ e, E, eacute, Eacute ] }; + key { [ u, U, uacute, Uacute ] }; + key { [ i, I, iacute, Iacute ] }; + key { [ d, D, eth, ETH ] }; + // key { [ h, H ] }; + key { [ t, T, thorn, THORN ] }; + key { [ n, N, ntilde, Ntilde ] }; + key { [ s, S, ssharp, section ] }; + // key { [ minus, underscore, yen, dead_belowdot ] }; + + key { [ semicolon, colon, paragraph, degree ] }; + key { [ q, Q, adiaeresis, Adiaeresis ] }; + // key { [ j, J ] }; + key { [ k, K, oe, OE ] }; + // key { [ x, X ] }; + // key { [ b, B ] }; + key { [ m, M, mu, mu ] }; + key { [ w, W, aring, Aring ] }; + // key { [ v, V ] }; + key { [ z, Z, ae, AE ] }; + + key { [ backslash, bar, notsign, brokenbar ] }; + + include "level3(ralt_switch)" +}; + +// Dvorak international without dead keys +// Stephane Magnenat (stephane at magnenat dot net, http://stephane.magnenat.net) +// Based on information from http://www.poupinou.org/dvorak/index.html +// +// ` 1 2 3 4 5 6 7 8 9 0 [ ] \ +// € +// +// ' , . p y f g c r l / = +// ä ê ë ü ç +// +// a o e u i d h t n s - +// à ô é û î ß +// +// ; q j k x b m w v z +// â ö è ù ï + +partial alphanumeric_keys +xkb_symbols "dvorak-alt-intl" { + + include "us(dvorak)" + name[Group1]= "English (Dvorak, alt. intl.)"; + + key { [ 4, dollar, EuroSign ] }; + + key { [ comma, less, adiaeresis, dead_caron ] }; + key { [ period, greater, ecircumflex, periodcentered ] }; + key { [ p, P, ediaeresis, dead_cedilla ] }; + key { [ y, Y, udiaeresis ] }; + key { [ c, C, ccedilla, dead_abovedot ] }; + + key { [ a, A, agrave ] }; + key { [ o, O, ocircumflex ] }; + key { [ e, E, eacute ] }; + key { [ u, U, ucircumflex ] }; + key { [ i, I, icircumflex ] }; + key { [ s, S, ssharp, U1E9E ] }; + + key { [ semicolon, colon, acircumflex ] }; + key { [ q, Q, odiaeresis, dead_ogonek ] }; + key { [ j, J, egrave, dead_doubleacute ] }; + key { [ k, K, ugrave ] }; + key { [ x, X, idiaeresis ] }; + + include "level3(ralt_switch)" +}; + +// Left and right handed dvorak layouts +// by sqweek 2006-01-30 +// Based on the corresponding layouts in the console-tools package. +partial alphanumeric_keys +xkb_symbols "dvorak-l" { + + include "us(dvorak)" + name[Group1]= "English (Dvorak, left-handed)"; + + key { [ bracketleft, braceleft ] }; + key { [ bracketright, braceright ] }; + key { [ slash, question ] }; + key { [ p, P ] }; + key { [ f, F ] }; + key { [ m, M ] }; + key { [ l, L ] }; + key { [ j, J ] }; + key { [ 4, dollar ] }; + key { [ 3, numbersign ] }; + key { [ 2, at ] }; + key { [ 1, exclam ] }; + + key { [ semicolon, colon ] }; + key { [ q, Q ] }; + key { [ b, B ] }; + key { [ y, Y ] }; + key { [ u, U ] }; + key { [ r, R ] }; + key { [ s, S ] }; + key { [ o, O ] }; + key { [ period, greater ] }; + key { [ 6, asciicircum ] }; + key { [ 5, percent ] }; + key { [ equal, plus ] }; + + key { [ minus, underscore ] }; + key { [ k, K ] }; + key { [ c, C ] }; + key { [ d, D ] }; + key { [ t, T ] }; + key { [ h, H ] }; + key { [ e, E ] }; + key { [ a, A ] }; + key { [ z, Z ] }; + key { [ 8, asterisk ] }; + key { [ 7, ampersand ] }; + + key { [ apostrophe, quotedbl ] }; + key { [ x, X ] }; + key { [ g, G ] }; + key { [ v, V ] }; + key { [ w, W ] }; + key { [ n, N ] }; + key { [ i, I ] }; + key { [ comma, less ] }; + key { [ 0, parenright ] }; + key { [ 9, parenleft ] }; +}; + +partial alphanumeric_keys +xkb_symbols "dvorak-r" { + + include "us(dvorak)" + name[Group1]= "English (Dvorak, right-handed)"; + + key { [ 1, exclam ] }; + key { [ 2, at ] }; + key { [ 3, numbersign ] }; + key { [ 4, dollar ] }; + key { [ j, J ] }; + key { [ l, L ] }; + key { [ m, M ] }; + key { [ f, F ] }; + key { [ p, P ] }; + key { [ slash, question ] }; + key { [ bracketleft, braceleft ] }; + key { [ bracketright, braceright ] }; + + key { [ 5, percent ] }; + key { [ 6, asciicircum ] }; + key { [ q, Q ] }; + key { [ period, greater ] }; + key { [ o, O ] }; + key { [ r, R ] }; + key { [ s, S ] }; + key { [ u, U ] }; + key { [ y, Y ] }; + key { [ b, B ] }; + key { [ semicolon, colon ] }; + key { [ equal, plus ] }; + + key { [ 7, ampersand ] }; + key { [ 8, asterisk ] }; + key { [ z, Z ] }; + key { [ a, A ] }; + key { [ e, E ] }; + key { [ h, H ] }; + key { [ t, T ] }; + key { [ d, D ] }; + key { [ c, C ] }; + key { [ k, K ] }; + key { [ minus, underscore ] }; + + key { [ 9, parenleft ] }; + key { [ 0, parenright ] }; + key { [ x, X ] }; + key { [ comma, less ] }; + key { [ i, I ] }; + key { [ n, N ] }; + key { [ w, W ] }; + key { [ v, V ] }; + key { [ g, G ] }; + key { [ apostrophe, quotedbl ] }; +}; + +// Classic dvorak layout +// by Piter Punk - 2006-07-06 +// Based on dvorak layout and e-mail from Russel L. Harris rlharris@oplink.net +// on xorg list. +partial alphanumeric_keys +xkb_symbols "dvorak-classic" { + + name[Group1]= "English (classic Dvorak)"; + + key { [ grave, asciitilde, dead_grave, dead_tilde ] }; + + key { [ bracketleft, braceleft ] }; + key { [ 7, ampersand ] }; + key { [ 5, percent ] }; + key { [ 3, numbersign ] }; + key { [ 1, exclam ] }; + key { [ 9, parenleft, dead_grave] }; + key { [ 0, parenright ] }; + key { [ 2, at ] }; + key { [ 4, dollar ] }; + key { [ 6, asciicircum, dead_circumflex, dead_circumflex ] }; + key { [ 8, asterisk ] }; + key { [ bracketright, braceright, dead_tilde] }; + + key { [ slash, question ] }; + key { [ comma, less, dead_cedilla, dead_caron ] }; + key { [ period, greater, dead_abovedot, periodcentered ] }; + key { [ p, P ] }; + key { [ y, Y ] }; + key { [ f, F ] }; + key { [ g, G ] }; + key { [ c, C ] }; + key { [ r, R ] }; + key { [ l, L ] }; + key { [ apostrophe, quotedbl, dead_acute, dead_diaeresis ] }; + key { [ equal, plus ] }; + + key { [ a, A ] }; + key { [ o, O ] }; + key { [ e, E ] }; + key { [ u, U ] }; + key { [ i, I ] }; + key { [ d, D ] }; + key { [ h, H ] }; + key { [ t, T ] }; + key { [ n, N ] }; + key { [ s, S ] }; + key { [ minus, underscore ] }; + + key { [ semicolon, colon, dead_ogonek, dead_doubleacute ] }; + key { [ q, Q ] }; + key { [ j, J ] }; + key { [ k, K ] }; + key { [ x, X ] }; + key { [ b, B ] }; + key { [ m, M ] }; + key { [ w, W ] }; + key { [ v, V ] }; + key { [ z, Z ] }; + key { [ backslash, bar ] }; +}; + +// programmer Dvorak, by Roland Kaufmann +// License: BSD, available at +// Main features: Numbers are in shift position (like French), symbols have been +// placed in locations that give good hand-alternation and finger rolling with +// symbols that usually follows, accented characters are possible for I18N. +// Patch suggestions should be sent upstream. +partial alphanumeric_keys +xkb_symbols "dvp" { + + include "us(dvorak)" + name[Group1] = "English (programmer Dvorak)"; + + // Unmodified Shift AltGr Shift+AltGr + // symbols row, left side + key { [ dollar, asciitilde, dead_tilde ] }; + key { [ ampersand, percent ] }; + key { [ bracketleft, 7, currency ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ braceleft, 5, cent ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ braceright, 3, yen ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ parenleft, 1, EuroSign ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ equal, 9, sterling ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + + // symbols row, right side + key { [ asterisk, 0 ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ parenright, 2, onehalf ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ plus, 4 ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ bracketright, 6 ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ exclam, 8, exclamdown, U2E18 ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; // reversed interrobang + key { [ numbersign, grave, dead_grave ] }; + key { [ BackSpace, BackSpace ] }; + + // upper row, left side + key { [ semicolon, colon, dead_diaeresis ] }; + key { [ comma, less, guillemotleft, U201C ] }; + key { [ period, greater, guillemotright, U201D ] }; + key { [ p, P, paragraph, section ] }; + key { [ y, Y, udiaeresis, Udiaeresis ] }; + + // upper row, right side + key { [ c, C, ccedilla, Ccedilla ] }; + key { [ r, R, registered, trademark ] }; + key { [ slash, question, questiondown, U203D ] }; // interrobang + key { [ at, asciicircum, dead_circumflex, dead_caron ] }; + + // home row, left side + key { [ a, A, aring, Aring ] }; + key { [ o, O, oslash, Ooblique ] }; + key { [ e, E, ae, AE ] }; + key { [ u, U, eacute, Eacute ] }; + + // home row, right side + key { [ d, D, eth, ETH ] }; + key { [ h, H, dead_acute ] }; + key { [ t, T, thorn, THORN ] }; + key { [ n, N, ntilde, Ntilde ] }; + key { [ s, S, ssharp, U1E9E ] }; + key { [ minus, underscore, hyphen, endash ], type[Group1] = "FOUR_LEVEL_ALPHABETIC" }; + key { [ backslash, bar ] }; + + // lower row, left side + key { [ apostrophe, quotedbl, dead_acute ] }; + + // do NOT hardcode this switch; use lv3:ralt_switch option instead! + //include "level3(ralt_switch)" +}; + +// phonetic layout for Russian letters on an US keyboard +// by Ivan Popov 2005-07-17 + +// level3 modifier is a shortcut to the "us" meaning of the keys where +// we place cyrillic letters, handy for accessing the corresponding +// punctuation marks. +// It is important to have access to punctuation marks, and the rest of +// alphabetical keys are added for being consequent so that the users +// can expect the level3 modifier to give what the key label shows. + +partial alphanumeric_keys +xkb_symbols "rus" { + + include "us(basic)" + name[Group1]= "Russian (US, phonetic)"; + +key.type[group1]="FOUR_LEVEL_ALPHABETIC"; + + key { [ Cyrillic_a, Cyrillic_A ] }; + key { [ Cyrillic_be, Cyrillic_BE ] }; + key { [ Cyrillic_ve, Cyrillic_VE ] }; + key { [ Cyrillic_ghe, Cyrillic_GHE ] }; + key { [ Cyrillic_de, Cyrillic_DE ] }; + key { [ Cyrillic_ie, Cyrillic_IE ] }; + key { [ Cyrillic_io, Cyrillic_IO, grave, asciitilde ] }; + key { [ Cyrillic_zhe, Cyrillic_ZHE ] }; + key { [ Cyrillic_ze, Cyrillic_ZE ] }; + key { [ Cyrillic_i, Cyrillic_I ] }; + key { [ Cyrillic_shorti, Cyrillic_SHORTI ] }; + key { [ Cyrillic_ka, Cyrillic_KA ] }; + key { [ Cyrillic_el, Cyrillic_EL ] }; + key { [ Cyrillic_em, Cyrillic_EM ] }; + key { [ Cyrillic_en, Cyrillic_EN ] }; + key { [ Cyrillic_o, Cyrillic_O ] }; + key { [ Cyrillic_pe, Cyrillic_PE ] }; + key { [ Cyrillic_er, Cyrillic_ER ] }; + key { [ Cyrillic_es, Cyrillic_ES ] }; + key { [ Cyrillic_te, Cyrillic_TE ] }; + key { [ Cyrillic_u, Cyrillic_U ] }; + key { [ Cyrillic_ef, Cyrillic_EF ] }; + key { [ Cyrillic_ha, Cyrillic_HA ] }; + key { [ Cyrillic_tse, Cyrillic_TSE ] }; + key { [ Cyrillic_che, Cyrillic_CHE, semicolon, colon ] }; + key { [ Cyrillic_sha, Cyrillic_SHA, bracketleft, braceleft] }; + key { [ Cyrillic_shcha, Cyrillic_SHCHA, bracketright, braceright ] }; + key { [ Cyrillic_hardsign, Cyrillic_HARDSIGN, equal, plus ] }; + key { [ Cyrillic_yeru, Cyrillic_YERU ] }; + key { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] }; + key { [ Cyrillic_e, Cyrillic_E, backslash, bar ] }; + key { [ Cyrillic_yu, Cyrillic_YU, apostrophe, quotedbl ] }; + key { [ Cyrillic_ya, Cyrillic_YA ] }; + + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "mac" { + + include "us(basic)" + name[Group1]= "English (Macintosh)"; + key.type[group1]="FOUR_LEVEL"; + + // Slightly improvised from http://homepage.mac.com/thgewecke/kblayout.jpg + key { [ section, plusminus, section, plusminus ] }; + key { [ grave, asciitilde, dead_grave, dead_horn ] }; + key { [ 1, exclam, exclamdown, U2044 ] }; + key { [ 2, at, trademark, EuroSign ] }; + key { [ 3, numbersign, sterling, U2039 ] }; + key { [ 4, dollar, cent, U203A ] }; + key { [ 5, percent, infinity, UFB01 ] }; + key { [ 6,asciicircum, section, UFB02 ] }; + key { [ 7, ampersand, paragraph, doubledagger ] }; + key { [ 8, asterisk, enfilledcircbullet, degree ] }; + key { [ 9, parenleft, ordfeminine, periodcentered ] }; + key { [ 0, parenright, masculine,singlelowquotemark] }; + key { [ minus, underscore, endash, emdash ] }; + key { [ equal, plus, notequal, plusminus ] }; + + key { [ q, Q, oe, OE ] }; + key { [ w, W, U2211,doublelowquotemark] }; + key { [ e, E, dead_acute, acute ] }; + key { [ r, R, registered, U2030 ] }; + key { [ t, T, dagger, dead_caron ] }; + key { [ y, Y, yen, onequarter ] }; + key { [ u, U, dead_diaeresis, diaeresis ] }; + key { [ i, I, dead_circumflex, U02C6 ] }; + key { [ o, O, oslash, Ooblique ] }; + key { [ p, P, Greek_pi, U220F ] }; + key { [ bracketleft, braceleft, leftdoublequotemark, rightdoublequotemark ] }; + key { [bracketright, braceright, leftsinglequotemark, rightsinglequotemark ] }; + key { [ backslash, bar, guillemotleft, guillemotright ] }; + + key { [ a, A, aring, Aring ] }; + key { [ s, S, ssharp, dead_stroke ] }; + key { [ d, D, partialderivative, eth ] }; + key { [ f, F, function, dead_hook ] }; + key { [ g, G, copyright, dead_doubleacute ] }; + key { [ h, H, dead_abovedot, dead_belowdot ] }; + key { [ j, J, U2206, onehalf ] }; + key { [ k, K,dead_abovering, UF8FF ] }; + + key { [ l, L, notsign, THORN ] }; + key { [ semicolon, colon, U2026, thorn ] }; + key { [apostrophe, quotedbl, ae, AE ] }; + + key { [ z, Z, Greek_OMEGA, dead_cedilla ] }; + key { [ x, X, U2248, dead_ogonek ] }; + // unclear whether "approxeq" is 2248 or 2245 + key { [ c, C, ccedilla, Ccedilla ] }; + key { [ v, V, squareroot, U25CA ] }; + key { [ b, B, integral, idotless ] }; + key { [ n, N, dead_tilde, U02DC ] }; + key { [ m, M, mu, threequarters ] }; + key { [ comma, less, lessthanequal, dead_macron ] }; + key { [ period, greater, greaterthanequal, dead_breve ] }; + key { [ slash, question, division, questiondown ] }; + + include "level3(ralt_switch)" +}; + +// Colemak symbols for xkb on X.Org Server 7.x +// 2006-01-01 Shai Coleman, http://colemak.com/ + +partial alphanumeric_keys +xkb_symbols "colemak" { + + include "us" + name[Group1]= "English (Colemak)"; + + key { [ grave, asciitilde, dead_tilde, asciitilde ] }; + key { [ 1, exclam, exclamdown, onesuperior ] }; + key { [ 2, at, masculine, twosuperior ] }; + key { [ 3, numbersign, ordfeminine, threesuperior ] }; + key { [ 4, dollar, cent, sterling ] }; + key { [ 5, percent, EuroSign, yen ] }; + key { [ 6, asciicircum, hstroke, Hstroke ] }; + key { [ 7, ampersand, eth, ETH ] }; + key { [ 8, asterisk, thorn, THORN ] }; + key { [ 9, parenleft, leftsinglequotemark, leftdoublequotemark ] }; + key { [ 0, parenright, rightsinglequotemark, rightdoublequotemark ] }; + key { [ minus, underscore, endash, emdash ] }; + key { [ equal, plus, multiply, division ] }; + + key { [ q, Q, adiaeresis, Adiaeresis ] }; + key { [ w, W, aring, Aring ] }; + key { [ f, F, atilde, Atilde ] }; + key { [ p, P, oslash, Ooblique ] }; + key { [ g, G, dead_ogonek, asciitilde ] }; + key { [ j, J, dstroke, Dstroke ] }; + key { [ l, L, lstroke, Lstroke ] }; + key { [ u, U, uacute, Uacute ] }; + key { [ y, Y, udiaeresis, Udiaeresis ] }; + key { [ semicolon, colon, odiaeresis, Odiaeresis ] }; + key { [ bracketleft, braceleft, guillemotleft, 0x1002039 ] }; + key { [ bracketright, braceright, guillemotright, 0x100203a ] }; + key { [ backslash, bar, asciitilde, asciitilde ] }; + + key { [ a, A, aacute, Aacute ] }; + key { [ r, R, dead_grave, asciitilde ] }; + key { [ s, S, ssharp, 0x1001e9e ] }; + key { [ t, T, dead_acute, dead_doubleacute ] }; + key { [ d, D, dead_diaeresis, asciitilde ] }; + key { [ h, H, dead_caron, asciitilde ] }; + key { [ n, N, ntilde, Ntilde ] }; + key { [ e, E, eacute, Eacute ] }; + key { [ i, I, iacute, Iacute ] }; + key { [ o, O, oacute, Oacute ] }; + key { [ apostrophe, quotedbl, otilde, Otilde ] }; + + key { [ z, Z, ae, AE ] }; + key { [ x, X, dead_circumflex, asciitilde ] }; + key { [ c, C, ccedilla, Ccedilla ] }; + key { [ v, V, oe, OE ] }; + key { [ b, B, dead_breve, asciitilde ] }; + key { [ k, K, dead_abovering, asciitilde ] }; + key { [ m, M, dead_macron, asciitilde ] }; + key { [ comma, less, dead_cedilla, asciitilde ] }; + key { [ period, greater, dead_abovedot, asciitilde ] }; + key { [ slash, question, questiondown, asciitilde ] }; + + key { [ BackSpace, BackSpace, BackSpace, BackSpace ] }; + key { [ minus, underscore, endash, emdash ] }; + key { [ space, space, space, nobreakspace ] }; + + include "level3(ralt_switch)" +}; + +// I do NOT like dead-keys - the International keyboard as defined by Microsoft +// does not fit my needs. Why use two keystrokes for all simple characters (eg ' +// and generates a single ') just to have an é (eacute) in two strokes +// as well? I type ' more often than é (eacute). +// +// This file works just like a regular keyboard, BUT has all dead-keys +// accessible at level3 (through AltGr). An ë (ediaeresis) is now: AltGr+" +// followed by an e. In other words, this keyboard is not international as long +// as you leave the right Alt key alone. +// +// The original MS International keyboard was intended for Latin1 (iso8859-1). +// With the introduction of iso8859-15, the (important) ligature oe (and OE) +// became available. I added them next to ae. Because I write ediaeresis more +// often than registered, I moved registered to be next to copyright and added +// ediaeresis and idiaeresis. - Adriaan + +partial alphanumeric_keys +xkb_symbols "altgr-intl" { + + include "us(intl)" + name[Group1]= "English (intl., with AltGr dead keys)"; + +// five dead keys moved into level3: + + key { [ grave, asciitilde, dead_grave, dead_tilde ] }; + key { [apostrophe,quotedbl, dead_acute, dead_diaeresis ] }; + +// diversions from the MS Intl keyboard: + + key { [ 1, exclam, onesuperior, exclamdown ] }; + key { [ r, R, ediaeresis, Ediaeresis ] }; + key { [ j, J, idiaeresis, Idiaeresis ] }; + key { [ x, X, oe, OE ] }; + key { [ v, V, registered, registered ] }; + +// onequarter etc (not in iso8859-15) moved to get three unshifted deadkeys: + + key { [ 6, asciicircum, dead_circumflex, onequarter ] }; + key { [ 7, ampersand, dead_horn, onehalf ] }; + key { [ 8, asterisk, dead_ogonek, threequarters ] }; + + include "level3(ralt_switch)" +}; + +// Intel ClassmatePC Keyboard Layout +// by Piter PUNK +// +// The keyboard layouts below maps the us(basic), us(intl) and us(alt-intl) +// to ClassmatePC keyboard. All layouts uses RCTL as level3(switch) since +// the keyboard does not have AltGr key. The EuroSign is engraved at 5 key. + +// classmate - us(basic) +partial alphanumeric_keys +xkb_symbols "classmate" { + include "us(basic)" + name[Group1]= "English (US)"; + + key { [ backslash, bar, backslash, bar ] }; + + include "eurosign(5)" + include "level3(switch)" +}; + +// classmate-intl - us(intl) +// RCTL is generated by Fn+Alt, because that, when trying to access +// the level3 symbols at 7,8,9,0,u,i,o,p,j,k,l,;,m,. and / we got +// the keypad keycodes. The keypad is changed to make Fn+Alt+ +// generate the same symbol as the original key. +partial alphanumeric_keys +xkb_symbols "classmate-intl" { + include "us(intl)" + name[Group1]= "USA - ClassmatePC (International)"; + key.type[Group1]="FOUR_LEVEL"; + + key { [ backslash, bar, backslash, bar ] }; + + key { [ KP_Home, KP_7, + onehalf, dead_horn ] }; + key { [ KP_Up, KP_8, + threequarters, dead_ogonek ] }; + key { [ KP_Prior, KP_9, + leftsinglequotemark, dead_breve ] }; + key { [ KP_Multiply, KP_Multiply, + rightsinglequotemark, dead_abovering ] }; + + key { [ KP_Left, KP_4, + uacute, Uacute ] }; + key { [ KP_Begin, KP_5, + iacute, Iacute ] }; + key { [ KP_Right, KP_6, + oacute, Oacute ] }; + key { [ KP_Subtract, KP_Subtract, + odiaeresis, Odiaeresis ] }; + + key { [ KP_Down, KP_2, + oe, OE ] }; + key { [ KP_Next, KP_3, + oslash, Ooblique ] }; + key { [ KP_Add, KP_Add, + paragraph, degree ] }; + + key { [ KP_Insert, KP_0, + mu, mu ] }; + key { [ KP_Delete, KP_Decimal, + dead_abovedot, dead_caron ] }; + key { [ KP_Divide, KP_Divide, + questiondown, dead_hook ] }; + + include "level3(switch)" +}; + +// classmate-alt-intl - us(alt-intl) +// RCTL is generated by Fn+Alt, because that, when trying to access +// the level3 symbols at 7,8,9,0,u,i,o,p,j,k,l,;,m,. and / we got +// the keypad keycodes. The keypad is changed to make Fn+Alt+ +// generate the same symbol as the original key. +partial alphanumeric_keys +xkb_symbols "classmate-alt-intl" { + include "us(alt-intl)" + name[Group1]= "USA - ClassmatePC (Alternative international)"; + key.type[Group1]="FOUR_LEVEL"; + + key { [ backslash, bar, backslash, bar ] }; + + key { [ KP_Subtract, KP_Subtract ] }; + + key { [ KP_Prior, KP_9, + leftsinglequotemark, dead_breve ] }; + key { [ KP_Multiply, KP_Multiply, + rightsinglequotemark, dead_abovering ] }; + + key { [ KP_Add, KP_Add, + dead_ogonek, dead_diaeresis ] }; + + key { [ KP_Delete, KP_Decimal, + dead_abovedot, dead_circumflex ] }; + key { [ KP_Divide, KP_Divide, + dead_hook, dead_hook ] }; + + include "level3(switch)" +}; + +// classmate-altgr-intl - us(altgr-intl) +// RCTL is generated by Fn+Alt, because that, when trying to access +// the level3 symbols at 7,8,9,0,u,i,o,p,j,k,l,;,m,. and / we got +// the keypad keycodes. The keypad is changed to make Fn+Alt+ +// generate the same symbol as the original key. +partial alphanumeric_keys +xkb_symbols "classmate-altgr-intl" { + include "us(altgr-intl)" + name[Group1]= "USA - ClassmatePC (International Fn+Alt dead-keys)"; + key.type[Group1]="FOUR_LEVEL"; + + key { [ backslash, bar, backslash, bar ] }; + + key { [ KP_Home, KP_7, + dead_horn, dead_horn ] }; + key { [ KP_Up, KP_8, + dead_ogonek, dead_ogonek ] }; + key { [ KP_Prior, KP_9, + leftsinglequotemark, dead_breve ] }; + key { [ KP_Multiply, KP_Multiply, + rightsinglequotemark, dead_abovering ] }; + + key { [ KP_Left, KP_4, + uacute, Uacute ] }; + key { [ KP_Begin, KP_5, + iacute, Iacute ] }; + key { [ KP_Right, KP_6, + oacute, Oacute ] }; + key { [ KP_Subtract, KP_Subtract, + odiaeresis, Odiaeresis ] }; + + key { [ KP_End, KP_1, + idiaeresis, Idiaeresis ] }; + key { [ KP_Down, KP_2, + oe, OE ] }; + key { [ KP_Next, KP_3, + oslash, Ooblique ] }; + key { [ KP_Add, KP_Add, + paragraph, degree ] }; + + key { [ KP_Insert, KP_0, + mu, mu ] }; + key { [ KP_Delete, KP_Decimal, + dead_abovedot, dead_caron ] }; + key { [ KP_Divide, KP_Divide, + questiondown, dead_hook ] }; + + include "level3(switch)" +}; + +partial alphanumeric_keys +xkb_symbols "olpc" { + + include "us(basic)" + name[Group1]= "English (US)"; + + // OLPC international US English keyboard layout. + // It's a little different from the usual international layout. + // See: http://wiki.laptop.org/go/Image:Keyboard_english.png + + key { [ grave, asciitilde, dead_grave, dead_tilde ] }; + key { [ 1, exclam, exclamdown, exclamdown ] }; + key { [ 2, at, notsign, notsign ] }; + key { [ 3, numbersign, 0x1000300, 0x1000300 ] }; // combining grave + key { [ 4, dollar, 0x1000301, 0x1000301 ] }; // combining acute + key { [ 5, percent, 0x1000306, 0x1000306 ] }; // combining breve above + key { [ 6,asciicircum, 0x100030A, 0x100030A ] }; // combining ring above + key { [ 7, ampersand, 0x1000302, 0x1000302 ] }; // combining circumflex above + key { [ 8, asterisk, 0x100030C, 0x100030C ] }; // combining caron above + key { [ 9, parenleft, 0x1000307, 0x1000307 ] }; // combining dot above + key { [ 0, parenright, 0x1000308, 0x1000308 ] }; // combining diaeresis above + key { [ minus, underscore, 0x1000304, 0x1000304 ] }; // combining macron above + key { [ equal, plus, 0x1000303, 0x1000303 ] }; // combining tilde above + + key { [ q, Q, Greek_omega, Greek_OMEGA ] }; + key { [ w, W, oslash, Oslash ] }; + key { [ e, E, oe, OE ] }; + key { [ r, R, 0x1000327, 0x1000327 ] }; // combining cedilla + key { [ t, T, 0x100032E, 0x100032E ] }; // combining breve below + key { [ y, Y, 0x1000325, 0x1000325 ] }; // combining ring below + key { [ u, U, 0x100032D, 0x100032D ] }; // combining circumflex below + key { [ i, I, 0x100032C, 0x100032C ] }; // combining caron below + key { [ o, O, 0x1000323, 0x1000323 ] }; // combining dot below + key { [ p, P, 0x1000324, 0x1000324 ] }; // combining diaeresis below + key { [ bracketleft, braceleft, 0x1000331, 0x1000331 ] }; // combining macron below + key { [bracketright, braceright, 0x1000330, 0x1000330 ] }; // combining tilde below + + key { [ a, A, ae, AE ] }; + key { [ s, S, ssharp, 0x1001E9E ] }; // uppercase S sharp + key { [ d, D, eth, ETH ] }; + key { [ f, F, thorn, THORN ] }; + key { [ h, H, sterling, sterling ] }; + key { [ j, J, EuroSign, EuroSign ] }; + key { [ semicolon, colon, masculine, ordfeminine ] }; + key { [ apostrophe, quotedbl, currency, currency ] }; + key { [ backslash, bar, section, section ] }; + + key { [ c, C, ccedilla, Ccedilla ] }; + key { [ n, N, ntilde, Ntilde ] }; + key { [ m, M, mu, mu ] }; + key { [ comma, less, guillemotleft, guillemotleft ] }; + key { [ period, greater, guillemotright, guillemotright ] }; + key { [ slash, question, questiondown, questiondown ] }; + + key { [ multiply, division, ISO_Next_Group, ISO_Prev_Group ] }; + + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "olpc2" { + include "us(olpc)" + name[Group1]= "English (the divide/multiply keys toggle the layout)"; + include "group(olpc)" +}; + +xkb_symbols "olpcm" { + + include "us(basic)" + name[Group1]= "English (US)"; + + // Mechanical (non-membrane) OLPC int'l US English keyboard layout. + // See: http://wiki.laptop.org/go/OLPC_English_Non-membrane_Keyboard + + key { [ grave, asciitilde, dead_grave, dead_tilde ] }; + key { [ 1, exclam, exclamdown, exclamdown ] }; + key { [ 2, at, notsign, notsign ] }; + key { [ 3, numbersign, 0x1000300, 0x1000300 ] }; // combining grave + key { [ 4, dollar, 0x1000301, 0x1000301 ] }; // combining acute + key { [ 5, percent, 0x1000306, 0x1000306 ] }; // combining breve above + key { [ 6,asciicircum, 0x100030A, 0x100030A ] }; // combining ring above + key { [ 7, ampersand, 0x1000302, 0x1000302 ] }; // combining circumflex above + key { [ 8, asterisk, 0x100030C, 0x100030C ] }; // combining caron above + key { [ 9, parenleft, 0x1000307, 0x1000307 ] }; // combining dot above + key { [ 0, parenright, 0x1000308, 0x1000308 ] }; // combining diaeresis above + key { [ minus, underscore, 0x1000304, 0x1000304 ] }; // combining macron above + + key { [ q, Q, Greek_omega, Greek_OMEGA ] }; + key { [ w, W, oslash, Oslash ] }; + key { [ e, E, oe, OE ] }; + key { [ r, R, 0x1000327, 0x1000327 ] }; // combining cedilla + key { [ t, T, 0x100032E, 0x100032E ] }; // combining breve below + key { [ y, Y, 0x1000325, 0x1000325 ] }; // combining ring below + key { [ u, U, 0x100032D, 0x100032D ] }; // combining circumflex below + key { [ i, I, 0x100032C, 0x100032C ] }; // combining caron below + key { [ o, O, 0x1000323, 0x1000323 ] }; // combining dot below + key { [ p, P, 0x1000324, 0x1000324 ] }; // combining diaeresis below + key { [ bracketleft, braceleft, 0x1000331, 0x1000331 ] }; // combining macron below + key { [bracketright, braceright, 0x1000330, 0x1000330 ] }; // combining tilde below + + key { [ a, A, ae, AE ] }; + key { [ s, S, ssharp, 0x1001E9E ] }; // uppercase S sharp + key { [ d, D, eth, ETH ] }; + key { [ f, F, thorn, THORN ] }; + key { [ h, H, sterling, sterling ] }; + key { [ j, J, EuroSign, EuroSign ] }; + key { [ semicolon, colon, masculine, ordfeminine ] }; + // no AC11 or AC12 on olpcm + + key { [ c, C, ccedilla, Ccedilla ] }; + key { [ n, N, ntilde, Ntilde ] }; + key { [ m, M, mu, mu ] }; + key { [ comma, less, guillemotleft, guillemotleft ] }; + key { [ period, greater, guillemotright, guillemotright ] }; + key { [ slash, question, questiondown, questiondown ] }; + + key { [ backslash, bar, section, section ] }; + key { [ equal, plus, 0x1000303, 0x1000303 ] }; + key { [ apostrophe, quotedbl, currency, currency ] }; + + include "level3(ralt_switch)" +}; + +// Based on Cherokee Nation Official Layout +// http://www.cherokee.org/extras/downloads/font/Keyboard.htm + +partial alphanumeric_keys modifier_keys +xkb_symbols "chr" { + + name[Group1]= "Cherokee"; + key.type[group1]="ALPHABETIC"; + + key { [ grave, U13CA ] }; + key { [ 1, U13B1 ] }; + key { [ 2, U13C7 ] }; + key { [ 3, U13E7 ] }; + key { [ U13D9, U13B0 ] }; + key { [ U13E6, U13B9 ] }; + key { [ U13DC, U13DD ] }; + key { [ U13CB, U13E1 ] }; + key { [ U13D6, U13BA ] }; + key { [ U13D2, parenleft ] }; + key { [ U13C4, parenright ] }; + key { [ U13BF, U13BC ] }; + key { [ U13F3, U13BD ] }; + + key { [ U13AA, U13C6 ] }; + key { [ U13B3, U13EB ] }; + key { [ U13A1, U13E3 ] }; + key { [ U13DB, U13CF ] }; + key { [ U13D4, U13D8 ] }; + key { [ U13EF, U13F2 ] }; + key { [ U13A4, U13AD ] }; + key { [ U13A2, U13F1 ] }; + key { [ U13A3, U13EC ] }; + key { [ U13C1, U13EA ] }; + key { [ U13D5, U13D1 ] }; + key { [ U13B6, U13E4 ] }; + key { [ U13E9, U13EE ] }; + + key { [ U13A0, U13CC ] }; + key { [ U13CD, U13CE ] }; + key { [ U13D7, U13D0 ] }; + key { [ U13A9, U13C8 ] }; + key { [ U13A6, U13E5 ] }; + key { [ U13AF, U13B2 ] }; + key { [ U13DA, U13AB ] }; + key { [ U13B8, U13A7 ] }; + key { [ U13B5, U13AE ] }; + key { [ U13E8, U13E0 ] }; + key { [ apostrophe, quotedbl ] }; + + key { [ U13AC, U13C3 ] }; + key { [ U13F4, U13ED ] }; + key { [ U13D3, U13DF ] }; + key { [ U13A5, U13DE ] }; + key { [ U13A8, U13F0 ] }; + key { [ U13BE, U13BB ] }; + key { [ U13C5, U13B7 ] }; + key { [ comma, U13E2 ] }; + key { [ period, U13B4 ] }; + key { [ U13C2, U13C9 ] }; +}; + +// Serbian charecters added as third level symbols to US keyboard layout. + +partial alphanumeric_keys +xkb_symbols "hbs" { + + include "us" + name[Group1]= "Serbo-Croatian (US)"; + + key { [ grave, asciitilde ] }; + key { [ 6, dead_caron, asciicircum, asciicircum ] }; + key { [ 8, asterisk, multiply, division ] }; + key { [ minus, underscore, endash, emdash ] }; + key { [ l, L, U1C9, U1C8 ] }; + key { [ n, N, U1CC, U1CB ] }; + key { [ z, Z, U1C6, U1C5 ] }; + key { [ e, E, EuroSign, cent ] }; + key { [ d, D, dstroke, Dstroke ] }; + key { [ dead_acute, quotedbl, apostrophe, apostrophe ] }; + key { [ space, space, nobreakspace, nobreakspace ] }; + key { [ comma, less, U3003, guillemotright ] }; + key { [ period, greater, ellipsis, guillemotleft ] }; + + include "level3(ralt_switch)" +}; + +// Workman Keyboard Layout symbols for xkb on X.Org Server 7.x +// 09-06-2010 OJ Bucao. http://www.workmanlayout.com + +partial alphanumeric_keys +xkb_symbols "workman" { + + include "us(basic)" + name[Group1]= "English (Workman)"; + + key { [ q, Q ] }; + key { [ d, D ] }; + key { [ r, R ] }; + key { [ w, W ] }; + key { [ b, B ] }; + key { [ j, J ] }; + key { [ f, F ] }; + key { [ u, U ] }; + key { [ p, P ] }; + key { [ semicolon, colon ] }; + + key { [ a, A ] }; + key { [ s, S ] }; + key { [ h, H ] }; + key { [ t, T ] }; + key { [ g, G ] }; + key { [ y, Y ] }; + key { [ n, N ] }; + key { [ e, E ] }; + key { [ o, O ] }; + key { [ i, I ] }; + + key { [ z, Z ] }; + key { [ x, X ] }; + key { [ m, M ] }; + key { [ c, C ] }; + key { [ v, V ] }; + key { [ k, K ] }; + key { [ l, L ] }; + + key { [ BackSpace, Escape, BackSpace, BackSpace ] }; + + include "level3(ralt_switch)" +}; + +partial alphanumeric_keys +xkb_symbols "workman-intl" { + + include "us(intl)" + name[Group1]= "English (Workman, intl., with dead keys)"; + + key { [ q, Q, adiaeresis, Adiaeresis ] }; + key { [ d, D, eth, ETH ] }; + key { [ r, R, registered, registered ] }; + key { [ w, W, aring, Aring ] }; + key { [ b, B, b, B ] }; + key { [ j, J, j, J ] }; + key { [ f, F, f, F ] }; + key { [ u, U, uacute, Uacute ] }; + key { [ p, P, odiaeresis, Odiaeresis ] }; + key { [ semicolon, colon, paragraph, degree ] }; + + key { [ a, A, aacute, Aacute ] }; + key { [ s, S, ssharp, section ] }; + key { [ h, H, h, H ] }; + key { [ t, T, thorn, THORN ] }; + key { [ g, G, g, G ] }; + key { [ y, Y, udiaeresis, Udiaeresis ] }; + key { [ n, N, ntilde, Ntilde ] }; + key { [ e, E, eacute, Eacute ] }; + key { [ o, O, oacute, Oacute ] }; + key { [ i, I, iacute, Iacute ] }; + + key { [ z, Z, ae, AE ] }; + key { [ x, X, x, X ] }; + key { [ m, M, mu, mu ] }; + key { [ c, C, copyright, cent ] }; + key { [ v, V, v, V ] }; + key { [ k, K, oe, OE ] }; + key { [ l, L, oslash, Ooblique ] }; + + key { [ BackSpace, Escape, BackSpace, BackSpace ] }; + + include "level3(ralt_switch)" +}; + +// Norman keyboard layout symbols for xkb on X.Org Server 7.x +// Written 11/23/2012, revised 3/7/2013 by David Norman http://normanlayout.info +// To the extent possible under law, the author(s) have dedicated all +// copyright and related and neighboring rights to this software to the +// public domain worldwide. This software is distributed without any warranty. + +partial alphanumeric_keys +xkb_symbols "norman" { + + include "us(basic)" + name[Group1]= "English (Norman)"; + + key { [ q, Q ] }; + key { [ w, W ] }; + key { [ d, D ] }; + key { [ f, F ] }; + key { [ k, K ] }; + key { [ j, J ] }; + key { [ u, U ] }; + key { [ r, R ] }; + key { [ l, L ] }; + key { [ semicolon, colon ] }; + + key { [ a, A ] }; + key { [ s, S ] }; + key { [ e, E ] }; + key { [ t, T ] }; + key { [ g, G ] }; + key { [ y, Y ] }; + key { [ n, N ] }; + key { [ i, I ] }; + key { [ o, O ] }; + key { [ h, H ] }; + + key { [ z, Z ] }; + key { [ x, X ] }; + key { [ c, C ] }; + key { [ v, V ] }; + key { [ b, B ] }; + key { [ p, P ] }; + key { [ m, M ] }; + + key { [ BackSpace ] }; + + include "level3(ralt_switch)" +}; + +// Carpalx layout created by Martin Krzywinski +// http://mkweb.bcgsc.ca/carpalx/ + +partial alphanumeric_keys +xkb_symbols "carpalx" { + + name[Group1]= "English (Carpalx)"; + + key { [ grave, asciitilde ] }; + key { [ 1, exclam ] }; + key { [ 2, at ] }; + key { [ 3, numbersign ] }; + key { [ 4, dollar ] }; + key { [ 5, percent ] }; + key { [ 6, asciicircum ] }; + key { [ 7, ampersand ] }; + key { [ 8, asterisk ] }; + key { [ 9, parenleft ] }; + key { [ 0, parenright ] }; + key { [ minus, underscore ] }; + key { [ equal, plus ] }; + + key { [ q, Q ] }; + key { [ g, G ] }; + key { [ m, M ] }; + key { [ l, L ] }; + key { [ w, W ] }; + key { [ y, Y ] }; + key { [ f, F ] }; + key { [ u, U ] }; + key { [ b, B ] }; + key { [ semicolon, colon ] }; + key { [ bracketleft, braceleft ] }; + key { [ bracketright, braceright ] }; + + key { [ d, D ] }; + key { [ s, S ] }; + key { [ t, T ] }; + key { [ n, N ] }; + key { [ r, R ] }; + key { [ i, I ] }; + key { [ a, A ] }; + key { [ e, E ] }; + key { [ o, O ] }; + key { [ h, H ] }; + key { [ apostrophe, quotedbl ] }; + + key { [ z, Z ] }; + key { [ x, X ] }; + key { [ c, C ] }; + key { [ v, V ] }; + key { [ j, J ] }; + key { [ k, K ] }; + key { [ p, P ] }; + key { [ comma, less ] }; + key { [ period, greater ] }; + key { [ slash, question ] }; + + key { [ backslash, bar ] }; +}; + +// Carpalx layout created by Martin Krzywinski +// http://mkweb.bcgsc.ca/carpalx/ +// Merged with us(intl) and modified to move +// accented vowels closer to the plain vowels + +partial alphanumeric_keys +xkb_symbols "carpalx-intl" { + + include "us(carpalx)" + name[Group1]= "English (Carpalx, intl., with dead keys)"; + + key { [dead_grave, dead_tilde, grave, asciitilde ] }; + key { [ 1, exclam, exclamdown, onesuperior ] }; + key { [ 2, at, twosuperior, dead_doubleacute ] }; + key { [ 3, numbersign, threesuperior, dead_macron ] }; + key { [ 4, dollar, currency, sterling ] }; + key { [ 5, percent, EuroSign, dead_cedilla ] }; + key { [ 6, dead_circumflex, onequarter, asciicircum ] }; + key { [ 7, ampersand, onehalf, dead_horn ] }; + key { [ 8, asterisk, threequarters, dead_ogonek ] }; + key { [ 9, parenleft, leftsinglequotemark, dead_breve ] }; + key { [ 0, parenright, rightsinglequotemark, dead_abovering ] }; + key { [ minus, underscore, yen, dead_belowdot ] }; + key { [ equal, plus, multiply, division ] }; + + key { [ q, Q, degree, paragraph ] }; + key { [ g, G, U011F, U011E ] }; + key { [ m, M, mu, mu ] }; + key { [ l, L, copyright, cent ] }; + key { [ w, W, w, W ] }; + key { [ y, Y, idiaeresis, Idiaeresis ] }; + key { [ f, F, adiaeresis, Adiaeresis ] }; + key { [ u, U, udiaeresis, Udiaeresis ] }; + key { [ b, B, odiaeresis, Odiaeresis ] }; + key { [ semicolon, colon, oslash, Ooblique ] }; + key { [ bracketleft, braceleft, guillemotleft, leftdoublequotemark ] }; + key { [bracketright, braceright, guillemotright, rightdoublequotemark ] }; + + key { [ d, D, eth, ETH ] }; + key { [ s, S, ssharp, section ] }; + key { [ t, T, thorn, THORN ] }; + key { [ n, N, ntilde, Ntilde ] }; + key { [ r, R, registered, registered ] }; + key { [ i, I, iacute, Iacute ] }; + key { [ a, A, aacute, Aacute ] }; + key { [ e, E, eacute, Eacute ] }; + key { [ o, O, oacute, Oacute ] }; + key { [ h, H, uacute, Uacute ] }; + key { [dead_acute, dead_diaeresis, apostrophe, quotedbl ] }; + + key { [ z, Z, z, Z ] }; + key { [ x, X, U015F, U015E ] }; + key { [ c, C, ccedilla, Ccedilla ] }; + key { [ v, V, ae, AE ] }; + key { [ j, J, oe, OE ] }; + key { [ k, K, U0131, U0130 ] }; + key { [ p, P, aring, Aring ] }; + key { [ comma, less, ediaeresis, Ediaeresis ] }; + key { [ period, greater, dead_abovedot, dead_caron ] }; + key { [ slash, question, questiondown, dead_hook ] }; + key { [ backslash, bar, notsign, brokenbar ] }; + + key { [ backslash, bar, backslash, bar ] }; + + include "level3(ralt_switch)" +}; + +// Carpalx layout created by Martin Krzywinski +// http://mkweb.bcgsc.ca/carpalx/ +// Merged with us(intl) and us(altgr-intl) and modified to move +// accented vowels closer to the plain vowels + +partial alphanumeric_keys +xkb_symbols "carpalx-altgr-intl" { + + include "us(carpalx-intl)" + name[Group1]= "English (Carpalx, intl., with AltGr dead keys)"; + +// five dead keys moved into level3: + + key { [ grave, asciitilde, dead_grave, dead_tilde ] }; + key { [apostrophe,quotedbl, dead_acute, dead_diaeresis ] }; + +// diversions from the MS Intl keyboard: + + key { [ 1, exclam, onesuperior, exclamdown ] }; + +// onequarter etc (not in iso8859-15) moved to get three unshifted deadkeys: + + key { [ 6, asciicircum, dead_circumflex, onequarter ] }; + key { [ 7, ampersand, dead_horn, onehalf ] }; + key { [ 8, asterisk, dead_ogonek, threequarters ] }; + + include "level3(ralt_switch)" +}; + +// Carpalx layout created by Martin Krzywinski +// Full optimization variant without fixed QWERTY-like ZXCV keys +// http://mkweb.bcgsc.ca/carpalx/ + +partial alphanumeric_keys +xkb_symbols "carpalx-full" { + + include "us(carpalx)" + name[Group1]= "English (Carpalx, full optimization)"; + + key { [ b, B ] }; + key { [ y, Y ] }; + key { [ v, V ] }; + + key { [ f, F ] }; +}; + +// Carpalx layout created by Martin Krzywinski +// Full optimization variant without fixed QWERTY-like ZXCV keys +// http://mkweb.bcgsc.ca/carpalx/ +// Merged with us(intl) and modified to move +// accented vowels closer to the plain vowels + +partial alphanumeric_keys +xkb_symbols "carpalx-full-intl" { + + include "us(carpalx-intl)" + name[Group1]= "English (Carpalx, full optimization, intl., with dead keys)"; + + key { [ b, B, idiaeresis, Idiaeresis ] }; + key { [ y, Y, adiaeresis, Adiaeresis ] }; + key { [ v, V, odiaeresis, Odiaeresis ] }; + + key { [ f, F, ae, AE ] }; +}; + +// Carpalx layout created by Martin Krzywinski +// Full optimization variant without fixed QWERTY-like ZXCV keys +// http://mkweb.bcgsc.ca/carpalx/ +// Merged with us(intl) and us(altgr-intl) and modified to move +// accented vowels closer to the plain vowels + +partial alphanumeric_keys +xkb_symbols "carpalx-full-altgr-intl" { + + include "us(carpalx-altgr-intl)" + name[Group1]= "English (Carpalx, full optimization, intl., with AltGr dead keys)"; + + key { [ b, B, idiaeresis, Idiaeresis ] }; + key { [ y, Y, adiaeresis, Adiaeresis ] }; + key { [ v, V, odiaeresis, Odiaeresis ] }; + + key { [ f, F, ae, AE ] }; +}; + +// EXTRAS: + +// Czech, Slovak and German charecters added as third level symbols to US keyboard layout. +partial alphanumeric_keys +xkb_symbols "cz_sk_de" { + + include "us" + name[Group1]="Czech Slovak and German (US)"; + + key { [grave, asciitilde, uring, Uring ] }; + key { [ 1, exclam, uacute, Uacute ] }; + key { [ 2, at, ecaron, Ecaron ] }; + key { [ 3, numbersign, scaron, Scaron ] }; + key { [ 4, dollar, ccaron, Ccaron ] }; + key { [ 5, percent, rcaron, Rcaron ] }; + key { [ 6, asciicircum, zcaron, Zcaron ] }; + key { [ 7, ampersand, yacute, Yacute ] }; + key { [ 8, asterisk, aacute, Aacute ] }; + key { [ 9, parenleft, iacute, Iacute ] }; + key { [ 0, parenright, eacute, Eacute ] }; + key { [minus, underscore, ssharp, 0x1001E9E ] }; + key { [equal, plus, dead_acute, dead_caron ] }; + + key { [ e, E, EuroSign, Eacute ] }; + + key { [bracketleft, braceleft, udiaeresis, Udiaeresis ] }; + key { [ semicolon, colon, odiaeresis, Odiaeresis ] }; + key { [apostrophe, quotedbl,adiaeresis, Adiaeresis ] }; + + key { [ a, A, aacute, Aacute ] }; + key { [ i, I, iacute, Iacute ] }; + key { [ o, O, oacute, Oacute ] }; + key { [ y, Y, yacute, Yacute ] }; + key { [ u, U, uring, Uring ] }; + + key { [ s, S, scaron, Scaron ] }; + key { [ z, Z, zcaron, Zcaron ] }; + key { [ c, C, ccaron, Ccaron ] }; + key { [ r, R, rcaron, Rcaron ] }; + key { [ t, T, tcaron, Tcaron ] }; + key { [ d, D, dcaron, Dcaron ] }; + key { [ n, N, ncaron, Ncaron ] }; + key { [ l, L, lcaron, Lcaron ] }; + key { [ p, P,ocircumflex, Ocircumflex ] }; + + key { [ space, space, nobreakspace, nobreakspace] }; + + include "level3(ralt_switch)" +}; + +// 03 December 2017 - Added us(scn), please refer to +// Cadèmia Siciliana +partial alphanumeric_keys +xkb_symbols "scn" { + + include "us(intl)" + name[Group1]="Sicilian (US keyboard)"; + + key { [ e, E, U0259, U018F ] }; + key { [ d, D, U1E0D, U1E0C ] }; + key { [ f, F, U0111, U0110 ] }; + key { [ h, H, U1E25, U1E24 ] }; + key { [ x, X, U03C7, U03A7 ] }; + key { [ period, greater, U1D58, dead_caron ] }; + + include "level3(ralt_switch)" +}; + +// XCompose is out! Unicode combining is in! For those of us who live +// on the edge: A keymap using Unicode combining characters instead of +// deadkeys. This variation does not deviate from the lame MS-style +// US-intl layout; but it uses AltGr for combining, like altgr-intl. +// +// This might break your font layout layout systems (because they +// suck), caveat emptor. Also, most of today's software will count +// individual combining marks for selection, deletion, character +// counting &c., and won't be smart enough to do canonical equivalence +// when searching, &c. +// +// With Unicode combining you use "handwriting order", not +// "typewriting order" as with deadkeys. That is, you first type the +// base character, then the diacritics/accents/modifiers. This has +// the advantage of avoiding hidden states --- each keypress changes +// something on screen. +// +// TODO: as of now, this duplicates all us(intl) functionality with +// combining. With care, perhaps we could add more combining marks +// not present in intl, and support all major languages. +partial alphanumeric_keys +xkb_symbols "intl-unicode" { + + name[Group1]= "English (US, international AltGr Unicode combining)"; + + include "us(intl)" + include "level3(ralt_switch)" + + // grave, tilde + key { [grave, asciitilde, U0300, U0303 ] }; + // double acute + key { [ 2, at, twosuperior, U030B ] }; + // macron + key { [ 3, numbersign, threesuperior, U0304 ] }; + // circumflex + key { [ 6, asciicircum, onequarter, U0302 ] }; + // horn + key { [ 7, ampersand, onehalf, U031B ] }; + // ogonek + key { [ 8, asterisk, threequarters, U0328 ] }; + // breve + key { [ 9, parenleft, leftsinglequotemark, U0306 ] }; + // abovering + key { [ 0, parenright, rightsinglequotemark, U030A ] }; + + // belowdot + key { [ minus, underscore, yen, U0323 ] }; + // acute, diaeresis + key { [apostrophe, quotedbl, U0301, U0308 ] }; + // abovedot, caron + key { [ period, greater, U0307, U030C ] }; + // hook + key { [ slash, question, questiondown, U0309 ] }; + + // alt-intl compatibility + // cedilla, caron + key { [ comma, less, U0327, U030C ] }; + // ogonek, diaeresis + key { [ semicolon, colon, U0328, U0308 ] }; + // doubleacute, horn + key { [ equal, plus, U030B, U031B ] }; + + // we don't do combining latin letters and combining enclosures + // because support for those is very rare. +}; + +// XCompose is out! Unicode combining is in! For those of us who live +// on the edge: A keymap using Unicode combining characters instead of +// deadkeys. This variation does break compatibility with us-intl, +// whenever I thought it would be more mnemonic or Unicodeish. +partial alphanumeric_keys +xkb_symbols "alt-intl-unicode" { + + name[Group1]= "English (US, international AltGr Unicode combining, alternative)"; + + include "us(intl-unicode)" + + // easier macron; em-dash. + // em-dash is available via compose, but I added here since it's such + // an important typographic character. + key { [ minus, underscore, U0304, U2014 ] }; + + // belowdot, abovedot (caron at coma/less key, per above) + key { [ period, greater, U0323, U0307 ] }; + +}; + +partial alphanumeric_keys +xkb_symbols "ats" { + + include "us" + name[Group1]= "Atsina"; + + //Using Dead key to get COMBINING COMMA ABOVE for ejectives on + //q, l, t, s, m, g, k, p, w, y, r + //XCompose key is used for the other accute and grave. + + key { [ e, E, eacute, Eacute ] }; + key { [ u, U, uacute, Uacute ] }; + key { [ i, I, iacute, Iacute ] }; + key { [ o, O, oacute, Oacute ] }; + key { [ bracketleft, braceleft, U03B8 ] }; + key { [ bracketright, braceright, U010D, U010C ] }; + //U+010C (uppercase Č) and U+010D (lowercase č). + + key { [ a, A, aacute, Aacute ] }; + + //Small letter Open use compose to key get acute accent + key { [ c, C, U0254, U0186 ] }; + key { [ comma, less, U0313 ] }; + key { [ slash, question, U0294 ] }; + + include "level3(ralt_switch)" + include "compose(rctrl)" +}; + +partial alphanumeric_keys +xkb_symbols "crd" { + + include "us" + name[Group1]= "Coeur d'Alene Salish"; + + key { [ w, W, U02B7, U02B7 ] }; + key { [ 7, ampersand, U0294 ] }; + key { [ q, Q, U221A ] }; + key { [ v, V, U0259 ] }; + key { [ backslash, bar, U026B ] }; + key { [ e, E, U025B ] }; + key { [ i, I, U026A ] }; + key { [ j, J, U01F0 ] }; + key { [ 6, asciicircum, U0295 ] }; + key { [ s, S, U0161 ] }; + key { [ c, C, U010D ] }; + key { [ o, O, U0254 ] }; + key { [ period, greater, U0323 ] }; + + include "level3(ralt_switch)" + include "compose(rctrl)" +}; + + +partial alphanumeric_keys + xkb_symbols "sun_type6" { + include "sun_vndr/us(sun_type6)" +}; + +// Implementation of the 3l keyboard layout +// See https://github.com/jackrosenthal/threelayout for specification +partial alphanumeric_keys modifier_keys +xkb_symbols "3l" { + name[Group1] = "English (3l)"; + + key.type[Group1] = "ONE_LEVEL"; + key { [ Escape ] }; + key { [ Tab ] }; + key { [ ISO_Level3_Shift ] }; // Sym Modifier + key { [ ISO_Level5_Shift ] }; // Cur/Num Modifier + + // Top row numbers - not part of spec, but given for convenience + key { [ 1 ] }; + key { [ 2 ] }; + key { [ 3 ] }; + key { [ 4 ] }; + key { [ 5 ] }; + key { [ 6 ] }; + key { [ 7 ] }; + key { [ 8 ] }; + key { [ 9 ] }; + key { [ 0 ] }; + + // Main keys + // Order of mods (defined by EIGHT_LEVEL_SEMIALPHABETIC) is: + // [ None, Shift, Sym, Shift+Sym, Num, Shift+Num, Sym+Num, Shift+Sym+Num ] + key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC"; + + // Second row + key { [ q, Q, quotedbl, Greek_omicron, Prior, Prior, U21CD, Greek_OMICRON ] }; + key { [ f, F, underscore, Greek_phi, BackSpace, BackSpace, U21A4, Greek_PHI ] }; + key { [ u, U, bracketleft, Greek_upsilon, Up, Up, U2191, Greek_UPSILON ] }; + key { [ y, Y, bracketright, Greek_psi, Delete, Delete, U21A6, Greek_PSI ] }; + key { [ z, Z, asciicircum, Greek_zeta, Next, Next, U21CF, Greek_ZETA ] }; + key { [ x, X, exclam, Greek_xi, NoSymbol, NoSymbol, U2260, Greek_XI ] }; + key { [ k, K, less, Greek_kappa, 1, A, U2A7D, Greek_KAPPA ] }; + key { [ c, C, greater, Greek_chi, 2, B, U2A7E, Greek_CHI ] }; + key { [ w, W, equal, Greek_omega, 3, C, U2261, Greek_OMEGA ] }; + key { [ b, B, ampersand, Greek_beta, NoSymbol, NoSymbol, U2248, Greek_BETA ] }; + + // Home row + key { [ o, O, slash, Greek_omega, Home, Home, U21D0, Greek_OMEGA ] }; + key { [ h, H, minus, Greek_theta, Left, Left, U2190, Greek_THETA ] }; + key { [ e, E, braceleft, Greek_epsilon, Down, Down, U2193, Greek_EPSILON ] }; + key { [ a, A, braceright, Greek_alpha, Right, Right, U2192, Greek_ALPHA ] }; + key { [ i, I, asterisk, Greek_iota, End, End, U21D2, Greek_IOTA ] }; + key { [ d, D, question, Greek_delta, period, colon, U2286, Greek_DELTA ] }; + key { [ r, R, parenleft, Greek_rho, 4, D, U2227, Greek_RHO ] }; + key { [ t, T, parenright, Greek_tau, 5, E, U2228, Greek_TAU ] }; + key { [ n, N, apostrophe, Greek_eta, 6, F, U2200, Greek_ETA ] }; + key { [ s, S, colon, Greek_sigma, NoSymbol, NoSymbol, U2203, Greek_SIGMA ] }; + + // Bottom row + key { [ comma, comma, numbersign, NoSymbol, slash, NoSymbol, U21AE, NoSymbol ] }; + key { [ m, M, dollar, Greek_mu, asterisk, NoSymbol, U2194, Greek_MU ] }; + key { [ period, period, bar, NoSymbol, minus, NoSymbol, U21CE, NoSymbol ] }; + key { [ j, J, asciitilde, Greek_SIGMA, plus, NoSymbol, U21D4, NoSymbol ] }; + key { [ semicolon, semicolon, grave, NoSymbol, comma, NoSymbol, U2282, NoSymbol ] }; + key { [ g, G, plus, Greek_gamma, 0, NoSymbol, U2229, Greek_GAMMA ] }; + key { [ l, L, percent, Greek_lambda, 7, parenleft, U222A, Greek_LAMBDA ] }; + key { [ p, P, backslash, Greek_pi, 8, parenright, U2208, Greek_PI ] }; + key { [ v, V, at, Greek_nu, 9, NoSymbol, U2209, Greek_NU ] }; + + include "level5(modifier_mapping)" +}; + +// Chromebooks typically have the key which is normally in the caps +// lock position mapped to keycode 133 (LWIN). For 3l, it is critical +// that the key in this positon correspond to tab, so there is a +// variant available for chromebook hardware. +partial modifier_keys +xkb_symbols "3l-cros" { + include "us(3l)" + name[Group1] = "English (3l, chromebook)"; + key { + type[Group1] = "ONE_LEVEL", + symbols[Group1] = [ Tab ] + }; +}; + + +// Drix EU Latin - version 3.1 (2019-10-07) +// Author: Jerome Leclanche +// Latin layout based on classic US qwerty, with azerty-style second-row m key. +// Features: +// - Programmer-centric punctuation keys (All common symbols on right hand except < and > on left) +// - Most common dead accents on altgr-shift number row +// - Unicode arrows on Altgr+shift+WASD +// - Some commonly used special characters available: +// - Most common european special characters +// - Misc currency symbols, copyright/registered/trademark symbols +// - Common math symbols + some common greek letters +// - Compose key replaces Mod5 +// +// This layout is in the Public Domain. +// +// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓ +// │ ~ ~ │ " ´ │ ' ` │ ^ ^ │ ` ¨ │ ´ ° │ 6 ¯ │ 7 ¸ │ 8 ˛ │ 9 ˇ │ | ˝ │ _ ± │ = ≠ ┃Backspace┃ +// │ @ £ │ 1 ¹ │ 2 ² │ 3 ³ │ 4 ⁴ │ 5 ⁵ │ 6 ⁶ │ 7 ⁷ │ 8 ⁸ │ 9 ⁹ │ 0 ⁰ │ - " │ + ' ┃ ⌫ ┃ +// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫ +// ┃Tab ┃ Q Ø │ W ↑ │ E € │ R ₽ │ T τ │ Y ¥ │ U U │ I ’ │ O Ω │ P ₱ │ [ « │ ] » ┃ ⏎ ┃ +// ┃ ↹ ┃ q ø │ w w │ e € │ r ® │ t ™ │ y ¥ │ u u │ i ‘ │ o œ │ p π │ ( { │ ) } ┃ Enter ┃ +// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃ +// ┃Caps ┃ A ← │ S ↓ │ D → │ F Ƒ │ G G │ H H │ J ” │ K „ │ L λ │ M M │ % ‰ │ & × ┃ ┃ +// ┃Lock ⇬ ┃ a æ │ s ß │ d Δ │ f ƒ │ g g │ h h │ j “ │ k ‚ │ l £ │ m µ │ # ~ │ * $ ┃ ┃ +// ┣━━━━━━┳━┹───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┬─┴───┲━┷━━━━━┻━━━━━━┫ +// ┃Shift ┃ > ≥ │ Z ¶ │ X ÷ │ C ¢ │ V V │ B ₿ │ N N │ ? ¿ │ , · │ ; ´ │ \ ¦ ┃Shift ┃ +// ┃ ⇧ ┃ < ≤ │ z § │ x × │ c © │ v ♀ │ b ♂ │ n ⚥ │ ! ¡ │ . … │ : ` │ / | ┃ ⇧ ┃ +// ┣━━━━━━┻┳━━━━┷━━┳━━┷━━━━┱┴─────┴─────┴─────┴─────┴─────┴────┲┷━━━━━╈━━━━━┻┳━━━━━━┳━━━━━━┫ +// ┃Ctrl ┃ Fn ┃Alt ┃ ␣ Space Nobreakspace ⍽ ┃AltGr ┃Multi ┃ Ctxt ┃ Ctrl ┃ +// ┃ ┃ ┃ ┃ ␣ Space Nobreakspace ⍽ ┃ ┃ ┃ Menu ┃ ┃ +// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━┻━━━━━━┻━━━━━━┻━━━━━━┛ + +partial alphanumeric_keys modifier_keys +xkb_symbols "drix" { + + name[Group1] = "English (Drix)"; + + // First row + key {[ at, asciitilde, sterling, dead_tilde ]}; // @ ~ £ ~ + key {[ 1, quotedbl, onesuperior, dead_grave ]}; // 1 " ¹ ` + key {[ 2, apostrophe, twosuperior, dead_acute ]}; // 2 ' ² ´ + key {[ 3, asciicircum, threesuperior, dead_circumflex ]}; // 3 ^ ³ ^ + key {[ 4, grave, foursuperior, dead_diaeresis ]}; // 4 4 ⁴ ¨ + key {[ 5, degree, fivesuperior, dead_abovering ]}; // 5 ° ⁵ ° + key {[ 6, 6, sixsuperior, dead_macron ]}; // 6 6 ⁶ ¯ + key {[ 7, 7, sevensuperior, dead_cedilla ]}; // 7 7 ⁷ ¸ + key {[ 8, 8, eightsuperior, dead_ogonek ]}; // 8 8 ⁸ ˛ + key {[ 9, 9, ninesuperior, dead_caron ]}; // 9 9 ⁹ ˇ + key {[ 0, bar, zerosuperior, dead_doubleacute ]}; // 0 | ⁰ ˝ + key {[ minus, underscore, quotedbl, plusminus ]}; // - _ " ± + key {[ plus, equal, apostrophe, notequal ]}; // + = ' ≠ + + // Second row + key {[ q, Q, oslash, Ooblique ]}; // q Q ø Ø + key {[ w, W, w, uparrow ]}; // w W w ↑ + key {[ e, E, EuroSign, EuroS ]}; // e E € € + key {[ r, R, registered, 0x10020bd ]}; // r R ® ₽ + key {[ t, T, trademark, Greek_tau ]}; // t T ™ τ + key {[ y, Y, yen, yen ]}; // y Y ¥ ¥ + key {[ u, U, u, U ]}; // u U u U + key {[ i, I, leftsinglequotemark, rightsinglequotemark ]}; // i I ‘ ’ + key {[ o, O, oe, Greek_OMEGA ]}; // o O œ Ω + key {[ p, P, Greek_pi, 0x10020b1 ]}; // p P π ₱ + key {[ parenleft, bracketleft, braceleft, guillemotleft ]}; // ( [ { « + key {[ parenright, bracketright, braceright, guillemotright ]}; // ) ] } » + + // Third row + key {[ a, A, ae, leftarrow ]}; // a A æ ← + key {[ s, S, ssharp, downarrow ]}; // s S ß ↓ + key {[ d, D, Greek_DELTA, rightarrow ]}; // d D Δ → + key {[ f, F, 0x1000192, 0x1000191 ]}; // f F ƒ Ƒ + key {[ g, G, g, G ]}; // g G g G + key {[ h, H, h, H ]}; // h H h H + key {[ j, J, leftdoublequotemark, rightdoublequotemark ]}; // j J “ ” + key {[ k, K, singlelowquotemark, doublelowquotemark ]}; // k K ‚ „ + key {[ l, L, sterling, Greek_lambda ]}; // l L £ λ + key {[ m, M, mu, M ]}; // m M µ M + key {[ numbersign, percent, asciitilde, 0x1002030 ]}; // # % ~ ‰ + + // Fourth row + key {[ less, greater, lessthanequal, greaterthanequal ]}; // < > ≤ ≥ + key {[ z, Z, section, paragraph ]}; // z Z § ¶ + key {[ x, X, multiply, division ]}; // x X × ÷ + key {[ c, C, copyright, cent ]}; // c C © ¢ + key {[ v, V, 0x1002640, V ]}; // v V ♀ V + key {[ b, B, 0x1002642, 0x10020bf ]}; // b B ♂ ₿ + key {[ n, N, 0x10026a5, N ]}; // n N ⚥ N + key {[ exclam, question, exclamdown, questiondown ]}; // ! ? ¡ ¿ + key {[ period, comma, 0x1002026, periodcentered ]}; // . , … · + key {[ colon, semicolon, grave, acute ]}; // : ; ` ´ + key {[ slash, backslash, bar, brokenbar ]}; // / \ | ¦ + + // Next to the enter key + key {[ asterisk, ampersand, dollar, multiply ]}; // * & $ × + + // Rebind right Super (windows key) into a Compose key + key {[ Multi_key ]}; + + // Implement AltGr and AltGr+Shift + // For some reason, include "level3(ralt_switch)" doesn't do the trick. + key { + type[Group1]="TWO_LEVEL", + [ ISO_Level3_Shift, Multi_key ] + }; + modifier_map Mod5 { }; +}; + +// German and Swedish characters added as third level symbols to the US keyboard layout +// Author: Stephan Lachnit , 2019 +// the german umlauts are placed over the characters without diaeresis, the sharp-s over the s +// the swedish ao is placed over the p, since it's closed to the position on a swedish keyboard +// the euro sign is placed over the e, as it is usual for german and swedish keyboards +partial alphanumeric_keys +xkb_symbols "de_se_fi" { + + include "us(basic)" + include "eurosign(e)" + name[Group1] = "German, Swedish and Finnish (US)"; + + key {[ a, A, adiaeresis, Adiaeresis ]}; + key {[ o, O, odiaeresis, Odiaeresis ]}; + key {[ s, S, ssharp, U1E9E ]}; + key {[ u, U, udiaeresis, Udiaeresis ]}; + key {[ p, P, aring, Aring ]}; + + include "level3(ralt_switch)" +};