Merge branch 'add-built-in-keymaps' into 'master'
Add built in keymaps See merge request Librem5/squeekboard!78
This commit is contained in:
		@ -44,9 +44,9 @@
 | 
			
		||||
  <section angle="0">
 | 
			
		||||
    <row orientation="1">
 | 
			
		||||
      <key keycode="0" name="ABC123" oref="altline" />
 | 
			
		||||
      <key keycode="150" name="I150" oref="altline" />
 | 
			
		||||
      <key keycode="149" name="I149" oref="altline" />
 | 
			
		||||
      <key keycode="65" name="SPCE" oref="spaceline" />
 | 
			
		||||
      <key keycode="60" name="AB09" oref="outline2" />
 | 
			
		||||
      <key keycode="59" name="AB08" oref="outline2" />
 | 
			
		||||
      <key keycode="36" name="RTRN" oref="outline7" />
 | 
			
		||||
    </row>
 | 
			
		||||
  </section>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										126
									
								
								data/keyboards/geometry/extended.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								data/keyboards/geometry/extended.xml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,126 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<geometry version="0.90">
 | 
			
		||||
  <bounds x="0" y="10.000000" width="426.0000" height="296.5853"/>
 | 
			
		||||
  <!-- Keycodes correspond to those used in /usr/share/X11/xkb/keycodes/evdev.
 | 
			
		||||
       For Squeekboard, the values have no connection to evdev. They are only
 | 
			
		||||
       used as indices into the keymap sent to the compositor. They must have
 | 
			
		||||
       values in the range from 8 to 255. -->
 | 
			
		||||
  <section angle="0">
 | 
			
		||||
    <row orientation="1">
 | 
			
		||||
      <key keycode="24" name="AD01" oref="outline2" />
 | 
			
		||||
      <key keycode="25" name="AD02" oref="outline2" />
 | 
			
		||||
      <key keycode="26" name="AD03" oref="outline2" />
 | 
			
		||||
      <key keycode="27" name="AD04" oref="outline2" />
 | 
			
		||||
      <key keycode="28" name="AD05" oref="outline2" />
 | 
			
		||||
      <key keycode="29" name="AD06" oref="outline2" />
 | 
			
		||||
      <key keycode="30" name="AD07" oref="outline2" />
 | 
			
		||||
      <key keycode="31" name="AD08" oref="outline2" />
 | 
			
		||||
      <key keycode="32" name="AD09" oref="outline2" />
 | 
			
		||||
      <key keycode="33" name="AD10" oref="outline2" />
 | 
			
		||||
      <key keycode="34" name="AD11" oref="outline2" />
 | 
			
		||||
    </row>
 | 
			
		||||
  </section>
 | 
			
		||||
  <section angle="0">
 | 
			
		||||
    <row orientation="1">
 | 
			
		||||
      <key keycode="38" name="AC01" oref="outline2" />
 | 
			
		||||
      <key keycode="39" name="AC02" oref="outline2" />
 | 
			
		||||
      <key keycode="40" name="AC03" oref="outline2" />
 | 
			
		||||
      <key keycode="41" name="AC04" oref="outline2" />
 | 
			
		||||
      <key keycode="42" name="AC05" oref="outline2" />
 | 
			
		||||
      <key keycode="43" name="AC06" oref="outline2" />
 | 
			
		||||
      <key keycode="44" name="AC07" oref="outline2" />
 | 
			
		||||
      <key keycode="45" name="AC08" oref="outline2" />
 | 
			
		||||
      <key keycode="46" name="AC09" oref="outline2" />
 | 
			
		||||
      <key keycode="47" name="AC10" oref="outline2" />
 | 
			
		||||
      <key keycode="48" name="AC11" oref="outline2" />
 | 
			
		||||
    </row>
 | 
			
		||||
  </section>
 | 
			
		||||
  <section angle="0">
 | 
			
		||||
    <row orientation="1">
 | 
			
		||||
      <key keycode="50" name="LFSH" oref="altline" />
 | 
			
		||||
      <key keycode="52" name="AB01" oref="outline2" />
 | 
			
		||||
      <key keycode="53" name="AB02" oref="outline2" />
 | 
			
		||||
      <key keycode="54" name="AB03" oref="outline2" />
 | 
			
		||||
      <key keycode="55" name="AB04" oref="outline2" />
 | 
			
		||||
      <key keycode="56" name="AB05" oref="outline2" />
 | 
			
		||||
      <key keycode="57" name="AB06" oref="outline2" />
 | 
			
		||||
      <key keycode="58" name="AB07" oref="outline2" />
 | 
			
		||||
      <key keycode="22" name="BKSP" oref="altline" />
 | 
			
		||||
    </row>
 | 
			
		||||
  </section>
 | 
			
		||||
  <section angle="0">
 | 
			
		||||
    <row orientation="1">
 | 
			
		||||
      <key keycode="0" name="ABC123" oref="altline" />
 | 
			
		||||
      <key keycode="149" name="I149" oref="altline" />
 | 
			
		||||
      <key keycode="65" name="SPCE" oref="spaceline" />
 | 
			
		||||
      <key keycode="59" name="AB08" oref="outline2" />
 | 
			
		||||
      <key keycode="36" name="RTRN" oref="outline7" />
 | 
			
		||||
    </row>
 | 
			
		||||
  </section>
 | 
			
		||||
  <outline id="outline2" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="32" y="0.000000"/>
 | 
			
		||||
    <point x="32" y="52.44877"/>
 | 
			
		||||
    <point x="0.000000" y="52.44877"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="altline" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="48.39024" y="0.000000"/>
 | 
			
		||||
    <point x="48.39024" y="52.44877"/>
 | 
			
		||||
    <point x="0.000000" y="52.44877"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline4" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="59.31707" y="0.000000"/>
 | 
			
		||||
    <point x="59.31707" y="52.44877"/>
 | 
			
		||||
    <point x="0.000000" y="52.44877"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline5" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="59.31707" y="0.000000"/>
 | 
			
		||||
    <point x="59.31707" y="52.44877"/>
 | 
			
		||||
    <point x="0.000000" y="52.44877"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline6" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="68.68292" y="0.000000"/>
 | 
			
		||||
    <point x="68.68292" y="52.44877"/>
 | 
			
		||||
    <point x="0.000000" y="52.44877"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline7" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="88.97561" y="0.000000"/>
 | 
			
		||||
    <point x="88.97561" y="52.44877"/>
 | 
			
		||||
    <point x="0.000000" y="52.44877"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline8" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="88.97561" y="0.000000"/>
 | 
			
		||||
    <point x="88.97561" y="52.44877"/>
 | 
			
		||||
    <point x="0.000000" y="52.44877"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline9" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="109.2682" y="0.000000"/>
 | 
			
		||||
    <point x="109.2682" y="52.44877"/>
 | 
			
		||||
    <point x="0.000000" y="52.44877"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline10" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="37.46341" y="0.000000"/>
 | 
			
		||||
    <point x="37.46341" y="52.44877"/>
 | 
			
		||||
    <point x="0.000000" y="52.44877"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="outline13" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="79.60975" y="0.000000"/>
 | 
			
		||||
    <point x="79.60975" y="52.44877"/>
 | 
			
		||||
    <point x="0.000000" y="52.44877"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
  <outline id="spaceline" corner-radius="1.000000">
 | 
			
		||||
    <point x="0.000000" y="0.000000"/>
 | 
			
		||||
    <point x="150.5853" y="0.000000"/>
 | 
			
		||||
    <point x="150.5853" y="52.44877"/>
 | 
			
		||||
    <point x="0.000000" y="52.44877"/>
 | 
			
		||||
  </outline>
 | 
			
		||||
</geometry>
 | 
			
		||||
@ -24,6 +24,9 @@
 | 
			
		||||
  <keyboard id="my" name="my"
 | 
			
		||||
	    geometry="compact" symbols="my"
 | 
			
		||||
	    longname="Myanmar" language="my"/>
 | 
			
		||||
  <keyboard id="nb" name="nb"
 | 
			
		||||
	    geometry="extended" symbols="nb"
 | 
			
		||||
	    longname="Norwegian" language="nb"/>
 | 
			
		||||
  <keyboard id="ru" name="ru"
 | 
			
		||||
	    geometry="compact" symbols="us"
 | 
			
		||||
	    longname="Russian" language="ru"/>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										308
									
								
								data/keyboards/keymaps/nb.xkb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										308
									
								
								data/keyboards/keymaps/nb.xkb
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,308 @@
 | 
			
		||||
xkb_keymap {
 | 
			
		||||
 | 
			
		||||
    xkb_keycodes "squeekboard" {
 | 
			
		||||
        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;
 | 
			
		||||
        <I254>               = 254;
 | 
			
		||||
        <I255>               = 255;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    xkb_symbols "squeekboard" {
 | 
			
		||||
 | 
			
		||||
        name[Group1] = "Letters";
 | 
			
		||||
        name[Group2] = "Numbers/Symbols";
 | 
			
		||||
 | 
			
		||||
        key <AD01> { [ q, Q ], [ 1, asciitilde ] };
 | 
			
		||||
        key <AD02> { [ w, W ], [ 2, quoteleft ] };
 | 
			
		||||
        key <AD03> { [ e, E ], [ 3, bar ] };
 | 
			
		||||
        key <AD04> { [ r, R ], [ 4, U00B7 ] };
 | 
			
		||||
        key <AD05> { [ t, T ], [ 5, squareroot ] };
 | 
			
		||||
        key <AD06> { [ y, Y ], [ 6, Greek_pi ] };
 | 
			
		||||
        key <AD07> { [ u, U ], [ 7, division ] };
 | 
			
		||||
        key <AD08> { [ i, I ], [ 8, multiply ] };
 | 
			
		||||
        key <AD09> { [ o, O ], [ 9, paragraph ] };
 | 
			
		||||
        key <AD10> { [ p, P ], [ 0, U25B3 ] };
 | 
			
		||||
        key <AD11> { [ aring, Aring ], [ U00B1, U00A7 ] };
 | 
			
		||||
        key <AC01> { [ a, A ], [ at, copyright ] };
 | 
			
		||||
        key <AC02> { [ s, S ], [ numbersign, U00AE ] };
 | 
			
		||||
        key <AC03> { [ d, D ], [ dollar, U00A3 ] };
 | 
			
		||||
        key <AC04> { [ f, F ], [ percent, EuroSign ] };
 | 
			
		||||
        key <AC05> { [ g, G ], [ ampersand, U00A5 ] };
 | 
			
		||||
        key <AC06> { [ h, H ], [ minus, underscore ] };
 | 
			
		||||
        key <AC07> { [ j, J ], [ plus, equal ] };
 | 
			
		||||
        key <AC08> { [ k, K ], [ U00FC, asciicircum ] };
 | 
			
		||||
        key <AC09> { [ l, L ], [ U00F6, degree ] };
 | 
			
		||||
        key <AC10> { [ oslash, Oslash ], [ parenleft, braceleft ] };
 | 
			
		||||
        key <AC11> { [ ae, AE ], [ parenright, braceright ] };
 | 
			
		||||
        key <RTRN> { [ Return, Return ], [ Return, Return ] };
 | 
			
		||||
        key <LFSH> { [ Shift_L, Shift_L ], [ Shift_L, Shift_L ] };
 | 
			
		||||
        key <AB01> { [ z, Z ], [ comma, backslash ] };
 | 
			
		||||
        key <AB02> { [ x, X ], [ quotedbl, slash ] };
 | 
			
		||||
        key <AB03> { [ c, C ], [ quoteright, less ] };
 | 
			
		||||
        key <AB04> { [ v, V ], [ colon, greater ] };
 | 
			
		||||
        key <AB05> { [ b, B ], [ semicolon, equal ] };
 | 
			
		||||
        key <AB06> { [ n, N ], [ exclam, bracketleft ] };
 | 
			
		||||
        key <AB07> { [ m, M ], [ question, bracketright ] };
 | 
			
		||||
        key <AB08> { [ period, period ], [ period, period ] };
 | 
			
		||||
        key <I149> { [ preferences, preferences ], [ preferences, preferences ] };
 | 
			
		||||
        key <SPCE> { [ space, space ], [ space, space ] };
 | 
			
		||||
        key <BKSP> { [ BackSpace, BackSpace ], [ BackSpace, BackSpace ] };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    xkb_types "squeekboard" {
 | 
			
		||||
 | 
			
		||||
	type "TWO_LEVEL" {
 | 
			
		||||
            modifiers = Shift;
 | 
			
		||||
            map[Shift] = Level2;
 | 
			
		||||
            level_name[Level1] = "Base";
 | 
			
		||||
            level_name[Level2] = "Shift";
 | 
			
		||||
	};
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    xkb_compatibility "squeekboard" {
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										305
									
								
								data/keyboards/keymaps/us.xkb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										305
									
								
								data/keyboards/keymaps/us.xkb
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,305 @@
 | 
			
		||||
xkb_keymap {
 | 
			
		||||
 | 
			
		||||
    xkb_keycodes "squeekboard" {
 | 
			
		||||
        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;
 | 
			
		||||
        <I254>               = 254;
 | 
			
		||||
        <I255>               = 255;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    xkb_symbols "squeekboard" {
 | 
			
		||||
 | 
			
		||||
        name[Group1] = "Letters";
 | 
			
		||||
        name[Group2] = "Numbers/Symbols";
 | 
			
		||||
 | 
			
		||||
        key <AD01> { [ q, Q ], [ 1, asciitilde ] };
 | 
			
		||||
        key <AD02> { [ w, W ], [ 2, quoteleft ] };
 | 
			
		||||
        key <AD03> { [ e, E ], [ 3, bar ] };
 | 
			
		||||
        key <AD04> { [ r, R ], [ 4, U00B7 ] };
 | 
			
		||||
        key <AD05> { [ t, T ], [ 5, squareroot ] };
 | 
			
		||||
        key <AD06> { [ y, Y ], [ 6, Greek_pi ] };
 | 
			
		||||
        key <AD07> { [ u, U ], [ 7, division ] };
 | 
			
		||||
        key <AD08> { [ i, I ], [ 8, multiply ] };
 | 
			
		||||
        key <AD09> { [ o, O ], [ 9, paragraph ] };
 | 
			
		||||
        key <AD10> { [ p, P ], [ 0, U25B3 ] };
 | 
			
		||||
        key <AC01> { [ a, A ], [ at, copyright ] };
 | 
			
		||||
        key <AC02> { [ s, S ], [ numbersign, U00AE ] };
 | 
			
		||||
        key <AC03> { [ d, D ], [ dollar, U00A3 ] };
 | 
			
		||||
        key <AC04> { [ f, F ], [ percent, EuroSign ] };
 | 
			
		||||
        key <AC05> { [ g, G ], [ ampersand, U00A5 ] };
 | 
			
		||||
        key <AC06> { [ h, H ], [ minus, underscore ] };
 | 
			
		||||
        key <AC07> { [ j, J ], [ plus, equal ] };
 | 
			
		||||
        key <AC08> { [ k, K ], [ U00FC, asciicircum ] };
 | 
			
		||||
        key <AC09> { [ l, L ], [ U00F6, degree ] };
 | 
			
		||||
        key <RTRN> { [ Return, Return ], [ Return, Return ] };
 | 
			
		||||
        key <LFSH> { [ Shift_L, Shift_L ], [ Shift_L, Shift_L ] };
 | 
			
		||||
        key <AB01> { [ z, Z ], [ comma, backslash ] };
 | 
			
		||||
        key <AB02> { [ x, X ], [ quotedbl, slash ] };
 | 
			
		||||
        key <AB03> { [ c, C ], [ quoteright, less ] };
 | 
			
		||||
        key <AB04> { [ v, V ], [ colon, greater ] };
 | 
			
		||||
        key <AB05> { [ b, B ], [ semicolon, equal ] };
 | 
			
		||||
        key <AB06> { [ n, N ], [ exclam, bracketleft ] };
 | 
			
		||||
        key <AB07> { [ m, M ], [ question, bracketright ] };
 | 
			
		||||
        key <AB08> { [ period, period ], [ period, period ] };
 | 
			
		||||
        key <I149> { [ preferences, preferences ], [ preferences, preferences ] };
 | 
			
		||||
        key <SPCE> { [ space, space ], [ space, space ] };
 | 
			
		||||
        key <BKSP> { [ BackSpace, BackSpace ], [ BackSpace, BackSpace ] };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    xkb_types "squeekboard" {
 | 
			
		||||
 | 
			
		||||
	type "TWO_LEVEL" {
 | 
			
		||||
            modifiers = Shift;
 | 
			
		||||
            map[Shift] = Level2;
 | 
			
		||||
            level_name[Level1] = "Base";
 | 
			
		||||
            level_name[Level2] = "Shift";
 | 
			
		||||
	};
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    xkb_compatibility "squeekboard" {
 | 
			
		||||
    };
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										204
									
								
								data/keyboards/symbols/nb.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										204
									
								
								data/keyboards/symbols/nb.xml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,204 @@
 | 
			
		||||
<?xml version='1.0' encoding='ASCII' standalone='yes'?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <key name="AD01">
 | 
			
		||||
    <symbol label="q">q</symbol>
 | 
			
		||||
    <symbol label="Q">Q</symbol>
 | 
			
		||||
    <symbol label="1">1</symbol>
 | 
			
		||||
    <symbol label="~">asciitilde</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AD02">
 | 
			
		||||
    <symbol label="w">w</symbol>
 | 
			
		||||
    <symbol label="W">W</symbol>
 | 
			
		||||
    <symbol label="2">2</symbol>
 | 
			
		||||
    <symbol label="`">quoteleft</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AD03">
 | 
			
		||||
    <symbol label="e">e</symbol>
 | 
			
		||||
    <symbol label="E">E</symbol>
 | 
			
		||||
    <symbol label="3">3</symbol>
 | 
			
		||||
    <symbol label="|">bar</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AD04">
 | 
			
		||||
    <symbol label="r">r</symbol>
 | 
			
		||||
    <symbol label="R">R</symbol>
 | 
			
		||||
    <symbol label="4">4</symbol>
 | 
			
		||||
    <symbol label="·">U00B7</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AD05">
 | 
			
		||||
    <symbol label="t">t</symbol>
 | 
			
		||||
    <symbol label="T">T</symbol>
 | 
			
		||||
    <symbol label="5">5</symbol>
 | 
			
		||||
    <symbol label="√">squareroot</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AD06">
 | 
			
		||||
    <symbol label="y">y</symbol>
 | 
			
		||||
    <symbol label="Y">Y</symbol>
 | 
			
		||||
    <symbol label="6">6</symbol>
 | 
			
		||||
    <symbol label="π">Greek_pi</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AD07">
 | 
			
		||||
    <symbol label="u">u</symbol>
 | 
			
		||||
    <symbol label="U">U</symbol>
 | 
			
		||||
    <symbol label="7">7</symbol>
 | 
			
		||||
    <symbol label="÷">division</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AD08">
 | 
			
		||||
    <symbol label="i">i</symbol>
 | 
			
		||||
    <symbol label="I">I</symbol>
 | 
			
		||||
    <symbol label="8">8</symbol>
 | 
			
		||||
    <symbol label="×">multiply</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AD09">
 | 
			
		||||
    <symbol label="o">o</symbol>
 | 
			
		||||
    <symbol label="O">O</symbol>
 | 
			
		||||
    <symbol label="9">9</symbol>
 | 
			
		||||
    <symbol label="¶">paragraph</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AD10">
 | 
			
		||||
    <symbol label="p">p</symbol>
 | 
			
		||||
    <symbol label="P">P</symbol>
 | 
			
		||||
    <symbol label="0">0</symbol>
 | 
			
		||||
    <symbol label="△">U25B3</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AD11">
 | 
			
		||||
    <symbol keyval="229" label="å">aring</symbol>
 | 
			
		||||
    <symbol keyval="197" label="Å">Aring</symbol>
 | 
			
		||||
    <symbol label="±">U00B1</symbol>
 | 
			
		||||
    <symbol label="§">U00A7</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AC01">
 | 
			
		||||
    <symbol label="a">a</symbol>
 | 
			
		||||
    <symbol label="A">A</symbol>
 | 
			
		||||
    <symbol label="@">at</symbol>
 | 
			
		||||
    <symbol label="©">copyright</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AC02">
 | 
			
		||||
    <symbol label="s">s</symbol>
 | 
			
		||||
    <symbol label="S">S</symbol>
 | 
			
		||||
    <symbol label="#">numbersign</symbol>
 | 
			
		||||
    <symbol label="®">U00AE</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AC03">
 | 
			
		||||
    <symbol label="d">d</symbol>
 | 
			
		||||
    <symbol label="D">D</symbol>
 | 
			
		||||
    <symbol label="$">dollar</symbol>
 | 
			
		||||
    <symbol label="£">U00A3</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AC04">
 | 
			
		||||
    <symbol label="f">f</symbol>
 | 
			
		||||
    <symbol label="F">F</symbol>
 | 
			
		||||
    <symbol label="%">percent</symbol>
 | 
			
		||||
    <symbol label="€">EuroSign</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AC05">
 | 
			
		||||
    <symbol label="g">g</symbol>
 | 
			
		||||
    <symbol label="G">G</symbol>
 | 
			
		||||
    <symbol label="&">ampersand</symbol>
 | 
			
		||||
    <symbol label="¥">U00A5</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AC06">
 | 
			
		||||
    <symbol label="h">h</symbol>
 | 
			
		||||
    <symbol label="H">H</symbol>
 | 
			
		||||
    <symbol label="-">minus</symbol>
 | 
			
		||||
    <symbol label="_">underscore</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AC07">
 | 
			
		||||
    <symbol label="j">j</symbol>
 | 
			
		||||
    <symbol label="J">J</symbol>
 | 
			
		||||
    <symbol label="+">plus</symbol>
 | 
			
		||||
    <symbol label="=">equal</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AC08">
 | 
			
		||||
    <symbol label="k">k</symbol>
 | 
			
		||||
    <symbol label="K">K</symbol>
 | 
			
		||||
    <symbol label="ü">U00FC</symbol>
 | 
			
		||||
    <symbol label="^">asciicircum</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AC09">
 | 
			
		||||
    <symbol label="l">l</symbol>
 | 
			
		||||
    <symbol label="L">L</symbol>
 | 
			
		||||
    <symbol label="ö">U00F6</symbol>
 | 
			
		||||
    <symbol label="°">degree</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AC10">
 | 
			
		||||
    <symbol keyval="248" label="ø">oslash</symbol>
 | 
			
		||||
    <symbol keyval="216" label="Ø">Oslash</symbol>
 | 
			
		||||
    <symbol label="(">parenleft</symbol>
 | 
			
		||||
    <symbol label="{">braceleft</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AC11">
 | 
			
		||||
    <symbol keyval="230" label="æ">ae</symbol>
 | 
			
		||||
    <symbol keyval="198" label="Æ">AE</symbol>
 | 
			
		||||
    <symbol label=")">parenright</symbol>
 | 
			
		||||
    <symbol label="}">braceright</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="RTRN">
 | 
			
		||||
    <symbol keyval="65293" icon="key-enter">Return</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="LFSH">
 | 
			
		||||
    <keysym keyval="65505" icon="key-shift">Shift_L</keysym>
 | 
			
		||||
    <keysym keyval="65505" icon="key-shift">Shift_L</keysym>
 | 
			
		||||
    <keysym keyval="65505" label="=/+">Shift_L</keysym>
 | 
			
		||||
    <keysym keyval="65505" label="123">Shift_L</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AB01">
 | 
			
		||||
    <symbol label="z">z</symbol>
 | 
			
		||||
    <symbol label="Z">Z</symbol>
 | 
			
		||||
    <symbol label=",">comma</symbol>
 | 
			
		||||
    <symbol label="\">backslash</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AB02">
 | 
			
		||||
    <symbol label="x">x</symbol>
 | 
			
		||||
    <symbol label="X">X</symbol>
 | 
			
		||||
    <symbol label=""">quotedbl</symbol>
 | 
			
		||||
    <symbol label="/">slash</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AB03">
 | 
			
		||||
    <symbol label="c">c</symbol>
 | 
			
		||||
    <symbol label="C">C</symbol>
 | 
			
		||||
    <symbol label="'">quoteright</symbol>
 | 
			
		||||
    <symbol label="<">less</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AB04">
 | 
			
		||||
    <symbol label="v">v</symbol>
 | 
			
		||||
    <symbol label="V">V</symbol>
 | 
			
		||||
    <symbol label=":">colon</symbol>
 | 
			
		||||
    <symbol label=">">greater</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AB05">
 | 
			
		||||
    <symbol label="b">b</symbol>
 | 
			
		||||
    <symbol label="B">B</symbol>
 | 
			
		||||
    <symbol label=";">semicolon</symbol>
 | 
			
		||||
    <symbol label="=">equal</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AB06">
 | 
			
		||||
    <symbol label="n">n</symbol>
 | 
			
		||||
    <symbol label="N">N</symbol>
 | 
			
		||||
    <symbol label="!">exclam</symbol>
 | 
			
		||||
    <symbol label="[">bracketleft</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AB07">
 | 
			
		||||
    <symbol label="m">m</symbol>
 | 
			
		||||
    <symbol label="M">M</symbol>
 | 
			
		||||
    <symbol label="?">question</symbol>
 | 
			
		||||
    <symbol label="]">bracketright</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="AB08">
 | 
			
		||||
    <symbol label=".">period</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="ABC123">
 | 
			
		||||
    <symbol label="123">show-numbers</symbol>
 | 
			
		||||
    <symbol label="123">show-numbers</symbol>
 | 
			
		||||
    <symbol label="ABC">show-letters</symbol>
 | 
			
		||||
    <symbol label="ABC">show-letters</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="I149">
 | 
			
		||||
    <symbol icon="keyboard-mode-symbolic" tooltip="Setup">preferences</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="SPCE">
 | 
			
		||||
    <symbol label=" ">space</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key name="BKSP">
 | 
			
		||||
    <symbol keyval="65288" icon="edit-clear-symbolic">BackSpace</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
@ -1,276 +1,186 @@
 | 
			
		||||
<?xml version="1.0"?>
 | 
			
		||||
<?xml version='1.0' encoding='ASCII' standalone='yes'?>
 | 
			
		||||
<symbols version="0.90">
 | 
			
		||||
  <key keycode="9" name="ESC">
 | 
			
		||||
    <keysym keyval="65307">Escape</keysym>
 | 
			
		||||
  <key name="AD01">
 | 
			
		||||
    <symbol label="q">q</symbol>
 | 
			
		||||
    <symbol label="Q">Q</symbol>
 | 
			
		||||
    <symbol label="1">1</symbol>
 | 
			
		||||
    <symbol label="~">asciitilde</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="67" name="FK01">
 | 
			
		||||
    <keysym keyval="65470">F1</keysym>
 | 
			
		||||
  <key name="AD02">
 | 
			
		||||
    <symbol label="w">w</symbol>
 | 
			
		||||
    <symbol label="W">W</symbol>
 | 
			
		||||
    <symbol label="2">2</symbol>
 | 
			
		||||
    <symbol label="`">quoteleft</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="68" name="FK02">
 | 
			
		||||
    <keysym keyval="65471">F2</keysym>
 | 
			
		||||
  <key name="AD03">
 | 
			
		||||
    <symbol label="e">e</symbol>
 | 
			
		||||
    <symbol label="E">E</symbol>
 | 
			
		||||
    <symbol label="3">3</symbol>
 | 
			
		||||
    <symbol label="|">bar</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="69" name="FK03">
 | 
			
		||||
    <keysym keyval="65472">F3</keysym>
 | 
			
		||||
  <key name="AD04">
 | 
			
		||||
    <symbol label="r">r</symbol>
 | 
			
		||||
    <symbol label="R">R</symbol>
 | 
			
		||||
    <symbol label="4">4</symbol>
 | 
			
		||||
    <symbol label="·">U00B7</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="70" name="FK04">
 | 
			
		||||
    <keysym keyval="65473">F4</keysym>
 | 
			
		||||
  <key name="AD05">
 | 
			
		||||
    <symbol label="t">t</symbol>
 | 
			
		||||
    <symbol label="T">T</symbol>
 | 
			
		||||
    <symbol label="5">5</symbol>
 | 
			
		||||
    <symbol label="√">squareroot</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="71" name="FK05">
 | 
			
		||||
    <keysym keyval="65474">F5</keysym>
 | 
			
		||||
  <key name="AD06">
 | 
			
		||||
    <symbol label="y">y</symbol>
 | 
			
		||||
    <symbol label="Y">Y</symbol>
 | 
			
		||||
    <symbol label="6">6</symbol>
 | 
			
		||||
    <symbol label="π">Greek_pi</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="72" name="FK06">
 | 
			
		||||
    <keysym keyval="65475">F6</keysym>
 | 
			
		||||
  <key name="AD07">
 | 
			
		||||
    <symbol label="u">u</symbol>
 | 
			
		||||
    <symbol label="U">U</symbol>
 | 
			
		||||
    <symbol label="7">7</symbol>
 | 
			
		||||
    <symbol label="÷">division</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="73" name="FK07">
 | 
			
		||||
    <keysym keyval="65476">F7</keysym>
 | 
			
		||||
  <key name="AD08">
 | 
			
		||||
    <symbol label="i">i</symbol>
 | 
			
		||||
    <symbol label="I">I</symbol>
 | 
			
		||||
    <symbol label="8">8</symbol>
 | 
			
		||||
    <symbol label="×">multiply</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="74" name="FK08">
 | 
			
		||||
    <keysym keyval="65477">F8</keysym>
 | 
			
		||||
  <key name="AD09">
 | 
			
		||||
    <symbol label="o">o</symbol>
 | 
			
		||||
    <symbol label="O">O</symbol>
 | 
			
		||||
    <symbol label="9">9</symbol>
 | 
			
		||||
    <symbol label="¶">paragraph</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="75" name="FK09">
 | 
			
		||||
    <keysym keyval="65478">F9</keysym>
 | 
			
		||||
  <key name="AD10">
 | 
			
		||||
    <symbol label="p">p</symbol>
 | 
			
		||||
    <symbol label="P">P</symbol>
 | 
			
		||||
    <symbol label="0">0</symbol>
 | 
			
		||||
    <symbol label="△">U25B3</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="76" name="FK10">
 | 
			
		||||
    <keysym keyval="65479">F10</keysym>
 | 
			
		||||
  <key name="AC01">
 | 
			
		||||
    <symbol label="a">a</symbol>
 | 
			
		||||
    <symbol label="A">A</symbol>
 | 
			
		||||
    <symbol label="@">at</symbol>
 | 
			
		||||
    <symbol label="©">copyright</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="95" name="FK11">
 | 
			
		||||
    <keysym keyval="65480">F11</keysym>
 | 
			
		||||
  <key name="AC02">
 | 
			
		||||
    <symbol label="s">s</symbol>
 | 
			
		||||
    <symbol label="S">S</symbol>
 | 
			
		||||
    <symbol label="#">numbersign</symbol>
 | 
			
		||||
    <symbol label="®">U00AE</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="96" name="FK12">
 | 
			
		||||
    <keysym keyval="65481">F12</keysym>
 | 
			
		||||
  <key name="AC03">
 | 
			
		||||
    <symbol label="d">d</symbol>
 | 
			
		||||
    <symbol label="D">D</symbol>
 | 
			
		||||
    <symbol label="$">dollar</symbol>
 | 
			
		||||
    <symbol label="£">U00A3</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="22" name="BKSP">
 | 
			
		||||
    <keysym keyval="65288" icon="edit-clear-symbolic">backspace</keysym>
 | 
			
		||||
  <key name="AC04">
 | 
			
		||||
    <symbol label="f">f</symbol>
 | 
			
		||||
    <symbol label="F">F</symbol>
 | 
			
		||||
    <symbol label="%">percent</symbol>
 | 
			
		||||
    <symbol label="€">EuroSign</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="23" name="TAB">
 | 
			
		||||
    <keysym keyval="65289">Tab</keysym>
 | 
			
		||||
    <keysym keyval="65056">ISO_Left_Tab</keysym>
 | 
			
		||||
  <key name="AC05">
 | 
			
		||||
    <symbol label="g">g</symbol>
 | 
			
		||||
    <symbol label="G">G</symbol>
 | 
			
		||||
    <symbol label="&">ampersand</symbol>
 | 
			
		||||
    <symbol label="¥">U00A5</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="24" name="AD01">
 | 
			
		||||
    <keysym keyval="113">q</keysym>
 | 
			
		||||
    <keysym keyval="81">Q</keysym>
 | 
			
		||||
    <keysym keyval="49">1</keysym>
 | 
			
		||||
    <keysym keyval="126">asciitilde</keysym>
 | 
			
		||||
  <key name="AC06">
 | 
			
		||||
    <symbol label="h">h</symbol>
 | 
			
		||||
    <symbol label="H">H</symbol>
 | 
			
		||||
    <symbol label="-">minus</symbol>
 | 
			
		||||
    <symbol label="_">underscore</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="25" name="AD02">
 | 
			
		||||
    <keysym keyval="119">w</keysym>
 | 
			
		||||
    <keysym keyval="87">W</keysym>
 | 
			
		||||
    <keysym keyval="50">2</keysym>
 | 
			
		||||
    <keysym keyval="96">quoteleft</keysym>
 | 
			
		||||
  <key name="AC07">
 | 
			
		||||
    <symbol label="j">j</symbol>
 | 
			
		||||
    <symbol label="J">J</symbol>
 | 
			
		||||
    <symbol label="+">plus</symbol>
 | 
			
		||||
    <symbol label="=">equal</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="26" name="AD03">
 | 
			
		||||
    <keysym keyval="101">e</keysym>
 | 
			
		||||
    <keysym keyval="69">E</keysym>
 | 
			
		||||
    <keysym keyval="51">3</keysym>
 | 
			
		||||
    <keysym keyval="124">bar</keysym>
 | 
			
		||||
  <key name="AC08">
 | 
			
		||||
    <symbol label="k">k</symbol>
 | 
			
		||||
    <symbol label="K">K</symbol>
 | 
			
		||||
    <symbol label="(">parenleft</symbol>
 | 
			
		||||
    <symbol label="{">braceleft</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="27" name="AD04">
 | 
			
		||||
    <keysym keyval="114">r</keysym>
 | 
			
		||||
    <keysym keyval="82">R</keysym>
 | 
			
		||||
    <keysym keyval="52">4</keysym>
 | 
			
		||||
    <keysym keyval="183">middledot</keysym>
 | 
			
		||||
  <key name="AC09">
 | 
			
		||||
    <symbol label="l">l</symbol>
 | 
			
		||||
    <symbol label="L">L</symbol>
 | 
			
		||||
    <symbol label=")">parenright</symbol>
 | 
			
		||||
    <symbol label="}">braceright</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="28" name="AD05">
 | 
			
		||||
    <keysym keyval="116">t</keysym>
 | 
			
		||||
    <keysym keyval="84">T</keysym>
 | 
			
		||||
    <keysym keyval="53">5</keysym>
 | 
			
		||||
  <key name="RTRN">
 | 
			
		||||
    <symbol keyval="65293" icon="key-enter">Return</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="29" name="AD06">
 | 
			
		||||
    <keysym keyval="121">y</keysym>
 | 
			
		||||
    <keysym keyval="89">Y</keysym>
 | 
			
		||||
    <keysym keyval="54">6</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="30" name="AD07">
 | 
			
		||||
    <keysym keyval="117">u</keysym>
 | 
			
		||||
    <keysym keyval="85">U</keysym>
 | 
			
		||||
    <keysym keyval="55">7</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="31" name="AD08">
 | 
			
		||||
    <keysym keyval="105">i</keysym>
 | 
			
		||||
    <keysym keyval="73">I</keysym>
 | 
			
		||||
    <keysym keyval="56">8</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="32" name="AD09">
 | 
			
		||||
    <keysym keyval="111">o</keysym>
 | 
			
		||||
    <keysym keyval="79">O</keysym>
 | 
			
		||||
    <keysym keyval="57">9</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="33" name="AD10">
 | 
			
		||||
    <keysym keyval="112">p</keysym>
 | 
			
		||||
    <keysym keyval="80">P</keysym>
 | 
			
		||||
    <keysym keyval="48">0</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="34" name="AD11">
 | 
			
		||||
    <keysym keyval="91">bracketleft</keysym>
 | 
			
		||||
    <keysym keyval="123">braceleft</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="35" name="AD12">
 | 
			
		||||
    <keysym keyval="93">bracketright</keysym>
 | 
			
		||||
    <keysym keyval="125">braceright</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="51" name="BKSL">
 | 
			
		||||
    <keysym keyval="92">backslash</keysym>
 | 
			
		||||
    <keysym keyval="124">bar</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="0" name="ABC123">
 | 
			
		||||
    <symbol label="123">show-numbers</symbol>
 | 
			
		||||
    <symbol label="123">show-numbers</symbol>
 | 
			
		||||
    <symbol label="ABC">show-letters</symbol>
 | 
			
		||||
    <symbol label="ABC">show-letters</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="38" name="AC01">
 | 
			
		||||
    <keysym keyval="97">a</keysym>
 | 
			
		||||
    <keysym keyval="65">A</keysym>
 | 
			
		||||
    <keysym keyval="64">at</keysym>
 | 
			
		||||
    <keysym keyval="169">copyright</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="39" name="AC02">
 | 
			
		||||
    <keysym keyval="115">s</keysym>
 | 
			
		||||
    <keysym keyval="83">S</keysym>
 | 
			
		||||
    <keysym keyval="35">numbersign</keysym>
 | 
			
		||||
    <keysym keyval="174">registeredtrademark</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="40" name="AC03">
 | 
			
		||||
    <keysym keyval="100">d</keysym>
 | 
			
		||||
    <keysym keyval="68">D</keysym>
 | 
			
		||||
    <keysym keyval="36">dollar</keysym>
 | 
			
		||||
    <keysym keyval="163">poundsign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="41" name="AC04">
 | 
			
		||||
    <keysym keyval="102">f</keysym>
 | 
			
		||||
    <keysym keyval="70">F</keysym>
 | 
			
		||||
    <keysym keyval="37">percent</keysym>
 | 
			
		||||
    <text>€</text>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="42" name="AC05">
 | 
			
		||||
    <keysym keyval="103">g</keysym>
 | 
			
		||||
    <keysym keyval="71">G</keysym>
 | 
			
		||||
    <keysym keyval="38">ampersand</keysym>
 | 
			
		||||
    <keysym keyval="165">yensign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="43" name="AC06">
 | 
			
		||||
    <keysym keyval="104">h</keysym>
 | 
			
		||||
    <keysym keyval="72">H</keysym>
 | 
			
		||||
    <keysym keyval="45">minus</keysym>
 | 
			
		||||
    <keysym keyval="94">asciicircum</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="44" name="AC07">
 | 
			
		||||
    <keysym keyval="106">j</keysym>
 | 
			
		||||
    <keysym keyval="74">J</keysym>
 | 
			
		||||
    <keysym keyval="43">plus</keysym>
 | 
			
		||||
    <keysym keyval="176">degreesign</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="45" name="AC08">
 | 
			
		||||
    <keysym keyval="107">k</keysym>
 | 
			
		||||
    <keysym keyval="75">K</keysym>
 | 
			
		||||
    <keysym keyval="40">parenleft</keysym>
 | 
			
		||||
    <keysym keyval="123">braceleft</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="46" name="AC09">
 | 
			
		||||
    <keysym keyval="108">l</keysym>
 | 
			
		||||
    <keysym keyval="76">L</keysym>
 | 
			
		||||
    <keysym keyval="41">parenright</keysym>
 | 
			
		||||
    <keysym keyval="125">braceright</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="47" name="AC10">
 | 
			
		||||
    <keysym keyval="59">semicolon</keysym>
 | 
			
		||||
    <keysym keyval="58">colon</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="48" name="AC11">
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <keysym keyval="34">quotedbl</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="36" name="RTRN">
 | 
			
		||||
    <keysym keyval="65293" icon="key-enter">Return</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="50" name="LFSH">
 | 
			
		||||
  <key name="LFSH">
 | 
			
		||||
    <keysym keyval="65505" icon="key-shift">Shift_L</keysym>
 | 
			
		||||
    <keysym keyval="65505" icon="key-shift">Shift_L</keysym>
 | 
			
		||||
    <keysym keyval="65505" label="=/+">Shift_L</keysym>
 | 
			
		||||
    <keysym keyval="65505" label="123">Shift_L</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="52" name="AB01">
 | 
			
		||||
    <keysym keyval="122">z</keysym>
 | 
			
		||||
    <keysym keyval="90">Z</keysym>
 | 
			
		||||
    <keysym keyval="44">comma</keysym>
 | 
			
		||||
    <keysym keyval="92">backslash</keysym>
 | 
			
		||||
  <key name="AB01">
 | 
			
		||||
    <symbol label="z">z</symbol>
 | 
			
		||||
    <symbol label="Z">Z</symbol>
 | 
			
		||||
    <symbol label=",">comma</symbol>
 | 
			
		||||
    <symbol label="\">backslash</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="53" name="AB02">
 | 
			
		||||
    <keysym keyval="120">x</keysym>
 | 
			
		||||
    <keysym keyval="88">X</keysym>
 | 
			
		||||
    <keysym keyval="34">quotedbl</keysym>
 | 
			
		||||
    <keysym keyval="47">slash</keysym>
 | 
			
		||||
  <key name="AB02">
 | 
			
		||||
    <symbol label="x">x</symbol>
 | 
			
		||||
    <symbol label="X">X</symbol>
 | 
			
		||||
    <symbol label=""">quotedbl</symbol>
 | 
			
		||||
    <symbol label="/">slash</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="54" name="AB03">
 | 
			
		||||
    <keysym keyval="99">c</keysym>
 | 
			
		||||
    <keysym keyval="67">C</keysym>
 | 
			
		||||
    <keysym keyval="39">quoteright</keysym>
 | 
			
		||||
    <keysym keyval="60">less</keysym>
 | 
			
		||||
  <key name="AB03">
 | 
			
		||||
    <symbol label="c">c</symbol>
 | 
			
		||||
    <symbol label="C">C</symbol>
 | 
			
		||||
    <symbol label="'">quoteright</symbol>
 | 
			
		||||
    <symbol label="<">less</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="55" name="AB04">
 | 
			
		||||
    <keysym keyval="118">v</keysym>
 | 
			
		||||
    <keysym keyval="86">V</keysym>
 | 
			
		||||
    <keysym keyval="58">colon</keysym>
 | 
			
		||||
    <keysym keyval="62">greater</keysym>
 | 
			
		||||
  <key name="AB04">
 | 
			
		||||
    <symbol label="v">v</symbol>
 | 
			
		||||
    <symbol label="V">V</symbol>
 | 
			
		||||
    <symbol label=":">colon</symbol>
 | 
			
		||||
    <symbol label=">">greater</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="56" name="AB05">
 | 
			
		||||
    <keysym keyval="98">b</keysym>
 | 
			
		||||
    <keysym keyval="66">B</keysym>
 | 
			
		||||
    <keysym keyval="59">semicolon</keysym>
 | 
			
		||||
    <keysym keyval="61">equal</keysym>
 | 
			
		||||
  <key name="AB05">
 | 
			
		||||
    <symbol label="b">b</symbol>
 | 
			
		||||
    <symbol label="B">B</symbol>
 | 
			
		||||
    <symbol label=";">semicolon</symbol>
 | 
			
		||||
    <symbol label="=">equal</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="57" name="AB06">
 | 
			
		||||
    <keysym keyval="110">n</keysym>
 | 
			
		||||
    <keysym keyval="78">N</keysym>
 | 
			
		||||
    <keysym keyval="33">exclam</keysym>
 | 
			
		||||
    <keysym keyval="91">bracketleft</keysym>
 | 
			
		||||
  <key name="AB06">
 | 
			
		||||
    <symbol label="n">n</symbol>
 | 
			
		||||
    <symbol label="N">N</symbol>
 | 
			
		||||
    <symbol label="!">exclam</symbol>
 | 
			
		||||
    <symbol label="[">bracketleft</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="58" name="AB07">
 | 
			
		||||
    <keysym keyval="109">m</keysym>
 | 
			
		||||
    <keysym keyval="77">M</keysym>
 | 
			
		||||
    <keysym keyval="63">question</keysym>
 | 
			
		||||
    <keysym keyval="93">bracketright</keysym>
 | 
			
		||||
  <key name="AB07">
 | 
			
		||||
    <symbol label="m">m</symbol>
 | 
			
		||||
    <symbol label="M">M</symbol>
 | 
			
		||||
    <symbol label="?">question</symbol>
 | 
			
		||||
    <symbol label="]">bracketright</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="59" name="AB08">
 | 
			
		||||
    <keysym keyval="44">comma</keysym>
 | 
			
		||||
    <keysym keyval="60">less</keysym>
 | 
			
		||||
  <key name="AB08">
 | 
			
		||||
    <symbol label=".">period</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="60" name="AB09">
 | 
			
		||||
    <keysym keyval="46">period</keysym>
 | 
			
		||||
  <key name="ABC123">
 | 
			
		||||
    <symbol label="123">show-numbers</symbol>
 | 
			
		||||
    <symbol label="123">show-numbers</symbol>
 | 
			
		||||
    <symbol label="ABC">show-letters</symbol>
 | 
			
		||||
    <symbol label="ABC">show-letters</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="61" name="AB10">
 | 
			
		||||
    <keysym keyval="47">slash</keysym>
 | 
			
		||||
    <keysym keyval="63">question</keysym>
 | 
			
		||||
  <key name="I149">
 | 
			
		||||
    <symbol label="☺" icon="keyboard-mode-symbolic" tooltip="Setup">preferences</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="62" name="RTSH">
 | 
			
		||||
    <keysym keyval="65506">Shift_R</keysym>
 | 
			
		||||
  <key name="SPCE">
 | 
			
		||||
    <symbol label=" ">space</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="149" name="I149">
 | 
			
		||||
    <symbol label="⌨" icon="input-keyboard-symbolic" tooltip="Change keyboard">cycle-keyboard</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="150" name="I150">
 | 
			
		||||
    <symbol label="☺" icon="keyboard-mode-symbolic" tooltip="Setup">preferences</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="37" name="LCTL">
 | 
			
		||||
    <keysym keyval="65507">Control_L</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="64" name="LALT">
 | 
			
		||||
    <keysym keyval="65513">Alt_L</keysym>
 | 
			
		||||
    <keysym keyval="65511">Meta_L</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="65" name="SPCE">
 | 
			
		||||
    <keysym keyval="32">space</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="113" name="LEFT">
 | 
			
		||||
    <keysym keyval="65361">Left</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="111" name="UP">
 | 
			
		||||
    <keysym keyval="65362">Up</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="116" name="DOWN">
 | 
			
		||||
    <keysym keyval="65364">Down</keysym>
 | 
			
		||||
  </key>
 | 
			
		||||
  <key keycode="114" name="RGHT">
 | 
			
		||||
    <keysym keyval="65363">Right</keysym>
 | 
			
		||||
  <key name="BKSP">
 | 
			
		||||
    <symbol keyval="65288" icon="edit-clear-symbolic">backspace</symbol>
 | 
			
		||||
  </key>
 | 
			
		||||
</symbols>
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,10 @@
 | 
			
		||||
  <gresource prefix="/sm/puri/squeekboard">
 | 
			
		||||
   <file compressed="true">style.css</file>
 | 
			
		||||
   <file compressed="true" preprocess="xml-stripblanks">keyboards/geometry/compact.xml</file>
 | 
			
		||||
   <file compressed="true" preprocess="xml-stripblanks">keyboards/geometry/extended.xml</file>
 | 
			
		||||
   <file compressed="true" preprocess="xml-stripblanks">keyboards/keyboards.xml</file>
 | 
			
		||||
   <file compressed="true">keyboards/keymaps/nb.xkb</file>
 | 
			
		||||
   <file compressed="true">keyboards/keymaps/us.xkb</file>
 | 
			
		||||
   <file compressed="true" preprocess="xml-stripblanks">keyboards/symbols/ar.xml</file>
 | 
			
		||||
   <file compressed="true" preprocess="xml-stripblanks">keyboards/symbols/as-inscript.xml</file>
 | 
			
		||||
   <file compressed="true" preprocess="xml-stripblanks">keyboards/symbols/be.xml</file>
 | 
			
		||||
@ -21,6 +24,7 @@
 | 
			
		||||
   <file compressed="true" preprocess="xml-stripblanks">keyboards/symbols/ml-inscript.xml</file>
 | 
			
		||||
   <file compressed="true" preprocess="xml-stripblanks">keyboards/symbols/mr-inscript.xml</file>
 | 
			
		||||
   <file compressed="true" preprocess="xml-stripblanks">keyboards/symbols/my.xml</file>
 | 
			
		||||
   <file compressed="true" preprocess="xml-stripblanks">keyboards/symbols/nb.xml</file>
 | 
			
		||||
   <file compressed="true" preprocess="xml-stripblanks">keyboards/symbols/or-inscript.xml</file>
 | 
			
		||||
   <file compressed="true" preprocess="xml-stripblanks">keyboards/symbols/pa-inscript.xml</file>
 | 
			
		||||
   <file compressed="true" preprocess="xml-stripblanks">keyboards/symbols/ru.xml</file>
 | 
			
		||||
 | 
			
		||||
@ -72,7 +72,7 @@ struct _EekKeyboardPrivate
 | 
			
		||||
    GList *pressed_keys;
 | 
			
		||||
    GList *locked_keys;
 | 
			
		||||
    GArray *outline_array;
 | 
			
		||||
    GHashTable *keycodes;
 | 
			
		||||
    GHashTable *names;
 | 
			
		||||
 | 
			
		||||
    /* modifiers dynamically assigned at run time */
 | 
			
		||||
    EekModifierType num_lock_mask;
 | 
			
		||||
@ -127,9 +127,9 @@ section_child_added_cb (EekContainer *container,
 | 
			
		||||
                        EekElement   *element,
 | 
			
		||||
                        EekKeyboard  *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    guint keycode = eek_key_get_keycode (EEK_KEY(element));
 | 
			
		||||
    g_hash_table_insert (keyboard->priv->keycodes,
 | 
			
		||||
                         GUINT_TO_POINTER(keycode),
 | 
			
		||||
    const gchar *name = eek_element_get_name(element);
 | 
			
		||||
    g_hash_table_insert (keyboard->priv->names,
 | 
			
		||||
                         (gpointer)name,
 | 
			
		||||
                         element);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -138,9 +138,9 @@ section_child_removed_cb (EekContainer *container,
 | 
			
		||||
                          EekElement   *element,
 | 
			
		||||
                          EekKeyboard  *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    guint keycode = eek_key_get_keycode (EEK_KEY(element));
 | 
			
		||||
    g_hash_table_remove (keyboard->priv->keycodes,
 | 
			
		||||
                         GUINT_TO_POINTER(keycode));
 | 
			
		||||
    const gchar *name = eek_element_get_name(element);
 | 
			
		||||
    g_hash_table_remove (keyboard->priv->names,
 | 
			
		||||
                         name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static EekSection *
 | 
			
		||||
@ -219,7 +219,7 @@ set_level_from_modifiers (EekKeyboard *self, EekKey *key)
 | 
			
		||||
    gint level = priv->old_level & 2;
 | 
			
		||||
 | 
			
		||||
    /* Handle non-emitting keys */
 | 
			
		||||
    if (key && (eek_key_get_keycode(key) == 0)) {
 | 
			
		||||
    if (key) {
 | 
			
		||||
        const gchar *name = eek_element_get_name(EEK_ELEMENT(key));
 | 
			
		||||
        if (g_strcmp0(name, "ABC123") == 0)
 | 
			
		||||
            level ^= 2;
 | 
			
		||||
@ -400,7 +400,7 @@ eek_keyboard_finalize (GObject *object)
 | 
			
		||||
    g_list_free_full (priv->locked_keys,
 | 
			
		||||
                      (GDestroyNotify) eek_modifier_key_free);
 | 
			
		||||
 | 
			
		||||
    g_hash_table_destroy (priv->keycodes);
 | 
			
		||||
    g_hash_table_destroy (priv->names);
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < priv->outline_array->len; i++) {
 | 
			
		||||
        EekOutline *outline = &g_array_index (priv->outline_array,
 | 
			
		||||
@ -528,7 +528,7 @@ eek_keyboard_init (EekKeyboard *self)
 | 
			
		||||
    self->priv = EEK_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    self->priv->modifier_behavior = EEK_MODIFIER_BEHAVIOR_NONE;
 | 
			
		||||
    self->priv->outline_array = g_array_new (FALSE, TRUE, sizeof (EekOutline));
 | 
			
		||||
    self->priv->keycodes = g_hash_table_new (g_direct_hash, g_direct_equal);
 | 
			
		||||
    self->priv->names = g_hash_table_new (g_str_hash, g_str_equal);
 | 
			
		||||
    eek_element_set_symbol_index (EEK_ELEMENT(self), 0, 0);
 | 
			
		||||
    self->scale = 1.0;
 | 
			
		||||
}
 | 
			
		||||
@ -549,20 +549,20 @@ eek_keyboard_create_section (EekKeyboard *keyboard)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * eek_keyboard_find_key_by_keycode:
 | 
			
		||||
 * eek_keyboard_find_key_by_name:
 | 
			
		||||
 * @keyboard: an #EekKeyboard
 | 
			
		||||
 * @keycode: a keycode
 | 
			
		||||
 * @name: a key name
 | 
			
		||||
 *
 | 
			
		||||
 * Find an #EekKey whose keycode is @keycode.
 | 
			
		||||
 * Return value: (transfer none): #EekKey whose keycode is @keycode
 | 
			
		||||
 * Find an #EekKey whose name is @name.
 | 
			
		||||
 * Return value: (transfer none): #EekKey whose name is @name
 | 
			
		||||
 */
 | 
			
		||||
EekKey *
 | 
			
		||||
eek_keyboard_find_key_by_keycode (EekKeyboard *keyboard,
 | 
			
		||||
                                  guint        keycode)
 | 
			
		||||
eek_keyboard_find_key_by_name (EekKeyboard *keyboard,
 | 
			
		||||
                               const gchar *name)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_KEYBOARD(keyboard), NULL);
 | 
			
		||||
    return g_hash_table_lookup (keyboard->priv->keycodes,
 | 
			
		||||
                                GUINT_TO_POINTER(keycode));
 | 
			
		||||
    return g_hash_table_lookup (keyboard->priv->names,
 | 
			
		||||
                                name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 | 
			
		||||
@ -70,8 +70,8 @@ struct _EekKeyboard
 | 
			
		||||
/**
 | 
			
		||||
 * EekKeyboardClass:
 | 
			
		||||
 * @create_section: virtual function for creating a section
 | 
			
		||||
 * @find_key_by_keycode: virtual function for finding a key in the
 | 
			
		||||
 * keyboard by keycode
 | 
			
		||||
 * @find_key_by_name: virtual function for finding a key in the
 | 
			
		||||
 * keyboard by name
 | 
			
		||||
 * @key_pressed: class handler for #EekKeyboard::key-pressed signal
 | 
			
		||||
 * @key_released: class handler for #EekKeyboard::key-released signal
 | 
			
		||||
 * @key_locked: class handler for #EekKeyboard::key-locked signal
 | 
			
		||||
@ -90,8 +90,8 @@ struct _EekKeyboardClass
 | 
			
		||||
    /*< public >*/
 | 
			
		||||
    EekSection *(* create_section)      (EekKeyboard *self);
 | 
			
		||||
 | 
			
		||||
    EekKey     *(* find_key_by_keycode) (EekKeyboard *self,
 | 
			
		||||
                                         guint        keycode);
 | 
			
		||||
    EekKey     *(* find_key_by_name)    (EekKeyboard *self,
 | 
			
		||||
                                         const gchar *name);
 | 
			
		||||
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    /* obsolete members moved to EekElement */
 | 
			
		||||
@ -156,9 +156,9 @@ EekModifierType     eek_keyboard_get_modifiers
 | 
			
		||||
EekSection         *eek_keyboard_create_section
 | 
			
		||||
                                     (EekKeyboard        *keyboard);
 | 
			
		||||
 | 
			
		||||
EekKey             *eek_keyboard_find_key_by_keycode
 | 
			
		||||
EekKey             *eek_keyboard_find_key_by_name
 | 
			
		||||
                                     (EekKeyboard        *keyboard,
 | 
			
		||||
                                      guint               keycode);
 | 
			
		||||
                                      const gchar        *name);
 | 
			
		||||
 | 
			
		||||
guint               eek_keyboard_add_outline
 | 
			
		||||
                                     (EekKeyboard        *keyboard,
 | 
			
		||||
 | 
			
		||||
@ -122,7 +122,8 @@ on_unlocked (EekKey     *key,
 | 
			
		||||
 | 
			
		||||
static EekKey *
 | 
			
		||||
eek_section_real_create_key (EekSection *self,
 | 
			
		||||
                             guint       keycode,
 | 
			
		||||
                             const gchar *name,
 | 
			
		||||
                             gint        keycode,
 | 
			
		||||
                             gint        column_index,
 | 
			
		||||
                             gint        row_index)
 | 
			
		||||
{
 | 
			
		||||
@ -140,6 +141,7 @@ eek_section_real_create_key (EekSection *self,
 | 
			
		||||
        row->num_columns = column_index + 1;
 | 
			
		||||
 | 
			
		||||
    key = g_object_new (EEK_TYPE_KEY,
 | 
			
		||||
                        "name", name,
 | 
			
		||||
                        "keycode", keycode,
 | 
			
		||||
                        "column", column_index,
 | 
			
		||||
                        "row", row_index,
 | 
			
		||||
@ -461,6 +463,7 @@ eek_section_get_row (EekSection     *section,
 | 
			
		||||
/**
 | 
			
		||||
 * eek_section_create_key:
 | 
			
		||||
 * @section: an #EekSection
 | 
			
		||||
 * @name: a name
 | 
			
		||||
 * @keycode: a keycode
 | 
			
		||||
 * @column: the column index of the key
 | 
			
		||||
 * @row: the row index of the key
 | 
			
		||||
@ -471,12 +474,14 @@ eek_section_get_row (EekSection     *section,
 | 
			
		||||
 */
 | 
			
		||||
EekKey *
 | 
			
		||||
eek_section_create_key (EekSection *section,
 | 
			
		||||
                        guint       keycode,
 | 
			
		||||
                        const gchar *name,
 | 
			
		||||
                        gint        keycode,
 | 
			
		||||
                        gint        column,
 | 
			
		||||
                        gint        row)
 | 
			
		||||
{
 | 
			
		||||
    g_return_val_if_fail (EEK_IS_SECTION(section), NULL);
 | 
			
		||||
    return EEK_SECTION_GET_CLASS(section)->create_key (section,
 | 
			
		||||
                                                       name,
 | 
			
		||||
                                                       keycode,
 | 
			
		||||
                                                       column,
 | 
			
		||||
                                                       row);
 | 
			
		||||
 | 
			
		||||
@ -62,7 +62,8 @@ struct _EekSectionClass
 | 
			
		||||
                                     EekOrientation *orientation);
 | 
			
		||||
 | 
			
		||||
    EekKey *(* create_key)          (EekSection     *self,
 | 
			
		||||
                                     guint           keycode,
 | 
			
		||||
                                     const gchar    *name,
 | 
			
		||||
                                     gint            keycode,
 | 
			
		||||
                                     gint            row,
 | 
			
		||||
                                     gint            column);
 | 
			
		||||
 | 
			
		||||
@ -99,7 +100,8 @@ void    eek_section_get_row              (EekSection     *section,
 | 
			
		||||
                                          EekOrientation *orientation);
 | 
			
		||||
 | 
			
		||||
EekKey *eek_section_create_key           (EekSection     *section,
 | 
			
		||||
                                          guint           keycode,
 | 
			
		||||
                                          const gchar    *name,
 | 
			
		||||
                                          gint            keycode,
 | 
			
		||||
                                          gint            column,
 | 
			
		||||
                                          gint            row);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -405,17 +405,23 @@ geometry_start_element_callback (GMarkupParseContext *pcontext,
 | 
			
		||||
                         "no \"keycode\" attribute for \"key\"");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        keycode = strtoul (attribute, NULL, 10);
 | 
			
		||||
 | 
			
		||||
        data->key = eek_section_create_key (data->section,
 | 
			
		||||
                                            keycode,
 | 
			
		||||
                                            data->num_columns,
 | 
			
		||||
                                            data->num_rows - 1);
 | 
			
		||||
        keycode = strtol (attribute, NULL, 10);
 | 
			
		||||
 | 
			
		||||
        attribute = get_attribute (attribute_names, attribute_values,
 | 
			
		||||
                                   "name");
 | 
			
		||||
        if (attribute != NULL)
 | 
			
		||||
            eek_element_set_name (EEK_ELEMENT(data->key), attribute);
 | 
			
		||||
        if (attribute == NULL) {
 | 
			
		||||
            g_set_error (error,
 | 
			
		||||
                         G_MARKUP_ERROR,
 | 
			
		||||
                         G_MARKUP_ERROR_MISSING_ATTRIBUTE,
 | 
			
		||||
                         "no \"name\" attribute for \"key\"");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        data->key = eek_section_create_key (data->section,
 | 
			
		||||
                                            g_strdup (attribute),
 | 
			
		||||
                                            keycode,
 | 
			
		||||
                                            data->num_columns,
 | 
			
		||||
                                            data->num_rows - 1);
 | 
			
		||||
 | 
			
		||||
        attribute = get_attribute (attribute_names, attribute_values,
 | 
			
		||||
                                   "oref");
 | 
			
		||||
@ -620,28 +626,25 @@ symbols_start_element_callback (GMarkupParseContext *pcontext,
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    if (g_strcmp0 (element_name, "key") == 0) {
 | 
			
		||||
        guint keycode;
 | 
			
		||||
 | 
			
		||||
        attribute = get_attribute (attribute_names, attribute_values,
 | 
			
		||||
                                   "keycode");
 | 
			
		||||
                                   "name");
 | 
			
		||||
        if (attribute == NULL) {
 | 
			
		||||
            g_set_error (error,
 | 
			
		||||
                         G_MARKUP_ERROR,
 | 
			
		||||
                         G_MARKUP_ERROR_MISSING_ATTRIBUTE,
 | 
			
		||||
                         "no \"keycode\" attribute for \"key\"");
 | 
			
		||||
                         "no \"name\" attribute for \"key\"");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        keycode = strtoul (attribute, NULL, 10);
 | 
			
		||||
 | 
			
		||||
        data->key = eek_keyboard_find_key_by_keycode (data->keyboard,
 | 
			
		||||
                                                      keycode);
 | 
			
		||||
        /*if (data->key == NULL) {
 | 
			
		||||
        data->key = eek_keyboard_find_key_by_name (data->keyboard,
 | 
			
		||||
                                                   attribute);
 | 
			
		||||
        if (data->key == NULL) {
 | 
			
		||||
            g_set_error (error,
 | 
			
		||||
                         G_MARKUP_ERROR,
 | 
			
		||||
                         G_MARKUP_ERROR_INVALID_CONTENT,
 | 
			
		||||
                         "no such keycode %u", keycode);
 | 
			
		||||
            return;
 | 
			
		||||
        }*/
 | 
			
		||||
                         "no such key %s", attribute);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        attribute = get_attribute (attribute_names, attribute_values,
 | 
			
		||||
                                   "groups");
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,7 @@
 | 
			
		||||
#include "config.h"
 | 
			
		||||
 | 
			
		||||
#include "eekboard/eekboard-context-service.h"
 | 
			
		||||
#include "keymap.h"
 | 
			
		||||
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
@ -83,6 +84,53 @@ struct _EekboardContextServicePrivate {
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (EekboardContextService, eekboard_context_service, G_TYPE_OBJECT);
 | 
			
		||||
 | 
			
		||||
/*static Display *display = NULL; */
 | 
			
		||||
gchar *
 | 
			
		||||
get_keymap_from_resource(const gchar *keyboard_type, gboolean fallback)
 | 
			
		||||
{
 | 
			
		||||
    g_autoptr (GFile) file = NULL;
 | 
			
		||||
    g_autoptr (GFileInfo) info = NULL;
 | 
			
		||||
    g_autoptr (GFileInputStream) stream = NULL;
 | 
			
		||||
    goffset size = 0;
 | 
			
		||||
    gsize bytes_read = 0;
 | 
			
		||||
    g_autofree gchar *contents = NULL;
 | 
			
		||||
    g_autofree gchar *path = NULL;
 | 
			
		||||
    GError *error = NULL;
 | 
			
		||||
 | 
			
		||||
    if (fallback)
 | 
			
		||||
        g_debug ("falling back to loading a %s keymap", keyboard_type);
 | 
			
		||||
 | 
			
		||||
    path = g_strconcat ("resource:///sm/puri/squeekboard/keyboards/keymaps/",
 | 
			
		||||
                        keyboard_type, ".xkb", NULL);
 | 
			
		||||
    file = g_file_new_for_uri (path);
 | 
			
		||||
    stream = g_file_read (file, NULL, &error);
 | 
			
		||||
 | 
			
		||||
    if (!stream)
 | 
			
		||||
        goto keymap_error;
 | 
			
		||||
 | 
			
		||||
    info = g_file_input_stream_query_info (stream,
 | 
			
		||||
                                           G_FILE_ATTRIBUTE_STANDARD_SIZE,
 | 
			
		||||
                                           NULL,
 | 
			
		||||
                                           &error);
 | 
			
		||||
 | 
			
		||||
    if (!info)
 | 
			
		||||
        goto keymap_error;
 | 
			
		||||
 | 
			
		||||
    size = g_file_info_get_size (info);
 | 
			
		||||
    contents = g_malloc0 (size);
 | 
			
		||||
 | 
			
		||||
    if (!g_input_stream_read_all (G_INPUT_STREAM(stream), contents, size,
 | 
			
		||||
                                  &bytes_read, NULL, &error))
 | 
			
		||||
        goto keymap_error;
 | 
			
		||||
 | 
			
		||||
    return g_utf8_make_valid (contents, -1);
 | 
			
		||||
 | 
			
		||||
keymap_error:
 | 
			
		||||
    if (fallback)
 | 
			
		||||
        g_error ("failed to load keymap from resource: %s", error->message);
 | 
			
		||||
 | 
			
		||||
    g_error_free (error);
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static EekKeyboard *
 | 
			
		||||
eekboard_context_service_real_create_keyboard (EekboardContextService *self,
 | 
			
		||||
@ -143,18 +191,28 @@ eekboard_context_service_real_create_keyboard (EekboardContextService *self,
 | 
			
		||||
    if (!context) {
 | 
			
		||||
        g_error("No context created");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
    struct xkb_rule_names rules = { 0 };
 | 
			
		||||
    rules.layout = strdup(keyboard_type);
 | 
			
		||||
    struct xkb_keymap *keymap = xkb_keymap_new_from_names(context, &rules,
 | 
			
		||||
        XKB_KEYMAP_COMPILE_NO_FLAGS);
 | 
			
		||||
*/
 | 
			
		||||
    char *keymap_str = get_keymap_from_resource(keyboard_type, FALSE);
 | 
			
		||||
    if (!keymap_str)
 | 
			
		||||
        keymap_str = get_keymap_from_resource("us", TRUE);
 | 
			
		||||
 | 
			
		||||
    struct xkb_keymap *keymap = xkb_keymap_new_from_string(context, keymap_str,
 | 
			
		||||
        XKB_KEYMAP_FORMAT_TEXT_V1, XKB_KEYMAP_COMPILE_NO_FLAGS);
 | 
			
		||||
 | 
			
		||||
    free(keymap_str);
 | 
			
		||||
 | 
			
		||||
    xkb_context_unref(context);
 | 
			
		||||
    if (!keymap) {
 | 
			
		||||
        g_error("Bad keymap");
 | 
			
		||||
    }
 | 
			
		||||
    keyboard->keymap = keymap;
 | 
			
		||||
    char *keymap_str = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1);
 | 
			
		||||
 | 
			
		||||
    keymap_str = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_FORMAT_TEXT_V1);
 | 
			
		||||
    keyboard->keymap_len = strlen(keymap_str) + 1;
 | 
			
		||||
 | 
			
		||||
    g_autofree char *path = strdup("/eek_keymap-XXXXXX");
 | 
			
		||||
    char *r = &path[strlen(path) - 6];
 | 
			
		||||
    getrandom(r, 6, GRND_NONBLOCK);
 | 
			
		||||
@ -287,6 +345,7 @@ settings_update_layout(EekboardContextService *context)
 | 
			
		||||
    g_autofree gchar *keyboard_type = NULL;
 | 
			
		||||
    g_autofree gchar *keyboard_layout = NULL;
 | 
			
		||||
    settings_get_layout(context->priv->settings, &keyboard_type, &keyboard_layout);
 | 
			
		||||
    g_debug("type=%s, layout=%s", keyboard_type, keyboard_layout);
 | 
			
		||||
 | 
			
		||||
    if (!keyboard_type) {
 | 
			
		||||
        keyboard_type = g_strdup("us");
 | 
			
		||||
 | 
			
		||||
@ -284,6 +284,26 @@ update_modifier_info (SeatEmitter *client)
 | 
			
		||||
    }*/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
send_fake_key (SeatEmitter *emitter,
 | 
			
		||||
               EekKeyboard *keyboard,
 | 
			
		||||
               guint    keycode,
 | 
			
		||||
               guint    keyboard_modifiers,
 | 
			
		||||
               gboolean pressed,
 | 
			
		||||
               uint32_t timestamp)
 | 
			
		||||
{
 | 
			
		||||
    uint32_t proto_modifiers = 0;
 | 
			
		||||
    guint level = eek_element_get_level(EEK_ELEMENT(keyboard));
 | 
			
		||||
    uint32_t group = (level / 2);
 | 
			
		||||
 | 
			
		||||
    if (keyboard_modifiers & EEK_SHIFT_MASK)
 | 
			
		||||
        proto_modifiers |= 1<<MOD_IDX_SHIFT;
 | 
			
		||||
 | 
			
		||||
    zwp_virtual_keyboard_v1_modifiers(emitter->virtual_keyboard, proto_modifiers, 0, 0, group);
 | 
			
		||||
    send_virtual_keyboard_key (emitter->virtual_keyboard, keycode - 8, (unsigned)pressed, timestamp);
 | 
			
		||||
    zwp_virtual_keyboard_v1_modifiers(emitter->virtual_keyboard, proto_modifiers, 0, 0, group);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
emit_key_activated (EekboardContextService *manager,
 | 
			
		||||
                    EekKeyboard     *keyboard,
 | 
			
		||||
@ -324,5 +344,5 @@ emit_key_activated (EekboardContextService *manager,
 | 
			
		||||
    emitter.virtual_keyboard = manager->virtual_keyboard;
 | 
			
		||||
    emitter.keymap = keyboard->keymap;
 | 
			
		||||
    update_modifier_info (&emitter);
 | 
			
		||||
    send_fake_key_events (&emitter, symbol, modifiers, pressed, timestamp);
 | 
			
		||||
    send_fake_key (&emitter, keyboard, keycode, modifiers, pressed, timestamp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user