Dvorak, enhanced for the computer age

Table of Contents

The following code sample gives an idea of how to use Xmodmap to set up a Dvorak keyboard layout with the number row replaced with modifiers, function keys as numbers, and an embedded keyboard for quick editing functions. Live in Emacs, save your wrists and pinkies!

1 History

I've used some variant of this for about 15 years and have had good results. I often use a kinesis keyboard, and for that layout, I have modifiers on the bottom row (and two of the thumb keys) instead – but the following gives the basic idea, and it makes the laptop keyboard reasonably comfortable. These layouts make use of Super and Hyper modifiers, which can be bound to complex markup, e.g. for typing mathematical symbols quickly. I shared some of my vintage Emacs bindings on gnu-emacs-sources.

Since Xmodmap also seems to be vintage software at this point, in order to be useful on contemporary systems, this file may need to be converted to more complex XKB format. Unity seems to do this automatically, but other window managers don't. I'll include a recent XKB variant later on as well, but you may get a better idea of what's going on by reading the Xmodmap file. For a tip on how to do the conversion for your own files, see this thread.

2 Xmodmap

clear Shift
clear Lock
clear Control
clear Mod1
clear Mod2
clear Mod3
clear Mod4
clear Mod5

keycode   8 = a A aring Aring
keycode   9 = o O Left
keycode  10 = e E Down
keycode  11 = u U Right
keycode  12 = d D partialderivative Icircumflex
keycode  13 = i I dead_circumflex U02C6
keycode  14 = semicolon colon bracketleft
keycode  15 = q Q bracketright
keycode  16 = j J braceleft
keycode  17 = k K braceright
keycode  18 = Alt_L plusminus
keycode  19 = x X approxeq ogonek
keycode  20 = apostrophe quotedbl grave
keycode  21 = comma less BackSpace
keycode  22 = period greater Up
keycode  23 = p P Delete
keycode  24 = f F function Idiaeresis
keycode  25 = y Y yen Aacute

! Here is the number row --
keycode  26 = Super_L exclam
keycode  27 = Hyper_L at 
keycode  28 = Control_L numbersign sterling 
keycode  29 = Meta_L dollar 
keycode  30 = F6 asciicircum 
keycode  31 = Mode_switch percent
keycode  32 = bracketright braceright guillemotright
keycode  33 = Control_L parenleft 
keycode  34 = Mode_switch ampersand 
keycode  35 = bracketleft braceleft guillemotleft 
keycode  36 = Meta_L asterisk 
keycode  37 = Hyper_L parenright
! End of number row - numbers are mapped to the corresponding function keys, see below

keycode  38 = equal plus notequal plusminus
keycode  39 = r R Delete
keycode  40 = g G BackSpace
keycode  41 = slash question asciitilde
keycode  42 = c C Up
keycode  43 = l L notsign Ograve
keycode  44 = Return
keycode  45 = n N Right
keycode  46 = h H Left
keycode  47 = minus underscore endash emdash
keycode  48 = t T Down
keycode  49 = s S ssharp Iacute
keycode  50 = backslash bar guillemotleft guillemotright
keycode  51 = w W U2211 doublelowquotemark
keycode  52 = z Z Greek_OMEGA cedilla
keycode  53 = b B integral idotless
keycode  54 = m M mu Acircumflex
keycode  55 = v V radical U25CA
keycode  56 = Tab
keycode  57 = space NoSymbol
keycode  58 = grave asciitilde questiondown
keycode  59 = BackSpace
keycode  60 = 0x1000003
keycode  61 = Escape
keycode  62 =
keycode  63 = Meta_L
keycode  64 = Shift_L
keycode  65 = NoSymbol Insert
keycode  66 = Mode_switch
keycode  67 = Control_L
keycode  68 = Shift_R
keycode  69 = Mode_switch
keycode  70 = Control_R
keycode  71 = Meta_R
keycode  72 =
keycode  73 = KP_Decimal
keycode  74 = Right asterisk
keycode  75 = KP_Multiply
keycode  76 =
keycode  77 = KP_Add
keycode  78 = Left plus
keycode  79 = Escape
keycode  80 = Down equal
keycode  81 =
keycode  82 =
keycode  83 = KP_Divide
keycode  84 = KP_Enter
keycode  85 = Up slash
keycode  86 = KP_Subtract
keycode  87 =
keycode  88 =
keycode  89 = KP_Equal
keycode  90 = KP_0
keycode  91 = KP_1
keycode  92 = KP_2
keycode  93 = KP_3
keycode  94 = KP_4
keycode  95 = KP_5
keycode  96 = KP_6
keycode  97 = KP_7
keycode  98 =
keycode  99 = KP_8
keycode 100 = KP_9
keycode 101 =
keycode 102 =
keycode 103 =
keycode 104 = 5
keycode 105 = 6
keycode 106 = 7
keycode 107 = 3
keycode 108 = 8
keycode 109 = 9
keycode 110 =
keycode 111 = F11
keycode 112 =
keycode 113 = F13
keycode 114 =
keycode 115 = F14
keycode 116 =
keycode 117 = 0
keycode 118 =
keycode 119 = F12
keycode 120 =
keycode 121 = F15
keycode 122 = Help
keycode 123 = Home
keycode 124 = Prior
keycode 125 = Delete
keycode 126 = 4
keycode 127 = End
keycode 128 = 2
keycode 129 = Next
keycode 130 = 1
keycode 131 = Left
keycode 132 = Right
keycode 133 = Down
keycode 134 = Up
keycode 135 =
keycode 136 =
keycode 137 =
keycode 138 =
keycode 139 =
keycode 140 =
keycode 141 =
keycode 142 =
keycode 143 =
keycode 144 =
keycode 145 =
keycode 146 =
keycode 147 =
keycode 148 =
keycode 149 =
keycode 150 =
keycode 151 =
keycode 152 =
keycode 153 =
keycode 154 =
keycode 155 =
keycode 156 =
keycode 157 =
keycode 158 =
keycode 159 =
keycode 160 =
keycode 161 =
keycode 162 =
keycode 163 =
keycode 164 =
keycode 165 =
keycode 166 =
keycode 167 =
keycode 168 =
keycode 169 =
keycode 170 =
keycode 171 =
keycode 172 =
keycode 173 =
keycode 174 =
keycode 175 =
keycode 176 =
keycode 177 =
keycode 178 =
keycode 179 =
keycode 180 =
keycode 181 =
keycode 182 =
keycode 183 =
keycode 184 =
keycode 185 =
keycode 186 =
keycode 187 =
keycode 188 =
keycode 189 =
keycode 190 =
keycode 191 =
keycode 192 =
keycode 193 =
keycode 194 =
keycode 195 =
keycode 196 =
keycode 197 =
keycode 198 =
keycode 199 =
keycode 200 =
keycode 201 =
keycode 202 =
keycode 203 =
keycode 204 =
keycode 205 =
keycode 206 =
keycode 207 =
keycode 208 =
keycode 209 =
keycode 210 =
keycode 211 =
keycode 212 =
keycode 213 =
keycode 214 =
keycode 215 =
keycode 216 =
keycode 217 =
keycode 218 =
keycode 219 =
keycode 220 =
keycode 221 =
keycode 222 =
keycode 223 =
keycode 224 =
keycode 225 =
keycode 226 =
keycode 227 =
keycode 228 =
keycode 229 =
keycode 230 =
keycode 231 =
keycode 232 =
keycode 233 =
keycode 234 =
keycode 235 =
keycode 236 =
keycode 237 =
keycode 238 =
keycode 239 =
keycode 240 =
keycode 241 =
keycode 242 =
keycode 243 =
keycode 244 =
keycode 245 =
keycode 246 =
keycode 247 =
keycode 248 =
keycode 249 =
keycode 250 =
keycode 251 =
keycode 252 =
keycode 253 =
keycode 254 =
keycode 255 =

add Shift = Shift_L Shift_R
add Control = Control_L Control_R
add Mod1 = Meta_L Meta_R
add Mod2 = Hyper_L Hyper_R
add Mod3 = Super_L Super_R
add Mod4 = Mode_switch
add Mod5 = Alt_L

3 XKB

xkb_keymap {
xkb_keycodes "evdev+aliases(qwerty)" {
    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;
    <MDSW> = 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;
    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";
    virtual indicator 12 = "Shift Lock";
    virtual indicator 13 = "Group 2";
    virtual indicator 14 = "Mouse Keys";
    alias <AC12> = <BKSL>;
    alias <MENU> = <COMP>;
    alias <HZTG> = <TLDE>;
    alias <LMTA> = <LWIN>;
    alias <RMTA> = <RWIN>;
    alias <ALGR> = <RALT>;
    alias <KPPT> = <I129>;
    alias <LatQ> = <AD01>;
    alias <LatW> = <AD02>;
    alias <LatE> = <AD03>;
    alias <LatR> = <AD04>;
    alias <LatT> = <AD05>;
    alias <LatY> = <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 <LatZ> = <AB01>;
    alias <LatX> = <AB02>;
    alias <LatC> = <AB03>;
    alias <LatV> = <AB04>;
    alias <LatB> = <AB05>;
    alias <LatN> = <AB06>;
    alias <LatM> = <AB07>;
};

xkb_types "complete" {

    virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;

    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[Shift]= Level2;
	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_CONTROL_LEVEL2" {
	modifiers= Control;
	map[Control]= Level2;
	level_name[Level1]= "Base";
	level_name[Level2]= "Control";
    };
    type "PC_LCONTROL_LEVEL2" {
	modifiers= LControl;
	map[LControl]= Level2;
	level_name[Level1]= "Base";
	level_name[Level2]= "LControl";
    };
    type "PC_RCONTROL_LEVEL2" {
	modifiers= RControl;
	map[RControl]= Level2;
	level_name[Level1]= "Base";
	level_name[Level2]= "RControl";
    };
    type "PC_ALT_LEVEL2" {
	modifiers= Alt;
	map[Alt]= Level2;
	level_name[Level1]= "Base";
	level_name[Level2]= "Alt";
    };
    type "PC_LALT_LEVEL2" {
	modifiers= LAlt;
	map[LAlt]= Level2;
	level_name[Level1]= "Base";
	level_name[Level2]= "LAlt";
    };
    type "PC_RALT_LEVEL2" {
	modifiers= RAlt;
	map[RAlt]= Level2;
	level_name[Level1]= "Base";
	level_name[Level2]= "RAlt";
    };
    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+Lock]= Level1;
	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[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;
	preserve[Lock+LevelFive]= Lock;
	map[Shift+Lock+LevelFive]= Level6;
	preserve[Shift+Lock+LevelFive]= Lock;
	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 "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[Shift+NumLock]= Level1;
	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 "complete" {

    virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;

    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) {
	virtualModifier= AltGr;
	useModMapMods=level1;
	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) {
	virtualModifier= AltGr;
	useModMapMods=level1;
	action= LatchGroup(group=2);
    };
    interpret ISO_Next_Group+AnyOfOrNone(all) {
	virtualModifier= AltGr;
	useModMapMods=level1;
	action= LockGroup(group=+1);
    };
    interpret ISO_Prev_Group+AnyOfOrNone(all) {
	virtualModifier= AltGr;
	useModMapMods=level1;
	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=Overlay1);
    };
    interpret Overlay2_Enable+AnyOfOrNone(all) {
	action= LockControls(controls=Overlay2);
    };
    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=LevelFive);
    };
    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);
    };
    group 2 = AltGr;
    group 3 = AltGr;
    group 4 = AltGr;
    indicator "Caps Lock" {
	!allowExplicit;
	whichModState= locked;
	modifiers= Lock;
    };
    indicator "Num Lock" {
	!allowExplicit;
	whichModState= locked;
	modifiers= NumLock;
    };
    indicator "Scroll Lock" {
	whichModState= locked;
	modifiers= ScrollLock;
    };
    indicator "Shift Lock" {
	!allowExplicit;
	whichModState= locked;
	modifiers= Shift;
    };
    indicator "Group 2" {
	!allowExplicit;
	groups= 0xfe;
    };
    indicator "Mouse Keys" {
	indicatorDrivesKeyboard;
	controls= mouseKeys;
    };
};

xkb_symbols "pc+gb+inet(evdev)+group(switch)" {

    name[group1]="English (UK)";

    key  <ESC> {         [          Escape ] };
    key <AE01> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [               Super_L,          exclam,        NoSymbol,        NoSymbol ]
    };
    key <AE02> {
	type[group1]= "FOUR_LEVEL",
	symbols[Group1]= [               Hyper_L,              at,        NoSymbol,        NoSymbol ],
	symbols[Group2]= [ U20AC ]
    };
    key <AE03> {
	type[group1]= "FOUR_LEVEL",
	symbols[Group1]= [       Control_L,      numbersign,        NoSymbol,        NoSymbol ],
	symbols[Group2]= [ sterling ]
    };
    key <AE04> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [          Meta_L,          dollar,        NoSymbol,        NoSymbol ]
    };
    key <AE05> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [     Mode_switch,         percent,        NoSymbol,        NoSymbol ]
    };
    key <AE06> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [               F11,     asciicircum,        NoSymbol,        NoSymbol ]
    };
    key <AE07> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [     Mode_switch,       ampersand,        NoSymbol,        NoSymbol ]
    };
    key <AE08> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [          Meta_R,        asterisk,        NoSymbol,        NoSymbol ]
    };
    key <AE09> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [       Control_R,       parenleft,        NoSymbol,        NoSymbol ]
    };
    key <AE10> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [         Hyper_R,      parenright,        NoSymbol,        NoSymbol ]
    };
    key <AE11> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [         Super_R,       braceleft,        guillemotleft,        NoSymbol ],
	symbols[Group2]= [      guillemotleft ]
    };
    key <AE12> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [    bracketright,      braceright,      guillemotright,        NoSymbol ],
	symbols[Group2]= [      guillemotright ]
    };
    key <BKSP> {         [       BackSpace,       BackSpace ] };
    key  <TAB> {         [             Tab,    ISO_Left_Tab ] };
    key <AD01> {
	type[group1]= "FOUR_LEVEL_SEMIALPHABETIC",
	symbols[Group1]= [      apostrophe,        quotedbl,      grave,  dead_diaeresis ],
	symbols[Group2]= [      grave ],
	symbols[Group3]= [      grave ]
    };
    key <AD02> {
	type[group1]= "FOUR_LEVEL_ALPHABETIC",
	symbols[Group1]= [           comma,            less,        BackSpace,        NoSymbol ],
	symbols[Group2]= [       BackSpace ]
    };
    key <AD03> {
	type[group1]= "FOUR_LEVEL_ALPHABETIC",
	symbols[Group1]= [          period,         greater,        Up,        NoSymbol ],
	symbols[Group2]= [              Up ]
    };
    key <AD04> {
	type[group1]= "FOUR_LEVEL_SEMIALPHABETIC",
	symbols[Group1]= [               p,               P,        Delete,        NoSymbol ],
	symbols[Group2]= [          Delete ]
    };
    key <AD05> {
	type= "FOUR_LEVEL_ALPHABETIC",
	symbols[Group1]= [               y,               Y,        NoSymbol,        NoSymbol ]
    };
    key <AD06> {
	type= "FOUR_LEVEL_SEMIALPHABETIC",
	symbols[Group1]= [               f,               F,        NoSymbol,        NoSymbol ]
    };
    key <AD07> {
	type= "FOUR_LEVEL_SEMIALPHABETIC",
	symbols[Group1]= [               g,               G,        NoSymbol,        NoSymbol ]
    };
    key <AD08> {
	type= "FOUR_LEVEL_SEMIALPHABETIC",
	symbols[Group1]= [               c,               C,        NoSymbol,        NoSymbol ],
	symbols[Group2]= [ U2153 ]
    };
    key <AD09> {
	type= "FOUR_LEVEL_ALPHABETIC",
	symbols[Group1]= [               r,               R,        NoSymbol,        NoSymbol ]
    };
    key <AD10> {
	type= "FOUR_LEVEL_ALPHABETIC",
	symbols[Group1]= [               l,               L,        U03BB,        NoSymbol ],
		symbols[Group2]= [       U03BB ]
    };
    key <AD11> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [           slash,        question,        asciitilde,        NoSymbol ],
	symbols[Group2]= [asciitilde]
    };
    key <AD12> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [           equal,            plus,        NoSymbol,        NoSymbol ]
    };
    key <RTRN> {         [          Return ] };
    key <LCTL> {         [       NoSymbol ] };
    key <AC01> {
	type= "FOUR_LEVEL_ALPHABETIC",
	symbols[Group1]= [               a,               A,        NoSymbol,        NoSymbol ]
    };
    key <AC02> {
	type[group1]= "FOUR_LEVEL_SEMIALPHABETIC",
	symbols[Group1]= [               o,               O,        Left,        NoSymbol ],
	symbols[Group2]= [            Left ]
    };
    key <AC03> {
	type[group1]= "FOUR_LEVEL_ALPHABETIC",
	symbols[Group1]= [               e,               E,        Down,        NoSymbol ],
	symbols[Group2]= [            Down ]
    };
    key <AC04> {
	type[group1]= "FOUR_LEVEL_SEMIALPHABETIC",
	symbols[Group1]= [               u,               U,        Right,        NoSymbol ],
	symbols[Group2]= [           Right ]
    };
    key <AC05> {
	type= "FOUR_LEVEL_ALPHABETIC",
	symbols[Group1]= [               i,               I,        NoSymbol,        NoSymbol ]
    };
    key <AC06> {
	type= "FOUR_LEVEL_ALPHABETIC",
	symbols[Group1]= [               d,               D,        NoSymbol,        NoSymbol ]
    };
    key <AC07> {
	type= "FOUR_LEVEL_SEMIALPHABETIC",
	symbols[Group1]= [               h,               H,        NoSymbol,        NoSymbol ],
	symbols[Group2]= [ U20AC ]
    };
    key <AC08> {
	type= "FOUR_LEVEL_SEMIALPHABETIC",
	symbols[Group1]= [               t,               T,        NoSymbol,        NoSymbol ],
	symbols[Group2]= [ U00B0 ]
    };
    key <AC09> {
	type= "FOUR_LEVEL_ALPHABETIC",
	symbols[Group1]= [               n,               N,        NoSymbol,        NoSymbol ],
	symbols[Group2]= [ U00BD ]
    };
    key <AC10> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [               s,               S,        NoSymbol,        NoSymbol ]
    };
    key <AC11> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [           minus,      underscore,        NoSymbol,        NoSymbol ]
    };
    key <TLDE> {
	type[group1]= "FOUR_LEVEL",
	symbols[Group1]= [           grave,      asciitilde,      dead_grave,      dead_tilde ],
	symbols[Group2]= [           grave,      asciitilde ],
	symbols[Group3]= [      dead_grave ]
    };
    key <LFSH> {         [         Shift_L ] };
    key <BKSL> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [       backslash,             bar,        NoSymbol,        NoSymbol ]
    };
    key <AB01> {
	type[group1]= "FOUR_LEVEL_SEMIALPHABETIC",
	symbols[Group1]= [       semicolon,           colon,     dead_ogonek, dead_doubleacute ],
	symbols[Group2]= [       bracketleft,           colon ],
	symbols[Group3]= [     dead_ogonek ]
    };
    key <AB02> {
	type[group1]= "FOUR_LEVEL_SEMIALPHABETIC",
	symbols[Group1]= [               q,               Q,        NoSymbol,        NoSymbol ],
	symbols[Group2]= [       bracketright,           Q ]
    };
    key <AB03> {
	type= "FOUR_LEVEL_SEMIALPHABETIC",
	symbols[Group1]= [               j,               J,        NoSymbol,        NoSymbol ],
	symbols[Group2]= [       braceleft,           J ]
    };
    key <AB04> {
	type= "FOUR_LEVEL_SEMIALPHABETIC",
	symbols[Group1]= [               k,               K,        NoSymbol,        NoSymbol ],
	symbols[Group2]= [       braceright,           K ]
    };
    key <AB05> {
	type= "FOUR_LEVEL_SEMIALPHABETIC",
	symbols[Group1]= [               x,               X,        NoSymbol,        NoSymbol ]
    };
    key <AB06> {
	type= "FOUR_LEVEL_ALPHABETIC",
	symbols[Group1]= [               b,               B,        NoSymbol,        NoSymbol ]
    };
    key <AB07> {
	type= "FOUR_LEVEL_SEMIALPHABETIC",
	symbols[Group1]= [               m,               M,        mu,        NoSymbol ],
	symbols[Group2]= [       mu ]
    };
    key <AB08> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [               w,               W,        NoSymbol,        NoSymbol ]
    };
    key <AB09> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [               v,               V,        NoSymbol,        NoSymbol ],
	symbols[Group2]= [       parenleft]
    };
    key <AB10> {
	type= "FOUR_LEVEL",
	symbols[Group1]= [               z,               Z,        NoSymbol,        NoSymbol ],
	symbols[Group2]= [       parenright]
    };
    key <RTSH> {         [         Shift_R ] };
    key <KPMU> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [     KP_Multiply,     KP_Multiply,     KP_Multiply,     KP_Multiply,   XF86ClearGrab ],
	symbols[Group2]= [     KP_Multiply,     KP_Multiply ]
    };
    key <LALT> {         [           Alt_L,          Meta_L ] };
    key <SPCE> {         [           space ] };
    key <CAPS> {         [       F12, Insert ] };
    key <FK01> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [              F1,              F1,              F1, XF86Switch_VT_1,        NoSymbol ],
	symbols[Group2]= [              F1,              F1 ]
    };
    key <FK02> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [              F2,              F2,              F2, XF86Switch_VT_2,        NoSymbol ],
	symbols[Group2]= [              F2,              F2 ]
    };
    key <FK03> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [              F3,              F3,              F3, XF86Switch_VT_3,        NoSymbol ],
	symbols[Group2]= [              F3,              F3 ]
    };
    key <FK04> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [              F4,              F4,              F4, XF86Switch_VT_4,        NoSymbol ],
	symbols[Group2]= [              F4,              F4 ]
    };
    key <FK05> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [              F5,              F5,              F5, XF86Switch_VT_5,        NoSymbol ],
	symbols[Group2]= [              F5,              F5 ]
    };
    key <FK06> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [              F6,              F6,              F6, XF86Switch_VT_6,        NoSymbol ],
	symbols[Group2]= [              F6,              F6 ]
    };
    key <FK07> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [              F7,              F7,              F7, XF86Switch_VT_7,        NoSymbol ],
	symbols[Group2]= [              F7,              F7 ]
    };
    key <FK08> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [              F8,              F8,              F8, XF86Switch_VT_8,        NoSymbol ],
	symbols[Group2]= [              F8,              F8 ]
    };
    key <FK09> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [              F9,              F9,              F9, XF86Switch_VT_9,        NoSymbol ],
	symbols[Group2]= [              F9,              F9 ]
    };
    key <FK10> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [             F10,             F10,             F10, XF86Switch_VT_10,        NoSymbol ],
	symbols[Group2]= [             F10,             F10 ]
    };
    key <NMLK> {         [        Num_Lock ] };
    key <SCLK> {         [     Scroll_Lock ] };
    key  <KP7> {         [         KP_Home,            KP_7 ] };
    key  <KP8> {         [           KP_Up,            KP_8 ] };
    key  <KP9> {         [        KP_Prior,            KP_9 ] };
    key <KPSU> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [     KP_Subtract,     KP_Subtract,     KP_Subtract,     KP_Subtract,  XF86Prev_VMode ],
	symbols[Group2]= [     KP_Subtract,     KP_Subtract ]
    };
    key  <KP4> {         [         KP_Left,            KP_4 ] };
    key  <KP5> {         [        KP_Begin,            KP_5 ] };
    key  <KP6> {         [        KP_Right,            KP_6 ] };
    key <KPAD> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [          KP_Add,          KP_Add,          KP_Add,          KP_Add,  XF86Next_VMode ],
	symbols[Group2]= [          KP_Add,          KP_Add ]
    };
    key  <KP1> {         [          KP_End,            KP_1 ] };
    key  <KP2> {         [         KP_Down,            KP_2 ] };
    key  <KP3> {         [         KP_Next,            KP_3 ] };
    key  <KP0> {         [       KP_Insert,            KP_0 ] };
    key <KPDL> {         [       KP_Delete,      KP_Decimal ] };
    key <LVL3> {
	type= "ONE_LEVEL",
	symbols[Group1]= [ ISO_Level3_Shift ]
    };
    key <LSGT> {
	type[group1]= "FOUR_LEVEL",
	symbols[Group1]= [            section,         paragraph,             dagger,       brokenbar ],
	symbols[Group2]= [            dagger,         U2021 ],
	symbols[Group3]= [             bar ]
    };
    key <FK11> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [             F11,             F11,             F11,             F11, XF86Switch_VT_11 ],
	symbols[Group2]= [             F11,             F11 ]
    };
    key <FK12> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [             F12,             F12,             F12,             F12, XF86Switch_VT_12 ],
	symbols[Group2]= [             F12,             F12 ]
    };
    key <KATA> {         [        Katakana ] };
    key <HIRA> {         [        Hiragana ] };
    key <HENK> {         [     Henkan_Mode ] };
    key <HKTG> {         [ Hiragana_Katakana ] };
    key <MUHE> {         [        Muhenkan ] };
    key <KPEN> {         [        KP_Enter ] };
    key <RCTL> {         [       Control_R ] };
    key <KPDV> {
	type[group1]= "CTRL+ALT",
	symbols[Group1]= [       KP_Divide,       KP_Divide,       KP_Divide,       KP_Divide,      XF86Ungrab ],
	symbols[Group2]= [       KP_Divide,       KP_Divide ]
    };
    key <PRSC> {
	type= "PC_ALT_LEVEL2",
	symbols[Group1]= [           Print,         Sys_Req ]
    };
    key <RALT> {
	type= "TWO_LEVEL",
	symbols[Group1]= [           Alt_R,          Meta_R ]
    };
    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> {
	symbols[Group1]= [               0,   XF86AudioMute ],
	symbols[Group2]= [        NoSymbol,   XF86AudioMute ]
    };
    key <VOL-> {         [ at, XF86AudioLowerVolume ] };
    key <VOL+> {         [ XF86AudioRaiseVolume ] };
    key <POWR> {         [    XF86PowerOff ] };
    key <KPEQ> {         [        KP_Equal ] };
    key <I126> {         [       plusminus ] };
    key <PAUS> {
	type= "PC_CONTROL_LEVEL2",
	symbols[Group1]= [           Pause,           Break ]
    };
    key <I128> {
	symbols[Group1]= [               3,     XF86LaunchA ],
	symbols[Group2]= [        NoSymbol,     XF86LaunchA ]
    };
    key <I129> {         [      KP_Decimal,      KP_Decimal ] };
    key <HNGL> {         [          Hangul ] };
    key <HJCV> {         [    Hangul_Hanja ] };
    key <LWIN> {         [         Super_L ] };
    key <RWIN> {         [         Super_R ] };
    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 <I162> {         [ XF86RotateWindows ] };
    key <I163> {         [        XF86Mail ] };
    key <I164> {         [   XF86Favorites ] };
    key <I165> {         [  XF86MyComputer ] };
    key <I166> {         [        XF86Back ] };
    key <I167> {         [     XF86Forward ] };
    key <I169> {         [       XF86Eject ] };
    key <I170> {         [       XF86Eject,       XF86Eject ] };
    key <I171> {
	symbols[Group1]= [               9,   XF86AudioNext ],
	symbols[Group2]= [        NoSymbol,   XF86AudioNext ]
    };
    key <I172> {
	symbols[Group1]= [               8,   XF86AudioPlay ],
	symbols[Group2]= [  XF86AudioPause,   XF86AudioPlay ],
	symbols[Group3]= [  XF86AudioPause ]
    };
    key <I173> {
	symbols[Group1]= [               7,   XF86AudioPrev ],
	symbols[Group2]= [        NoSymbol,   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 <MDSW> {         [     Mode_switch ] };
    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> {
	symbols[Group1]= [               4,     XF86LaunchB ],
	symbols[Group2]= [        NoSymbol,     XF86LaunchB ]
    };
    key <I213> {         [     XF86Suspend ] };
    key <I214> {         [       XF86Close ] };
    key <I215> {         [   XF86AudioPlay ] };
    key <I216> {         [ XF86AudioForward ] };
    key <I218> {         [           Print ] };
    key <I220> {         [      XF86WebCam ] };
    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> {
	symbols[Group1]= [               1, XF86MonBrightnessDown ],
	symbols[Group2]= [        NoSymbol, XF86MonBrightnessDown ]
    };
    key <I233> {
	symbols[Group1]= [               2, XF86MonBrightnessUp ],
	symbols[Group2]= [        NoSymbol, XF86MonBrightnessUp ]
    };
    key <I234> {         [  XF86AudioMedia ] };
    key <I235> {         [     XF86Display ] };
    key <I236> {         [ XF86KbdLightOnOff ] };
    key <I237> {
	symbols[Group1]= [               5, XF86KbdBrightnessDown ],
	symbols[Group2]= [        NoSymbol, XF86KbdBrightnessDown ]
    };
    key <I238> {
	symbols[Group1]= [               6, XF86KbdBrightnessUp ],
	symbols[Group2]= [        NoSymbol, 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 ] };
    modifier_map Control { <AE03> };
    modifier_map Mod1 { <AE04> };
    modifier_map Mod2 { <AE05> };
    modifier_map Mod2 { <AE07> };
    modifier_map Mod1 { <AE08> };
    modifier_map Control { <AE09> };
    modifier_map Control { <LCTL> };
    modifier_map Shift { <LFSH> };
    modifier_map Shift { <RTSH> };
    modifier_map Mod1 { <LALT> };
    modifier_map Control { <RCTL> };
    modifier_map Mod1 { <RALT> };
    modifier_map Mod2 { <MDSW> };
    modifier_map Mod1 { <META> };
    modifier_map Mod3 { <AE01> };
    modifier_map Mod3 { <AE11> };
    modifier_map Mod4 { <AE02> };
    modifier_map Mod4 { <AE10> };

}
	;

xkb_geometry "pc(pc104)" {

    width=       470;
    height=      180;

    alias <AC00> = <CAPS>;
    alias <AA00> = <LCTL>;

    baseColor=   "white";
    labelColor=  "black";
    xfont=       "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
    description= "Generic 104";

    shape "NORM" {
	corner= 1,
	{ [  18,  18 ] },
	{ [   2,   1 ], [  16,  16 ] }
    };
    shape "BKSP" {
	corner= 1,
	{ [  38,  18 ] },
	{ [   2,   1 ], [  36,  16 ] }
    };
    shape "TABK" {
	corner= 1,
	{ [  28,  18 ] },
	{ [   2,   1 ], [  26,  16 ] }
    };
    shape "BKSL" {
	corner= 1,
	{ [  28,  18 ] },
	{ [   2,   1 ], [  26,  16 ] }
    };
    shape "RTRN" {
	corner= 1,
	{ [  42,  18 ] },
	{ [   2,   1 ], [  40,  16 ] }
    };
    shape "CAPS" {
	corner= 1,
	{ [  33,  18 ] },
	{ [   2,   1 ], [  31,  16 ] }
    };
    shape "LFSH" {
	corner= 1,
	{ [  42,  18 ] },
	{ [   2,   1 ], [  40,  16 ] }
    };
    shape "RTSH" {
	corner= 1,
	{ [  52,  18 ] },
	{ [   2,   1 ], [  50,  16 ] }
    };
    shape "MODK" {
	corner= 1,
	{ [  27,  18 ] },
	{ [   2,   1 ], [  25,  16 ] }
    };
    shape "SMOD" {
	corner= 1,
	{ [  23,  18 ] },
	{ [   2,   1 ], [  21,  16 ] }
    };
    shape "SPCE" {
	corner= 1,
	{ [ 113,  18 ] },
	{ [   2,   1 ], [ 111,  16 ] }
    };
    shape "KP0" {
	corner= 1,
	{ [  37,  18 ] },
	{ [   2,   1 ], [  35,  16 ] }
    };
    shape "KPAD" {
	corner= 1,
	{ [  18,  37 ] },
	{ [   2,   1 ], [  16,  35 ] }
    };
    shape "LEDS" { { [  75,  20 ] } };
    shape "LED" { { [   5,   1 ] } };
    section "Function" {
	key.color= "grey20";
	priority=  7;
	top=       22;
	left=      19;
	width=     351;
	height=    19;
	row {
	    top=  1;
	    left= 1;
	    keys {
		{  <ESC>, "NORM",   1 },
		{ <FK01>, "NORM",  20, color="white" },
		{ <FK02>, "NORM",   1, color="white" },
		{ <FK03>, "NORM",   1, color="white" },
		{ <FK04>, "NORM",   1, color="white" },
		{ <FK05>, "NORM",  11, color="white" },
		{ <FK06>, "NORM",   1, color="white" },
		{ <FK07>, "NORM",   1, color="white" },
		{ <FK08>, "NORM",   1, color="white" },
		{ <FK09>, "NORM",  11, color="white" },
		{ <FK10>, "NORM",   1, color="white" },
		{ <FK11>, "NORM",   1, color="white" },
		{ <FK12>, "NORM",   1, color="white" },
		{ <PRSC>, "NORM",   8, color="white" },
		{ <SCLK>, "NORM",   1, color="white" },
		{ <PAUS>, "NORM",   1, color="white" }
	    };
	};
    }; // End of "Function" section

    section "Alpha" {
	key.color= "white";
	priority=  8;
	top=       61;
	left=      19;
	width=     287;
	height=    95;
	row {
	    top=  1;
	    left= 1;
	    keys {
		{ <TLDE>, "NORM",   1 }, { <AE01>, "NORM",   1 },
		{ <AE02>, "NORM",   1 }, { <AE03>, "NORM",   1 },
		{ <AE04>, "NORM",   1 }, { <AE05>, "NORM",   1 },
		{ <AE06>, "NORM",   1 }, { <AE07>, "NORM",   1 },
		{ <AE08>, "NORM",   1 }, { <AE09>, "NORM",   1 },
		{ <AE10>, "NORM",   1 }, { <AE11>, "NORM",   1 },
		{ <AE12>, "NORM",   1 },
		{ <BKSP>, "BKSP",   1, color="grey20" }
	    };
	};
	row {
	    top=  20;
	    left= 1;
	    keys {
		{  <TAB>, "TABK",   1, color="grey20" },
		{ <AD01>, "NORM",   1 }, { <AD02>, "NORM",   1 },
		{ <AD03>, "NORM",   1 }, { <AD04>, "NORM",   1 },
		{ <AD05>, "NORM",   1 }, { <AD06>, "NORM",   1 },
		{ <AD07>, "NORM",   1 }, { <AD08>, "NORM",   1 },
		{ <AD09>, "NORM",   1 }, { <AD10>, "NORM",   1 },
		{ <AD11>, "NORM",   1 }, { <AD12>, "NORM",   1 },
		{ <BKSL>, "BKSL",   1 }
	    };
	};
	row {
	    top=  39;
	    left= 1;
	    keys {
		{ <CAPS>, "CAPS",   1, color="grey20" },
		{ <AC01>, "NORM",   1 }, { <AC02>, "NORM",   1 },
		{ <AC03>, "NORM",   1 }, { <AC04>, "NORM",   1 },
		{ <AC05>, "NORM",   1 }, { <AC06>, "NORM",   1 },
		{ <AC07>, "NORM",   1 }, { <AC08>, "NORM",   1 },
		{ <AC09>, "NORM",   1 }, { <AC10>, "NORM",   1 },
		{ <AC11>, "NORM",   1 },
		{ <RTRN>, "RTRN",   1, color="grey20" }
	    };
	};
	row {
	    top=  58;
	    left= 1;
	    keys {
		{ <LFSH>, "LFSH",   1, color="grey20" },
		{ <AB01>, "NORM",   1 }, { <AB02>, "NORM",   1 },
		{ <AB03>, "NORM",   1 }, { <AB04>, "NORM",   1 },
		{ <AB05>, "NORM",   1 }, { <AB06>, "NORM",   1 },
		{ <AB07>, "NORM",   1 }, { <AB08>, "NORM",   1 },
		{ <AB09>, "NORM",   1 }, { <AB10>, "NORM",   1 },
		{ <RTSH>, "RTSH",   1, color="grey20" }
	    };
	};
	row {
	    top=  77;
	    left= 1;
	    keys {
		{ <LCTL>, "MODK",   1, color="grey20" },
		{ <LWIN>, "SMOD",   1, color="grey20" },
		{ <LALT>, "SMOD",   1, color="grey20" },
		{ <SPCE>, "SPCE",   1 },
		{ <RALT>, "SMOD",   1, color="grey20" },
		{ <RWIN>, "SMOD",   1, color="grey20" },
		{ <MENU>, "SMOD",   1, color="grey20" },
		{ <RCTL>, "SMOD",   1, color="grey20" }
	    };
	};
    }; // End of "Alpha" section

    section "Editing" {
	key.color= "grey20";
	priority=  9;
	top=       61;
	left=      312;
	width=     58;
	height=    95;
	row {
	    top=  1;
	    left= 1;
	    keys {
		{  <INS>, "NORM",   1 }, { <HOME>, "NORM",   1 },
		{ <PGUP>, "NORM",   1 }
	    };
	};
	row {
	    top=  20;
	    left= 1;
	    keys {
		{ <DELE>, "NORM",   1 }, {  <END>, "NORM",   1 },
		{ <PGDN>, "NORM",   1 }
	    };
	};
	row {
	    top=  58;
	    left= 20;
	    keys {
		{   <UP>, "NORM",   1 }
	    };
	};
	row {
	    top=  77;
	    left= 1;
	    keys {
		{ <LEFT>, "NORM",   1 }, { <DOWN>, "NORM",   1 },
		{ <RGHT>, "NORM",   1 }
	    };
	};
    }; // End of "Editing" section

    section "Keypad" {
	key.color= "grey20";
	priority=  10;
	top=       61;
	left=      376;
	width=     77;
	height=    95;
	row {
	    top=  1;
	    left= 1;
	    keys {
		{ <NMLK>, "NORM",   1 }, { <KPDV>, "NORM",   1 },
		{ <KPMU>, "NORM",   1 }, { <KPSU>, "NORM",   1 }
	    };
	};
	row {
	    top=  20;
	    left= 1;
	    keys {
		{  <KP7>, "NORM",   1, color="white" },
		{  <KP8>, "NORM",   1, color="white" },
		{  <KP9>, "NORM",   1, color="white" },
		{ <KPAD>, "KPAD",   1 }
	    };
	};
	row {
	    top=  39;
	    left= 1;
	    keys {
		{  <KP4>, "NORM",   1, color="white" },
		{  <KP5>, "NORM",   1, color="white" },
		{  <KP6>, "NORM",   1, color="white" }
	    };
	};
	row {
	    top=  58;
	    left= 1;
	    keys {
		{  <KP1>, "NORM",   1, color="white" },
		{  <KP2>, "NORM",   1, color="white" },
		{  <KP3>, "NORM",   1, color="white" },
		{ <KPEN>, "KPAD",   1 }
	    };
	};
	row {
	    top=  77;
	    left= 1;
	    keys {
		{  <KP0>, "KP0",   1, color="white" },
		{ <KPDL>, "NORM",   1, color="white" }
	    };
	};
    }; // End of "Keypad" section

    solid "LedPanel" {
	top=      22;
	left=     377;
	priority= 0;
	color= "grey10";
	shape= "LEDS";
    };
    indicator "Num Lock" {
	top=      37;
	left=     382;
	priority= 1;
	onColor= "green";
	offColor= "green30";
	shape= "LED";
    };
    indicator "Caps Lock" {
	top=      37;
	left=     407;
	priority= 2;
	onColor= "green";
	offColor= "green30";
	shape= "LED";
    };
    indicator "Scroll Lock" {
	top=      37;
	left=     433;
	priority= 3;
	onColor= "green";
	offColor= "green30";
	shape= "LED";
    };
    text "NumLockLabel" {
	top=      25;
	left=     378;
	priority= 4;
	width=  19.8;
	height=  10;
	XFont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
	text=  "Num\nLock";
    };
    text "CapsLockLabel" {
	top=      25;
	left=     403;
	priority= 5;
	width=  26.4;
	height=  10;
	XFont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
	text=  "Caps\nLock";
    };
    text "ScrollLockLabel" {
	top=      25;
	left=     428;
	priority= 6;
	width=  39.6;
	height=  10;
	XFont= "-*-helvetica-medium-r-normal--*-120-*-*-*-*-iso8859-1";
	text=  "Scroll\nLock";
    };
};

}
	;

Author: Joseph Corneli

Created: 2015-07-30 Thu 12:41

Validate