summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2011-07-10 13:42:25 +0100
committerdakkar <dakkar@thenautilus.net>2011-07-10 13:42:25 +0100
commit31edee53e512db234a2db5d741f558db1970e534 (patch)
tree10ef1237f15a40e2880ae31bab19bb7cc9429270
parentsome tools (diff)
downloadtf101-dvorak-keyboard-31edee53e512db234a2db5d741f558db1970e534.tar.gz
tf101-dvorak-keyboard-31edee53e512db234a2db5d741f558db1970e534.tar.bz2
tf101-dvorak-keyboard-31edee53e512db234a2db5d741f558db1970e534.zip
files from Honeycomb 3.1
-rw-r--r--keychars/Generic.kcm673
-rw-r--r--keychars/Virtual.kcm544
-rw-r--r--keychars/asusec.kcm407
-rw-r--r--keychars/qwerty.kcm508
-rw-r--r--keychars/qwerty2.kcm505
-rw-r--r--keylayout/AVRCP.kl23
-rw-r--r--keylayout/Generic.kl435
-rw-r--r--keylayout/Vendor_045e_Product_028e.kl46
-rw-r--r--keylayout/Vendor_046d_Product_c216.kl37
-rw-r--r--keylayout/Vendor_046d_Product_c294.kl53
-rw-r--r--keylayout/Vendor_046d_Product_c299.kl62
-rw-r--r--keylayout/Vendor_046d_Product_c532.kl133
-rw-r--r--keylayout/Vendor_054c_Product_0268.kl76
-rw-r--r--keylayout/Vendor_05ac_Product_0239.kl119
-rw-r--r--keylayout/Vendor_22b8_Product_093d.kl105
-rw-r--r--keylayout/asusec.kl86
-rw-r--r--keylayout/gpio-keys.kl7
-rw-r--r--keylayout/qwerty.kl112
-rw-r--r--xt9/config/databases.conf116
-rw-r--r--xt9/databases/hwr/PRC/dltsdb.datbin0 -> 553408 bytes
-rw-r--r--xt9/databases/hwr/TW/dlttdb.datbin0 -> 466672 bytes
-rw-r--r--xt9/databases/kdb/ZHhpd_pinyin_bpmf_stroke_cangjie.kdbbin0 -> 781 bytes
-rw-r--r--xt9/databases/kdb/azerty.french.center.kdbbin0 -> 17550 bytes
-rw-r--r--xt9/databases/kdb/kohqd.kdbbin0 -> 750 bytes
-rw-r--r--xt9/databases/kdb/qwerty.arabic.center.kdbbin0 -> 15806 bytes
-rw-r--r--xt9/databases/kdb/qwerty.english.center.kdbbin0 -> 17550 bytes
-rw-r--r--xt9/databases/kdb/qwerty.greek.center.kdbbin0 -> 37498 bytes
-rw-r--r--xt9/databases/kdb/qwerty.hebrew.center.kdbbin0 -> 39390 bytes
-rw-r--r--xt9/databases/kdb/qwerty.russian.center.kdbbin0 -> 47438 bytes
-rw-r--r--xt9/databases/kdb/qwerty.thai.center.kdbbin0 -> 34790 bytes
-rw-r--r--xt9/databases/kdb/qwertz.german.center.kdbbin0 -> 17550 bytes
-rw-r--r--xt9/databases/ldb/ARlsUN_xt9.ldbbin0 -> 189836 bytes
-rw-r--r--xt9/databases/ldb/CSlsUN_xt9.ldbbin0 -> 283061 bytes
-rw-r--r--xt9/databases/ldb/DAusUN_xt9.ldbbin0 -> 158869 bytes
-rw-r--r--xt9/databases/ldb/DEusUN_xt9_2.ldbbin0 -> 530336 bytes
-rw-r--r--xt9/databases/ldb/ELlsUN_xt9.ldbbin0 -> 315069 bytes
-rw-r--r--xt9/databases/ldb/ENubUN_xt9_2.ldbbin0 -> 306100 bytes
-rw-r--r--xt9/databases/ldb/ESusUN_xt9_2.ldbbin0 -> 343852 bytes
-rw-r--r--xt9/databases/ldb/FIusUN_xt9_2.ldbbin0 -> 528874 bytes
-rw-r--r--xt9/databases/ldb/FRusUN_xt9_2.ldbbin0 -> 343140 bytes
-rw-r--r--xt9/databases/ldb/HElsUN_xt9.ldbbin0 -> 163041 bytes
-rw-r--r--xt9/databases/ldb/HUlsUN_xt9.ldbbin0 -> 304199 bytes
-rw-r--r--xt9/databases/ldb/ITusUN_xt9_2.ldbbin0 -> 385101 bytes
-rw-r--r--xt9/databases/ldb/NLlsUN_xt9_2.ldbbin0 -> 137118 bytes
-rw-r--r--xt9/databases/ldb/NOlsUN_xt9.ldbbin0 -> 163851 bytes
-rw-r--r--xt9/databases/ldb/PLlsUN_xt9.ldbbin0 -> 260146 bytes
-rw-r--r--xt9/databases/ldb/PTusUN_xt9.ldbbin0 -> 98822 bytes
-rw-r--r--xt9/databases/ldb/RUlsUN_xt9_2.ldbbin0 -> 314005 bytes
-rw-r--r--xt9/databases/ldb/SKlsUN_xt9.ldbbin0 -> 247507 bytes
-rw-r--r--xt9/databases/ldb/SVusUN_xt9.ldbbin0 -> 145951 bytes
-rw-r--r--xt9/databases/ldb/THlsUN_xt9.ldbbin0 -> 61674 bytes
-rw-r--r--xt9/databases/ldb/TRlsUN_xt9.ldbbin0 -> 437478 bytes
-rw-r--r--xt9/databases/ldb/ZHsbUNps_GB2312_xt9.ldbbin0 -> 538838 bytes
-rw-r--r--xt9/databases/ldb/ZHtbUNps_Big5_bpmf_pinyin_CJ_xt9.ldbbin0 -> 1041512 bytes
-rw-r--r--xt9/databases/mdb/DE.txt1
-rw-r--r--xt9/databases/mdb/EN.txt0
-rw-r--r--xt9/databases/mdb/ES.txt1
-rw-r--r--xt9/databases/mdb/FR.txt1
-rw-r--r--xt9/databases/mdb/IT.txt1
-rw-r--r--xt9/keychars/qwerty-ar_EG.kcm355
-rw-r--r--xt9/keychars/qwerty-cs_CZ.kcm547
-rw-r--r--xt9/keychars/qwerty-da_DK.kcm443
-rw-r--r--xt9/keychars/qwerty-de_CH.kcm451
-rw-r--r--xt9/keychars/qwerty-de_DE.kcm477
-rw-r--r--xt9/keychars/qwerty-el_GR.kcm447
-rw-r--r--xt9/keychars/qwerty-en_CA.kcm407
-rw-r--r--xt9/keychars/qwerty-en_GB.kcm426
-rw-r--r--xt9/keychars/qwerty-en_GR.kcm407
-rw-r--r--xt9/keychars/qwerty-en_US.kcm407
-rw-r--r--xt9/keychars/qwerty-es_ES.kcm439
-rw-r--r--xt9/keychars/qwerty-es_US.kcm504
-rw-r--r--xt9/keychars/qwerty-fi_FI.kcm443
-rw-r--r--xt9/keychars/qwerty-fr_BE.kcm482
-rw-r--r--xt9/keychars/qwerty-fr_CA.kcm462
-rw-r--r--xt9/keychars/qwerty-fr_CH.kcm441
-rw-r--r--xt9/keychars/qwerty-fr_FR.kcm489
-rw-r--r--xt9/keychars/qwerty-hu_HU.kcm565
-rw-r--r--xt9/keychars/qwerty-it_CH.kcm421
-rw-r--r--xt9/keychars/qwerty-it_IT.kcm421
-rw-r--r--xt9/keychars/qwerty-iw_IL.kcm429
-rw-r--r--xt9/keychars/qwerty-nb_NO.kcm441
-rw-r--r--xt9/keychars/qwerty-nl_BE.kcm482
-rw-r--r--xt9/keychars/qwerty-nl_NL.kcm504
-rw-r--r--xt9/keychars/qwerty-pl_PL.kcm438
-rw-r--r--xt9/keychars/qwerty-pt_BR.kcm439
-rw-r--r--xt9/keychars/qwerty-pt_PT.kcm433
-rw-r--r--xt9/keychars/qwerty-ru_RU.kcm414
-rw-r--r--xt9/keychars/qwerty-sv_SE.kcm443
-rw-r--r--xt9/keychars/qwerty-tr_TR.kcm475
-rw-r--r--xt9/keychars/qwerty-zh_CN.kcm407
-rw-r--r--xt9/keychars/qwerty-zh_TW.kcm407
-rw-r--r--xt9/keylayout/qwerty-ar_EG.kl86
-rw-r--r--xt9/keylayout/qwerty-cs_CZ.kl86
-rw-r--r--xt9/keylayout/qwerty-da_DK.kl86
-rw-r--r--xt9/keylayout/qwerty-de_CH.kl86
-rw-r--r--xt9/keylayout/qwerty-de_DE.kl86
-rw-r--r--xt9/keylayout/qwerty-el_GR.kl86
-rw-r--r--xt9/keylayout/qwerty-en_CA.kl86
-rw-r--r--xt9/keylayout/qwerty-en_GB.kl86
-rw-r--r--xt9/keylayout/qwerty-en_GR.kl86
-rw-r--r--xt9/keylayout/qwerty-en_US.kl86
-rw-r--r--xt9/keylayout/qwerty-es_ES.kl86
-rw-r--r--xt9/keylayout/qwerty-es_US.kl86
-rw-r--r--xt9/keylayout/qwerty-fi_FI.kl86
-rw-r--r--xt9/keylayout/qwerty-fr_BE.kl86
-rw-r--r--xt9/keylayout/qwerty-fr_CA.kl86
-rw-r--r--xt9/keylayout/qwerty-fr_CH.kl86
-rw-r--r--xt9/keylayout/qwerty-fr_FR.kl86
-rw-r--r--xt9/keylayout/qwerty-hu_HU.kl86
-rw-r--r--xt9/keylayout/qwerty-it_CH.kl86
-rw-r--r--xt9/keylayout/qwerty-it_IT.kl86
-rw-r--r--xt9/keylayout/qwerty-iw_IL.kl86
-rw-r--r--xt9/keylayout/qwerty-nb_NO.kl86
-rw-r--r--xt9/keylayout/qwerty-nl_BE.kl86
-rw-r--r--xt9/keylayout/qwerty-nl_NL.kl86
-rw-r--r--xt9/keylayout/qwerty-pl_PL.kl86
-rw-r--r--xt9/keylayout/qwerty-pt_BR.kl86
-rw-r--r--xt9/keylayout/qwerty-pt_PT.kl86
-rw-r--r--xt9/keylayout/qwerty-ru_RU.kl86
-rw-r--r--xt9/keylayout/qwerty-sv_SE.kl86
-rw-r--r--xt9/keylayout/qwerty-tr_TR.kl86
-rw-r--r--xt9/keylayout/qwerty-zh_CN.kl86
-rw-r--r--xt9/keylayout/qwerty-zh_TW.kl86
123 files changed, 21149 insertions, 0 deletions
diff --git a/keychars/Generic.kcm b/keychars/Generic.kcm
new file mode 100644
index 0000000..51a8b27
--- /dev/null
+++ b/keychars/Generic.kcm
@@ -0,0 +1,673 @@
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Generic key character map for full alphabetic US English PC style external keyboards.
+#
+# This file is intentionally very generic and is intended to support a broad rang of keyboards.
+# Do not edit the generic key character map to support a specific keyboard; instead, create
+# a new key character map file with the required keyboard configuration.
+#
+
+type FULL
+
+### Basic QWERTY keys ###
+
+key A {
+ label: 'A'
+ base: 'a'
+ shift, capslock: 'A'
+ ctrl, alt, meta: none
+}
+
+key B {
+ label: 'B'
+ base: 'b'
+ shift, capslock: 'B'
+ ctrl, alt, meta: none
+}
+
+key C {
+ label: 'C'
+ base: 'c'
+ shift, capslock: 'C'
+ alt: '\u00e7'
+ shift+alt: '\u00c7'
+ ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ base: 'd'
+ shift, capslock: 'D'
+ ctrl, alt, meta: none
+}
+
+key E {
+ label: 'E'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u0301'
+ ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ base: 'f'
+ shift, capslock: 'F'
+ ctrl, alt, meta: none
+}
+
+key G {
+ label: 'G'
+ base: 'g'
+ shift, capslock: 'G'
+ ctrl, alt, meta: none
+}
+
+key H {
+ label: 'H'
+ base: 'h'
+ shift, capslock: 'H'
+ ctrl, alt, meta: none
+}
+
+key I {
+ label: 'I'
+ base: 'i'
+ shift, capslock: 'I'
+ alt: '\u0302'
+ ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ base: 'j'
+ shift, capslock: 'J'
+ ctrl, alt, meta: none
+}
+
+key K {
+ label: 'K'
+ base: 'k'
+ shift, capslock: 'K'
+ ctrl, alt, meta: none
+}
+
+key L {
+ label: 'L'
+ base: 'l'
+ shift, capslock: 'L'
+ ctrl, alt, meta: none
+}
+
+key M {
+ label: 'M'
+ base: 'm'
+ shift, capslock: 'M'
+ ctrl, alt, meta: none
+}
+
+key N {
+ label: 'N'
+ base: 'n'
+ shift, capslock: 'N'
+ alt: '\u0303'
+ ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ base: 'o'
+ shift, capslock: 'O'
+ ctrl, alt, meta: none
+}
+
+key P {
+ label: 'P'
+ base: 'p'
+ shift, capslock: 'P'
+ ctrl, alt, meta: none
+}
+
+key Q {
+ label: 'Q'
+ base: 'q'
+ shift, capslock: 'Q'
+ ctrl, alt, meta: none
+}
+
+key R {
+ label: 'R'
+ base: 'r'
+ shift, capslock: 'R'
+ ctrl, alt, meta: none
+}
+
+key S {
+ label: 'S'
+ base: 's'
+ shift, capslock: 'S'
+ alt: '\u00df'
+ ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ base: 't'
+ shift, capslock: 'T'
+ ctrl, alt, meta: none
+}
+
+key U {
+ label: 'U'
+ base: 'u'
+ shift, capslock: 'U'
+ alt: '\u0308'
+ ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ base: 'v'
+ shift, capslock: 'V'
+ ctrl, alt, meta: none
+}
+
+key W {
+ label: 'W'
+ base: 'w'
+ shift, capslock: 'W'
+ ctrl, alt, meta: none
+}
+
+key X {
+ label: 'X'
+ base: 'x'
+ shift, capslock: 'X'
+ ctrl, alt, meta: none
+}
+
+key Y {
+ label: 'Y'
+ base: 'y'
+ shift, capslock: 'Y'
+ ctrl, alt, meta: none
+}
+
+key Z {
+ label: 'Z'
+ base: 'z'
+ shift, capslock: 'Z'
+ ctrl, alt, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ ctrl, alt, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ ctrl, alt, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '@'
+ ctrl, alt, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ ctrl, alt, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ ctrl, alt, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ ctrl, alt, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '^'
+ ctrl, alt, meta: none
+ alt+shift: '\u0302'
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ ctrl, alt, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ ctrl, alt, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ ctrl, alt, meta: none
+}
+
+key SPACE {
+ label: ' '
+ base: ' '
+ ctrl, alt: none
+ meta: fallback SEARCH
+}
+
+key ENTER {
+ label: '\n'
+ base: '\n'
+ ctrl, alt, meta: none
+}
+
+key TAB {
+ label: '\t'
+ base: '\t'
+ ctrl, alt: none
+ meta: fallback APP_SWITCH
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '<'
+ ctrl, alt, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: '>'
+ ctrl, alt, meta: none
+}
+
+key SLASH {
+ label, number: '/'
+ base: '/'
+ shift: '?'
+ ctrl, alt, meta: none
+}
+
+key GRAVE {
+ label, number: '`'
+ base: '`'
+ shift: '~'
+ alt: '\u0300'
+ alt+shift: '\u0303'
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ ctrl, alt, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ ctrl, alt, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '['
+ base: '['
+ shift: '{'
+ ctrl, alt, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ']'
+ base: ']'
+ shift: '}'
+ ctrl, alt, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ ctrl, alt, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift: ':'
+ ctrl, alt, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\''
+ base: '\''
+ shift: '"'
+ ctrl, alt, meta: none
+}
+
+### Numeric keypad ###
+
+key NUMPAD_0 {
+ label, number: '0'
+ base: fallback INSERT
+ numlock: '0'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_1 {
+ label, number: '1'
+ base: fallback MOVE_END
+ numlock: '1'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_2 {
+ label, number: '2'
+ base: fallback DPAD_DOWN
+ numlock: '2'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_3 {
+ label, number: '3'
+ base: fallback PAGE_DOWN
+ numlock: '3'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_4 {
+ label, number: '4'
+ base: fallback DPAD_LEFT
+ numlock: '4'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_5 {
+ label, number: '5'
+ base: fallback DPAD_CENTER
+ numlock: '5'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_6 {
+ label, number: '6'
+ base: fallback DPAD_RIGHT
+ numlock: '6'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_7 {
+ label, number: '7'
+ base: fallback MOVE_HOME
+ numlock: '7'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_8 {
+ label, number: '8'
+ base: fallback DPAD_UP
+ numlock: '8'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_9 {
+ label, number: '9'
+ base: fallback PAGE_UP
+ numlock: '9'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_LEFT_PAREN {
+ label, number: '('
+ base: '('
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_RIGHT_PAREN {
+ label, number: ')'
+ base: ')'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_DIVIDE {
+ label, number: '/'
+ base: '/'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_MULTIPLY {
+ label, number: '*'
+ base: '*'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_SUBTRACT {
+ label, number: '-'
+ base: '-'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_ADD {
+ label, number: '+'
+ base: '+'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_DOT {
+ label, number: '.'
+ base: fallback FORWARD_DEL
+ numlock: '.'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_COMMA {
+ label, number: ','
+ base: ','
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_EQUALS {
+ label, number: '='
+ base: '='
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_ENTER {
+ label: '\n'
+ base: '\n' fallback ENTER
+ ctrl, alt, meta: none fallback ENTER
+}
+
+### Special keys on phones ###
+
+key AT {
+ label, number: '@'
+ base: '@'
+}
+
+key STAR {
+ label, number: '*'
+ base: '*'
+}
+
+key POUND {
+ label, number: '#'
+ base: '#'
+}
+
+key PLUS {
+ label, number: '+'
+ base: '+'
+}
+
+### Non-printing keys ###
+
+key ESCAPE {
+ base: fallback BACK
+ meta: fallback HOME
+ alt: fallback MENU
+}
+
+### Gamepad buttons ###
+
+key BUTTON_A {
+ base: fallback BACK
+}
+
+key BUTTON_B {
+ base: fallback BACK
+}
+
+key BUTTON_C {
+ base: fallback BACK
+}
+
+key BUTTON_X {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_Y {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_Z {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_L1 {
+ base: none
+}
+
+key BUTTON_R1 {
+ base: none
+}
+
+key BUTTON_L2 {
+ base: none
+}
+
+key BUTTON_R2 {
+ base: none
+}
+
+key BUTTON_THUMBL {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_THUMBR {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_START {
+ base: fallback HOME
+}
+
+key BUTTON_SELECT {
+ base: fallback MENU
+}
+
+key BUTTON_MODE {
+ base: fallback MENU
+}
+
+key BUTTON_1 {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_2 {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_3 {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_4 {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_5 {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_6 {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_7 {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_8 {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_9 {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_10 {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_11 {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_12 {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_13 {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_14 {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_15 {
+ base: fallback DPAD_CENTER
+}
+
+key BUTTON_16 {
+ base: fallback DPAD_CENTER
+}
diff --git a/keychars/Virtual.kcm b/keychars/Virtual.kcm
new file mode 100644
index 0000000..0ce4a68
--- /dev/null
+++ b/keychars/Virtual.kcm
@@ -0,0 +1,544 @@
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Key character map for a built-in generic virtual keyboard primarily used
+# for instrumentation and testing purposes.
+#
+
+type FULL
+
+### Basic QWERTY keys ###
+
+key A {
+ label: 'A'
+ base: 'a'
+ shift, capslock: 'A'
+ ctrl, alt, meta: none
+}
+
+key B {
+ label: 'B'
+ base: 'b'
+ shift, capslock: 'B'
+ ctrl, alt, meta: none
+}
+
+key C {
+ label: 'C'
+ base: 'c'
+ shift, capslock: 'C'
+ alt: '\u00e7'
+ shift+alt: '\u00c7'
+ ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ base: 'd'
+ shift, capslock: 'D'
+ ctrl, alt, meta: none
+}
+
+key E {
+ label: 'E'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u0301'
+ ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ base: 'f'
+ shift, capslock: 'F'
+ ctrl, alt, meta: none
+}
+
+key G {
+ label: 'G'
+ base: 'g'
+ shift, capslock: 'G'
+ ctrl, alt, meta: none
+}
+
+key H {
+ label: 'H'
+ base: 'h'
+ shift, capslock: 'H'
+ ctrl, alt, meta: none
+}
+
+key I {
+ label: 'I'
+ base: 'i'
+ shift, capslock: 'I'
+ alt: '\u0302'
+ ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ base: 'j'
+ shift, capslock: 'J'
+ ctrl, alt, meta: none
+}
+
+key K {
+ label: 'K'
+ base: 'k'
+ shift, capslock: 'K'
+ ctrl, alt, meta: none
+}
+
+key L {
+ label: 'L'
+ base: 'l'
+ shift, capslock: 'L'
+ ctrl, alt, meta: none
+}
+
+key M {
+ label: 'M'
+ base: 'm'
+ shift, capslock: 'M'
+ ctrl, alt, meta: none
+}
+
+key N {
+ label: 'N'
+ base: 'n'
+ shift, capslock: 'N'
+ alt: '\u0303'
+ ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ base: 'o'
+ shift, capslock: 'O'
+ ctrl, alt, meta: none
+}
+
+key P {
+ label: 'P'
+ base: 'p'
+ shift, capslock: 'P'
+ ctrl, alt, meta: none
+}
+
+key Q {
+ label: 'Q'
+ base: 'q'
+ shift, capslock: 'Q'
+ ctrl, alt, meta: none
+}
+
+key R {
+ label: 'R'
+ base: 'r'
+ shift, capslock: 'R'
+ ctrl, alt, meta: none
+}
+
+key S {
+ label: 'S'
+ base: 's'
+ shift, capslock: 'S'
+ alt: '\u00df'
+ ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ base: 't'
+ shift, capslock: 'T'
+ ctrl, alt, meta: none
+}
+
+key U {
+ label: 'U'
+ base: 'u'
+ shift, capslock: 'U'
+ alt: '\u0308'
+ ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ base: 'v'
+ shift, capslock: 'V'
+ ctrl, alt, meta: none
+}
+
+key W {
+ label: 'W'
+ base: 'w'
+ shift, capslock: 'W'
+ ctrl, alt, meta: none
+}
+
+key X {
+ label: 'X'
+ base: 'x'
+ shift, capslock: 'X'
+ ctrl, alt, meta: none
+}
+
+key Y {
+ label: 'Y'
+ base: 'y'
+ shift, capslock: 'Y'
+ ctrl, alt, meta: none
+}
+
+key Z {
+ label: 'Z'
+ base: 'z'
+ shift, capslock: 'Z'
+ ctrl, alt, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ ctrl, alt, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ ctrl, alt, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '@'
+ ctrl, alt, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ ctrl, alt, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ ctrl, alt, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ ctrl, alt, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '^'
+ ctrl, alt, meta: none
+ alt+shift: '\u0302'
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ ctrl, alt, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ ctrl, alt, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ ctrl, alt, meta: none
+}
+
+key SPACE {
+ label: ' '
+ base: ' '
+ ctrl, alt: none
+ meta: fallback SEARCH
+}
+
+key ENTER {
+ label: '\n'
+ base: '\n'
+ ctrl, alt, meta: none
+}
+
+key TAB {
+ label: '\t'
+ base: '\t'
+ ctrl, alt: none
+ meta: fallback APP_SWITCH
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '<'
+ ctrl, alt, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: '>'
+ ctrl, alt, meta: none
+}
+
+key SLASH {
+ label, number: '/'
+ base: '/'
+ shift: '?'
+ ctrl, alt, meta: none
+}
+
+key GRAVE {
+ label, number: '`'
+ base: '`'
+ shift: '~'
+ alt: '\u0300'
+ alt+shift: '\u0303'
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ ctrl, alt, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ ctrl, alt, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '['
+ base: '['
+ shift: '{'
+ ctrl, alt, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ']'
+ base: ']'
+ shift: '}'
+ ctrl, alt, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ ctrl, alt, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift: ':'
+ ctrl, alt, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\''
+ base: '\''
+ shift: '"'
+ ctrl, alt, meta: none
+}
+
+### Numeric keypad ###
+
+key NUMPAD_0 {
+ label, number: '0'
+ base: fallback INSERT
+ numlock: '0'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_1 {
+ label, number: '1'
+ base: fallback MOVE_END
+ numlock: '1'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_2 {
+ label, number: '2'
+ base: fallback DPAD_DOWN
+ numlock: '2'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_3 {
+ label, number: '3'
+ base: fallback PAGE_DOWN
+ numlock: '3'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_4 {
+ label, number: '4'
+ base: fallback DPAD_LEFT
+ numlock: '4'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_5 {
+ label, number: '5'
+ base: fallback DPAD_CENTER
+ numlock: '5'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_6 {
+ label, number: '6'
+ base: fallback DPAD_RIGHT
+ numlock: '6'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_7 {
+ label, number: '7'
+ base: fallback MOVE_HOME
+ numlock: '7'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_8 {
+ label, number: '8'
+ base: fallback DPAD_UP
+ numlock: '8'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_9 {
+ label, number: '9'
+ base: fallback PAGE_UP
+ numlock: '9'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_LEFT_PAREN {
+ label, number: '('
+ base: '('
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_RIGHT_PAREN {
+ label, number: ')'
+ base: ')'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_DIVIDE {
+ label, number: '/'
+ base: '/'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_MULTIPLY {
+ label, number: '*'
+ base: '*'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_SUBTRACT {
+ label, number: '-'
+ base: '-'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_ADD {
+ label, number: '+'
+ base: '+'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_DOT {
+ label, number: '.'
+ base: fallback FORWARD_DEL
+ numlock: '.'
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_COMMA {
+ label, number: ','
+ base: ','
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_EQUALS {
+ label, number: '='
+ base: '='
+ ctrl, alt, meta: none
+}
+
+key NUMPAD_ENTER {
+ label: '\n'
+ base: '\n' fallback ENTER
+ ctrl, alt, meta: none fallback ENTER
+}
+
+### Special keys on phones ###
+
+key AT {
+ label, number: '@'
+ base: '@'
+}
+
+key STAR {
+ label, number: '*'
+ base: '*'
+}
+
+key POUND {
+ label, number: '#'
+ base: '#'
+}
+
+key PLUS {
+ label, number: '+'
+ base: '+'
+}
+
+### Non-printing keys ###
+
+key ESCAPE {
+ base: fallback BACK
+ meta: fallback HOME
+ alt: fallback MENU
+}
diff --git a/keychars/asusec.kcm b/keychars/asusec.kcm
new file mode 100644
index 0000000..7c79dc0
--- /dev/null
+++ b/keychars/asusec.kcm
@@ -0,0 +1,407 @@
+type FULL
+
+key GRAVE {
+ label, number: '`'
+ base: '`'
+ shift: '~'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '@'
+ alt, ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt, ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt, ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt, ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '^'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ capslock+shift: 'e'
+ alt, ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '['
+ base: '['
+ shift: '{'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ']'
+ base: ']'
+ shift: '}'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\''
+ base: '\''
+ shift: '"'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '<'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '/'
+ base: '/'
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
diff --git a/keychars/qwerty.kcm b/keychars/qwerty.kcm
new file mode 100644
index 0000000..f3e1524
--- /dev/null
+++ b/keychars/qwerty.kcm
@@ -0,0 +1,508 @@
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Emulator keyboard character map #1.
+#
+# This file is no longer used as the platform's default keyboard character map.
+# Refer to Generic.kcm and Virtual.kcm instead.
+#
+
+type ALPHA
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ alt: '#'
+ shift+alt, capslock+alt: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ alt: '<'
+ shift+alt, capslock+alt: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ alt: '9'
+ shift+alt, capslock+alt: '\u00e7'
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ alt: '5'
+ shift+alt, capslock+alt: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '2'
+ shift+alt, capslock+alt: '\u0301'
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ alt: '6'
+ shift+alt, capslock+alt: '\u00a5'
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ alt: '-'
+ shift+alt, capslock+alt: '_'
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ alt: '['
+ shift+alt, capslock+alt: '{'
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ alt: '$'
+ shift+alt, capslock+alt: '\u0302'
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ alt: ']'
+ shift+alt, capslock+alt: '}'
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ alt: '"'
+ shift+alt, capslock+alt: '~'
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ alt: '\''
+ shift+alt, capslock+alt: '`'
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ alt: '!'
+ shift+alt, capslock+alt: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ alt: '>'
+ shift+alt, capslock+alt: '\u0303'
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ alt: '('
+ shift+alt, capslock+alt: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ alt: ')'
+ shift+alt, capslock+alt: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ alt: '*'
+ shift+alt, capslock+alt: '\u0300'
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ alt: '3'
+ shift+alt, capslock+alt: '\u20ac'
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ alt: '4'
+ shift+alt, capslock+alt: '\u00df'
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ alt: '+'
+ shift+alt, capslock+alt: '\u00a3'
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ alt: '&'
+ shift+alt, capslock+alt: '\u0308'
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ alt: '='
+ shift+alt, capslock+alt: '^'
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ alt: '1'
+ shift+alt, capslock+alt: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ alt: '8'
+ shift+alt, capslock+alt: '\uef00'
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ alt: '%'
+ shift+alt, capslock+alt: '\u00a1'
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ alt: '7'
+ shift+alt, capslock+alt: none
+}
+
+key COMMA {
+ label: ','
+ number: ','
+ base: ','
+ shift: ';'
+ alt: ';'
+ shift+alt: '|'
+}
+
+key PERIOD {
+ label: '.'
+ number: '.'
+ base: '.'
+ shift: ':'
+ alt: ':'
+ shift+alt: '\u2026'
+}
+
+key AT {
+ label: '@'
+ number: '0'
+ base: '@'
+ shift: '0'
+ alt: '0'
+ shift+alt: '\u2022'
+}
+
+key SLASH {
+ label: '/'
+ number: '/'
+ base: '/'
+ shift: '?'
+ alt: '?'
+ shift+alt: '\\'
+}
+
+key SPACE {
+ label: ' '
+ number: ' '
+ base: ' '
+ shift: ' '
+ alt: '\uef01'
+ shift+alt: '\uef01'
+}
+
+key ENTER {
+ label: '\n'
+ number: '\n'
+ base: '\n'
+ shift: '\n'
+ alt: '\n'
+ shift+alt: '\n'
+}
+
+key TAB {
+ label: '\t'
+ number: '\t'
+ base: '\t'
+ shift: '\t'
+ alt: '\t'
+ shift+alt: '\t'
+}
+
+key 0 {
+ label: '0'
+ number: '0'
+ base: '0'
+ shift: ')'
+ alt: ')'
+ shift+alt: ')'
+}
+
+key 1 {
+ label: '1'
+ number: '1'
+ base: '1'
+ shift: '!'
+ alt: '!'
+ shift+alt: '!'
+}
+
+key 2 {
+ label: '2'
+ number: '2'
+ base: '2'
+ shift: '@'
+ alt: '@'
+ shift+alt: '@'
+}
+
+key 3 {
+ label: '3'
+ number: '3'
+ base: '3'
+ shift: '#'
+ alt: '#'
+ shift+alt: '#'
+}
+
+key 4 {
+ label: '4'
+ number: '4'
+ base: '4'
+ shift: '$'
+ alt: '$'
+ shift+alt: '$'
+}
+
+key 5 {
+ label: '5'
+ number: '5'
+ base: '5'
+ shift: '%'
+ alt: '%'
+ shift+alt: '%'
+}
+
+key 6 {
+ label: '6'
+ number: '6'
+ base: '6'
+ shift: '^'
+ alt: '^'
+ shift+alt: '^'
+}
+
+key 7 {
+ label: '7'
+ number: '7'
+ base: '7'
+ shift: '&'
+ alt: '&'
+ shift+alt: '&'
+}
+
+key 8 {
+ label: '8'
+ number: '8'
+ base: '8'
+ shift: '*'
+ alt: '*'
+ shift+alt: '*'
+}
+
+key 9 {
+ label: '9'
+ number: '9'
+ base: '9'
+ shift: '('
+ alt: '('
+ shift+alt: '('
+}
+
+key GRAVE {
+ label: '`'
+ number: '`'
+ base: '`'
+ shift: '~'
+ alt: '`'
+ shift+alt: '~'
+}
+
+key MINUS {
+ label: '-'
+ number: '-'
+ base: '-'
+ shift: '_'
+ alt: '-'
+ shift+alt: '_'
+}
+
+key EQUALS {
+ label: '='
+ number: '='
+ base: '='
+ shift: '+'
+ alt: '='
+ shift+alt: '+'
+}
+
+key LEFT_BRACKET {
+ label: '['
+ number: '['
+ base: '['
+ shift: '{'
+ alt: '['
+ shift+alt: '{'
+}
+
+key RIGHT_BRACKET {
+ label: ']'
+ number: ']'
+ base: ']'
+ shift: '}'
+ alt: ']'
+ shift+alt: '}'
+}
+
+key BACKSLASH {
+ label: '\\'
+ number: '\\'
+ base: '\\'
+ shift: '|'
+ alt: '\\'
+ shift+alt: '|'
+}
+
+key SEMICOLON {
+ label: ';'
+ number: ';'
+ base: ';'
+ shift: ':'
+ alt: ';'
+ shift+alt: ':'
+}
+
+key APOSTROPHE {
+ label: '\''
+ number: '\''
+ base: '\''
+ shift: '"'
+ alt: '\''
+ shift+alt: '"'
+}
+
+key STAR {
+ label: '*'
+ number: '*'
+ base: '*'
+ shift: '*'
+ alt: '*'
+ shift+alt: '*'
+}
+
+key POUND {
+ label: '#'
+ number: '#'
+ base: '#'
+ shift: '#'
+ alt: '#'
+ shift+alt: '#'
+}
+
+key PLUS {
+ label: '+'
+ number: '+'
+ base: '+'
+ shift: '+'
+ alt: '+'
+ shift+alt: '+'
+}
diff --git a/keychars/qwerty2.kcm b/keychars/qwerty2.kcm
new file mode 100644
index 0000000..d96914f
--- /dev/null
+++ b/keychars/qwerty2.kcm
@@ -0,0 +1,505 @@
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Emulator keyboard character map #2.
+#
+
+type ALPHA
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ alt: 'a'
+ shift+alt, capslock+alt: 'A'
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ alt: 'b'
+ shift+alt, capslock+alt: 'B'
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ alt: '\u00e7'
+ shift+alt, capslock+alt: '\u00e7'
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ alt: '\''
+ shift+alt, capslock+alt: '\''
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '"'
+ shift+alt, capslock+alt: '\u0301'
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ alt: '['
+ shift+alt, capslock+alt: '['
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ alt: ']'
+ shift+alt, capslock+alt: ']'
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ alt: '<'
+ shift+alt, capslock+alt: '<'
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ alt: '-'
+ shift+alt, capslock+alt: '\u0302'
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ alt: '>'
+ shift+alt, capslock+alt: '>'
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ alt: ';'
+ shift+alt, capslock+alt: '~'
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ alt: ':'
+ shift+alt, capslock+alt: '`'
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ alt: '%'
+ shift+alt, capslock+alt: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ alt: none
+ shift+alt, capslock+alt: '\u0303'
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ alt: '+'
+ shift+alt, capslock+alt: '+'
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ alt: '='
+ shift+alt, capslock+alt: '\u00a5'
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ alt: '|'
+ shift+alt, capslock+alt: '\u0300'
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ alt: '`'
+ shift+alt, capslock+alt: '\u20ac'
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ alt: '\\'
+ shift+alt, capslock+alt: '\u00df'
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ alt: '{'
+ shift+alt, capslock+alt: '\u00a3'
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ alt: '_'
+ shift+alt, capslock+alt: '\u0308'
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ alt: 'v'
+ shift+alt, capslock+alt: 'V'
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ alt: '~'
+ shift+alt, capslock+alt: '~'
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ alt: 'x'
+ shift+alt, capslock+alt: '\uef00'
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ alt: '}'
+ shift+alt, capslock+alt: '\u00a1'
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ alt: 'z'
+ shift+alt, capslock+alt: 'Z'
+}
+
+key COMMA {
+ label: ','
+ number: ','
+ base: ','
+ shift: '<'
+ alt: ','
+ shift+alt: ','
+}
+
+key PERIOD {
+ label: '.'
+ number: '.'
+ base: '.'
+ shift: '>'
+ alt: '.'
+ shift+alt: '\u2026'
+}
+
+key AT {
+ label: '@'
+ number: '@'
+ base: '@'
+ shift: '@'
+ alt: '@'
+ shift+alt: '\u2022'
+}
+
+key SLASH {
+ label: '/'
+ number: '/'
+ base: '/'
+ shift: '?'
+ alt: '?'
+ shift+alt: '?'
+}
+
+key SPACE {
+ label: ' '
+ number: ' '
+ base: ' '
+ shift: ' '
+ alt: '\uef01'
+ shift+alt: '\uef01'
+}
+
+key ENTER {
+ label: '\n'
+ number: '\n'
+ base: '\n'
+ shift: '\n'
+ alt: '\n'
+ shift+alt: '\n'
+}
+
+key TAB {
+ label: '\t'
+ number: '\t'
+ base: '\t'
+ shift: '\t'
+ alt: '\t'
+ shift+alt: '\t'
+}
+
+key 0 {
+ label: '0'
+ number: '0'
+ base: '0'
+ shift: ')'
+ alt: ')'
+ shift+alt: ')'
+}
+
+key 1 {
+ label: '1'
+ number: '1'
+ base: '1'
+ shift: '!'
+ alt: '!'
+ shift+alt: '!'
+}
+
+key 2 {
+ label: '2'
+ number: '2'
+ base: '2'
+ shift: '@'
+ alt: '@'
+ shift+alt: '@'
+}
+
+key 3 {
+ label: '3'
+ number: '3'
+ base: '3'
+ shift: '#'
+ alt: '#'
+ shift+alt: '#'
+}
+
+key 4 {
+ label: '4'
+ number: '4'
+ base: '4'
+ shift: '$'
+ alt: '$'
+ shift+alt: '$'
+}
+
+key 5 {
+ label: '5'
+ number: '5'
+ base: '5'
+ shift: '%'
+ alt: '%'
+ shift+alt: '%'
+}
+
+key 6 {
+ label: '6'
+ number: '6'
+ base: '6'
+ shift: '^'
+ alt: '^'
+ shift+alt: '^'
+}
+
+key 7 {
+ label: '7'
+ number: '7'
+ base: '7'
+ shift: '&'
+ alt: '&'
+ shift+alt: '&'
+}
+
+key 8 {
+ label: '8'
+ number: '8'
+ base: '8'
+ shift: '*'
+ alt: '*'
+ shift+alt: '*'
+}
+
+key 9 {
+ label: '9'
+ number: '9'
+ base: '9'
+ shift: '('
+ alt: '('
+ shift+alt: '('
+}
+
+key GRAVE {
+ label: '`'
+ number: '`'
+ base: '`'
+ shift: '~'
+ alt: '`'
+ shift+alt: '~'
+}
+
+key MINUS {
+ label: '-'
+ number: '-'
+ base: '-'
+ shift: '_'
+ alt: '-'
+ shift+alt: '_'
+}
+
+key EQUALS {
+ label: '='
+ number: '='
+ base: '='
+ shift: '+'
+ alt: '='
+ shift+alt: '+'
+}
+
+key LEFT_BRACKET {
+ label: '['
+ number: '['
+ base: '['
+ shift: '{'
+ alt: '['
+ shift+alt: '{'
+}
+
+key RIGHT_BRACKET {
+ label: ']'
+ number: ']'
+ base: ']'
+ shift: '}'
+ alt: ']'
+ shift+alt: '}'
+}
+
+key BACKSLASH {
+ label: '\\'
+ number: '\\'
+ base: '\\'
+ shift: '|'
+ alt: '\\'
+ shift+alt: '|'
+}
+
+key SEMICOLON {
+ label: ';'
+ number: ';'
+ base: ';'
+ shift: ':'
+ alt: ';'
+ shift+alt: ':'
+}
+
+key APOSTROPHE {
+ label: '\''
+ number: '\''
+ base: '\''
+ shift: '"'
+ alt: '\''
+ shift+alt: '"'
+}
+
+key STAR {
+ label: '*'
+ number: '*'
+ base: '*'
+ shift: '*'
+ alt: '*'
+ shift+alt: '*'
+}
+
+key POUND {
+ label: '#'
+ number: '#'
+ base: '#'
+ shift: '#'
+ alt: '#'
+ shift+alt: '#'
+}
+
+key PLUS {
+ label: '+'
+ number: '+'
+ base: '+'
+ shift: '+'
+ alt: '+'
+ shift+alt: '+'
+}
diff --git a/keylayout/AVRCP.kl b/keylayout/AVRCP.kl
new file mode 100644
index 0000000..4c91ece
--- /dev/null
+++ b/keylayout/AVRCP.kl
@@ -0,0 +1,23 @@
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Key layout used for Bluetooth AVRCP support.
+
+key 200 MEDIA_PLAY_PAUSE WAKE
+key 201 MEDIA_PLAY_PAUSE WAKE
+key 166 MEDIA_STOP WAKE
+key 163 MEDIA_NEXT WAKE
+key 165 MEDIA_PREVIOUS WAKE
+key 168 MEDIA_REWIND WAKE
+key 208 MEDIA_FAST_FORWARD WAKE
diff --git a/keylayout/Generic.kl b/keylayout/Generic.kl
new file mode 100644
index 0000000..ce10504
--- /dev/null
+++ b/keylayout/Generic.kl
@@ -0,0 +1,435 @@
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Generic key layout file for full alphabetic US English PC style external keyboards.
+#
+# This file is intentionally very generic and is intended to support a broad rang of keyboards.
+# Do not edit the generic key layout to support a specific keyboard; instead, create
+# a new key layout file with the required keyboard configuration.
+#
+
+key 1 ESCAPE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 55 NUMPAD_MULTIPLY
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 69 NUM_LOCK
+key 70 SCROLL_LOCK
+key 71 NUMPAD_7
+key 72 NUMPAD_8
+key 73 NUMPAD_9
+key 74 NUMPAD_SUBTRACT
+key 75 NUMPAD_4
+key 76 NUMPAD_5
+key 77 NUMPAD_6
+key 78 NUMPAD_ADD
+key 79 NUMPAD_1
+key 80 NUMPAD_2
+key 81 NUMPAD_3
+key 82 NUMPAD_0
+key 83 NUMPAD_DOT
+# key 84 (undefined)
+# key 85 "KEY_ZENKAKUHANKAKU"
+# key 86 "KEY_102ND"
+key 87 F11
+key 88 F12
+# key 89 "KEY_RO"
+# key 90 "KEY_KATAKANA"
+# key 91 "KEY_HIRAGANA"
+# key 92 "KEY_HENKAN"
+# key 93 "KEY_KATAKANAHIRAGANA"
+# key 94 "KEY_MUHENKAN"
+key 95 NUMPAD_COMMA
+key 96 ENTER
+key 97 CTRL_RIGHT
+key 98 NUMPAD_DIVIDE
+key 99 SYSRQ
+key 100 ALT_RIGHT
+# key 101 "KEY_LINEFEED"
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 INSERT
+key 111 FORWARD_DEL
+# key 112 "KEY_MACRO"
+key 113 VOLUME_MUTE
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 116 POWER WAKE
+key 117 NUMPAD_EQUALS
+# key 118 "KEY_KPPLUSMINUS"
+key 119 BREAK
+# key 120 (undefined)
+key 121 NUMPAD_COMMA
+# key 122 "KEY_HANGEUL"
+# key 123 "KEY_HANJA"
+# key 124 "KEY_YEN"
+key 125 META_LEFT
+key 126 META_RIGHT
+key 127 MENU WAKE_DROPPED
+key 128 MEDIA_STOP
+# key 129 "KEY_AGAIN"
+# key 130 "KEY_PROPS"
+# key 131 "KEY_UNDO"
+# key 132 "KEY_FRONT"
+# key 133 "KEY_COPY"
+# key 134 "KEY_OPEN"
+# key 135 "KEY_PASTE"
+# key 136 "KEY_FIND"
+# key 137 "KEY_CUT"
+# key 138 "KEY_HELP"
+key 139 MENU WAKE_DROPPED
+# key 140 "KEY_CALC"
+# key 141 "KEY_SETUP"
+# key 142 "KEY_SLEEP"
+# key 143 "KEY_WAKEUP"
+# key 144 "KEY_FILE"
+# key 145 "KEY_SENDFILE"
+# key 146 "KEY_DELETEFILE"
+# key 147 "KEY_XFER"
+# key 148 "KEY_PROG1"
+# key 149 "KEY_PROG2"
+key 150 EXPLORER
+# key 151 "KEY_MSDOS"
+# key 152 "KEY_COFFEE"
+# key 153 "KEY_DIRECTION"
+# key 154 "KEY_CYCLEWINDOWS"
+key 155 ENVELOPE
+key 156 BOOKMARK
+# key 157 "KEY_COMPUTER"
+key 158 BACK WAKE_DROPPED
+key 159 FORWARD
+key 160 MEDIA_CLOSE
+key 161 MEDIA_EJECT
+key 162 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+key 167 MEDIA_RECORD
+key 168 MEDIA_REWIND
+key 169 CALL
+# key 170 "KEY_ISO"
+# key 171 "KEY_CONFIG"
+key 172 HOME
+# key 173 "KEY_REFRESH"
+# key 174 "KEY_EXIT"
+# key 175 "KEY_MOVE"
+# key 176 "KEY_EDIT"
+key 177 PAGE_UP
+key 178 PAGE_DOWN
+key 179 NUMPAD_LEFT_PAREN
+key 180 NUMPAD_RIGHT_PAREN
+# key 181 "KEY_NEW"
+# key 182 "KEY_REDO"
+# key 183 F13
+# key 184 F14
+# key 185 F15
+# key 186 F16
+# key 187 F17
+# key 188 F18
+# key 189 F19
+# key 190 F20
+# key 191 F21
+# key 192 F22
+# key 193 F23
+# key 194 F24
+# key 195 (undefined)
+# key 196 (undefined)
+# key 197 (undefined)
+# key 198 (undefined)
+# key 199 (undefined)
+key 200 MEDIA_PLAY
+key 201 MEDIA_PAUSE
+# key 202 "KEY_PROG3"
+# key 203 "KEY_PROG4"
+# key 204 (undefined)
+# key 205 "KEY_SUSPEND"
+# key 206 "KEY_CLOSE"
+key 207 MEDIA_PLAY
+key 208 MEDIA_FAST_FORWARD
+# key 209 "KEY_BASSBOOST"
+# key 210 "KEY_PRINT"
+# key 211 "KEY_HP"
+key 212 CAMERA
+# key 213 "KEY_SOUND"
+# key 214 "KEY_QUESTION"
+key 215 ENVELOPE
+# key 216 "KEY_CHAT"
+key 217 SEARCH
+# key 218 "KEY_CONNECT"
+# key 219 "KEY_FINANCE"
+# key 220 "KEY_SPORT"
+# key 221 "KEY_SHOP"
+# key 222 "KEY_ALTERASE"
+# key 223 "KEY_CANCEL"
+# key 224 "KEY_BRIGHTNESSDOWN"
+# key 225 "KEY_BRIGHTNESSUP"
+key 226 HEADSETHOOK
+key 227 STAR
+key 228 POUND
+key 229 SOFT_LEFT
+key 230 SOFT_RIGHT
+key 231 CALL
+key 232 DPAD_CENTER
+key 233 HEADSETHOOK
+# key 234 "KEY_0_5" or "KEY_SAVE"
+# key 235 "KEY_2_5" or "KEY_DOCUMENTS"
+# key 236 "KEY_SWITCHVIDEOMODE" or "KEY_BATTERY"
+# key 237 "KEY_KBDILLUMTOGGLE"
+# key 238 "KEY_KBDILLUMDOWN"
+# key 239 "KEY_KBDILLUMUP"
+# key 240 "KEY_UNKNOWN"
+
+key 256 BUTTON_1
+key 257 BUTTON_2
+key 258 BUTTON_3
+key 259 BUTTON_4
+key 260 BUTTON_5
+key 261 BUTTON_6
+key 262 BUTTON_7
+key 263 BUTTON_8
+key 264 BUTTON_9
+key 265 BUTTON_10
+key 266 BUTTON_11
+key 267 BUTTON_12
+key 268 BUTTON_13
+key 269 BUTTON_14
+key 270 BUTTON_15
+key 271 BUTTON_16
+
+key 288 BUTTON_1
+key 289 BUTTON_2
+key 290 BUTTON_3
+key 291 BUTTON_4
+key 292 BUTTON_5
+key 293 BUTTON_6
+key 294 BUTTON_7
+key 295 BUTTON_8
+key 296 BUTTON_9
+key 297 BUTTON_10
+key 298 BUTTON_11
+key 299 BUTTON_12
+key 300 BUTTON_13
+key 301 BUTTON_14
+key 302 BUTTON_15
+key 303 BUTTON_16
+
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 306 BUTTON_C
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 309 BUTTON_Z
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 312 BUTTON_L2
+key 313 BUTTON_R2
+key 314 BUTTON_SELECT
+key 315 BUTTON_START
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+
+# key 352 "KEY_OK"
+# key 353 "KEY_SELECT"
+# key 354 "KEY_GOTO"
+# key 355 "KEY_CLEAR"
+# key 356 "KEY_POWER2"
+# key 357 "KEY_OPTION"
+# key 358 "KEY_INFO"
+# key 359 "KEY_TIME"
+# key 360 "KEY_VENDOR"
+# key 361 "KEY_ARCHIVE"
+key 362 GUIDE
+# key 363 "KEY_CHANNEL"
+# key 364 "KEY_FAVORITES"
+# key 365 "KEY_EPG"
+key 366 DVR
+# key 367 "KEY_MHP"
+# key 368 "KEY_LANGUAGE"
+# key 369 "KEY_TITLE"
+# key 370 "KEY_SUBTITLE"
+# key 371 "KEY_ANGLE"
+# key 372 "KEY_ZOOM"
+# key 373 "KEY_MODE"
+# key 374 "KEY_KEYBOARD"
+# key 375 "KEY_SCREEN"
+# key 376 "KEY_PC"
+key 377 TV
+# key 378 "KEY_TV2"
+# key 379 "KEY_VCR"
+# key 380 "KEY_VCR2"
+# key 381 "KEY_SAT"
+# key 382 "KEY_SAT2"
+# key 383 "KEY_CD"
+# key 384 "KEY_TAPE"
+# key 385 "KEY_RADIO"
+# key 386 "KEY_TUNER"
+# key 387 "KEY_PLAYER"
+# key 388 "KEY_TEXT"
+# key 389 "KEY_DVD"
+# key 390 "KEY_AUX"
+# key 391 "KEY_MP3"
+# key 392 "KEY_AUDIO"
+# key 393 "KEY_VIDEO"
+# key 394 "KEY_DIRECTORY"
+# key 395 "KEY_LIST"
+# key 396 "KEY_MEMO"
+# key 397 "KEY_CALENDAR"
+# key 398 "KEY_RED"
+# key 399 "KEY_GREEN"
+# key 400 "KEY_YELLOW"
+# key 401 "KEY_BLUE"
+key 402 CHANNEL_UP
+key 403 CHANNEL_DOWN
+# key 404 "KEY_FIRST"
+# key 405 "KEY_LAST"
+# key 406 "KEY_AB"
+# key 407 "KEY_NEXT"
+# key 408 "KEY_RESTART"
+# key 409 "KEY_SLOW"
+# key 410 "KEY_SHUFFLE"
+# key 411 "KEY_BREAK"
+# key 412 "KEY_PREVIOUS"
+# key 413 "KEY_DIGITS"
+# key 414 "KEY_TEEN"
+# key 415 "KEY_TWEN"
+
+
+# key 448 "KEY_DEL_EOL"
+# key 449 "KEY_DEL_EOS"
+# key 450 "KEY_INS_LINE"
+# key 451 "KEY_DEL_LINE"
+
+
+key 464 FUNCTION
+key 465 ESCAPE FUNCTION
+key 466 F1 FUNCTION
+key 467 F2 FUNCTION
+key 468 F3 FUNCTION
+key 469 F4 FUNCTION
+key 470 F5 FUNCTION
+key 471 F6 FUNCTION
+key 472 F7 FUNCTION
+key 473 F8 FUNCTION
+key 474 F9 FUNCTION
+key 475 F10 FUNCTION
+key 476 F11 FUNCTION
+key 477 F12 FUNCTION
+key 478 1 FUNCTION
+key 479 2 FUNCTION
+key 480 D FUNCTION
+key 481 E FUNCTION
+key 482 F FUNCTION
+key 483 S FUNCTION
+key 484 B FUNCTION
+
+
+# key 497 KEY_BRL_DOT1
+# key 498 KEY_BRL_DOT2
+# key 499 KEY_BRL_DOT3
+# key 500 KEY_BRL_DOT4
+# key 501 KEY_BRL_DOT5
+# key 502 KEY_BRL_DOT6
+# key 503 KEY_BRL_DOT7
+# key 504 KEY_BRL_DOT8
+
+
+# Joystick and game controller axes.
+# Axes that are not mapped will be assigned generic axis numbers by the input subsystem.
+axis 0x00 X
+axis 0x01 Y
+axis 0x02 Z
+axis 0x03 RX
+axis 0x04 RY
+axis 0x05 RZ
+axis 0x06 THROTTLE
+axis 0x07 RUDDER
+axis 0x08 WHEEL
+axis 0x09 GAS
+axis 0x0a BRAKE
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_045e_Product_028e.kl b/keylayout/Vendor_045e_Product_028e.kl
new file mode 100644
index 0000000..99f046a
--- /dev/null
+++ b/keylayout/Vendor_045e_Product_028e.kl
@@ -0,0 +1,46 @@
+# Copyright (C) 2011 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# XBox 360 USB Controller
+#
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 314 BUTTON_SELECT
+key 315 BUTTON_START
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+# Left and right stick.
+# The reported value for flat is 128 out of a range from -32767 to 32768, which is absurd.
+# This confuses applications that rely on the flat value because the joystick actually
+# settles in a flat range of +/- 4096 or so.
+axis 0x00 X flat 4096
+axis 0x01 Y flat 4096
+axis 0x03 Z flat 4096
+axis 0x04 RZ flat 4096
+
+# Triggers.
+axis 0x02 LTRIGGER
+axis 0x05 RTRIGGER
+
+# Hat.
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_046d_Product_c216.kl b/keylayout/Vendor_046d_Product_c216.kl
new file mode 100644
index 0000000..6743323
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_c216.kl
@@ -0,0 +1,37 @@
+# Copyright (C) 2011 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Logitech Dual Action Controller
+#
+
+key 0x120 BUTTON_A
+key 0x123 BUTTON_B
+key 0x121 BUTTON_X
+key 0x122 BUTTON_Y
+key 0x124 BUTTON_L1
+key 0x125 BUTTON_R1
+key 0x126 BUTTON_L2
+key 0x127 BUTTON_R2
+key 0x128 BUTTON_SELECT
+key 0x129 BUTTON_START
+key 0x12a BUTTON_THUMBL
+key 0x12b BUTTON_THUMBR
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x02 Z
+axis 0x05 RZ
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
diff --git a/keylayout/Vendor_046d_Product_c294.kl b/keylayout/Vendor_046d_Product_c294.kl
new file mode 100644
index 0000000..5492f49
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_c294.kl
@@ -0,0 +1,53 @@
+# Copyright (C) 2011 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Logitech G25 Racing Wheel (in Compatibility Mode)
+#
+
+# 4 way buttons above hat
+key 0x121 BUTTON_A
+key 0x123 BUTTON_B
+key 0x120 BUTTON_X
+key 0x122 BUTTON_Y
+
+# Row of buttons under hat
+key 0x12b BUTTON_1
+key 0x128 BUTTON_2
+key 0x129 BUTTON_3
+key 0x12a BUTTON_4
+
+# Gear shift positions
+# 0x12a top-left gear (aliased as BUTTON_4)
+# 0x12b bottom-left gear (aliased as BUTTON_1)
+
+# Buttons on wheel
+key 0x127 BUTTON_L1
+key 0x126 BUTTON_R1
+
+# Toggles under wheel
+key 0x125 BUTTON_L2
+key 0x124 BUTTON_R2
+
+# Hat
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
+
+# Steering Wheel
+axis 0x00 WHEEL
+
+# Accelerator / Brake
+# 00..7e : accelerator
+# 80..ff : brake
+axis 0x01 split 0x7f GAS BRAKE
diff --git a/keylayout/Vendor_046d_Product_c299.kl b/keylayout/Vendor_046d_Product_c299.kl
new file mode 100644
index 0000000..d42963d
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_c299.kl
@@ -0,0 +1,62 @@
+# Copyright (C) 2011 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Logitech G25 Racing Wheel (in Native Mode)
+#
+
+# 4 way buttons above hat
+key 0x121 BUTTON_A
+key 0x123 BUTTON_B
+key 0x120 BUTTON_X
+key 0x122 BUTTON_Y
+
+# Row of buttons under hat
+key 0x12b BUTTON_1
+key 0x128 BUTTON_2
+key 0x129 BUTTON_3
+key 0x12a BUTTON_4
+
+# Gear shift positions
+key 0x12c BUTTON_5
+key 0x12d BUTTON_6
+key 0x12e BUTTON_7
+key 0x12f BUTTON_8
+key 0x2d0 BUTTON_9
+key 0x2d1 BUTTON_10
+key 0x2d2 BUTTON_11
+
+# Buttons on wheel
+key 0x127 BUTTON_L1
+key 0x126 BUTTON_R1
+
+# Toggles under wheel
+key 0x125 BUTTON_L2
+key 0x124 BUTTON_R2
+
+# Hat
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
+
+# Steering Wheel
+axis 0x00 WHEEL
+
+# Clutch
+axis 0x01 invert GENERIC_1
+
+# Accelerator
+axis 0x02 invert GAS
+
+# Brake
+axis 0x05 invert BRAKE
diff --git a/keylayout/Vendor_046d_Product_c532.kl b/keylayout/Vendor_046d_Product_c532.kl
new file mode 100644
index 0000000..741c2e1
--- /dev/null
+++ b/keylayout/Vendor_046d_Product_c532.kl
@@ -0,0 +1,133 @@
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Logitech Revue Wireless keyboard
+#
+# Notes:
+# - The GRAVE key is emulated by the keyboard.
+# ALT + LEFT_BRACKET produces GRAVE.
+# ALT + RIGHT_BRACKET produces SHIFT + GRAVE.
+# - FORWARD_DEL is produced by fn + BACKSPACE
+# - PAGE_UP / PAGE_DOWN is produced by fn + CHANNEL_UP / CHANNEL_DOWN
+# - The AVR / STB / TV power and input buttons seem to be non-functional
+# as well as several of the other fn buttons and the PIP button?
+
+key 1 ESCAPE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 56 ALT_RIGHT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 87 F11
+key 88 F12
+key 96 DPAD_CENTER
+key 97 CTRL_RIGHT
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 NUMPAD_ENTER
+key 111 FORWARD_DEL
+key 113 VOLUME_MUTE
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 119 MEDIA_PAUSE
+key 125 SEARCH
+key 127 MENU
+key 156 BOOKMARK
+key 158 BACK
+key 163 MEDIA_NEXT
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+key 167 MEDIA_RECORD
+key 168 MEDIA_REWIND
+key 172 HOME
+key 207 MEDIA_PLAY
+key 208 MEDIA_FAST_FORWARD
+# key 288 left mouse button
+# key 289 right mouse button (fn + button)
+key 362 GUIDE
+key 366 DVR
+key 377 TV
+key 402 CHANNEL_UP
+key 403 CHANNEL_DOWN
+key 418 ZOOM_IN
+key 419 ZOOM_OUT
+
diff --git a/keylayout/Vendor_054c_Product_0268.kl b/keylayout/Vendor_054c_Product_0268.kl
new file mode 100644
index 0000000..f8ac6a3
--- /dev/null
+++ b/keylayout/Vendor_054c_Product_0268.kl
@@ -0,0 +1,76 @@
+# Copyright (C) 2011 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Sony Playstation(R)3 Controller
+#
+
+key 0x124 DPAD_UP
+key 0x125 DPAD_RIGHT
+key 0x126 DPAD_DOWN
+key 0x127 DPAD_LEFT
+
+key 0x120 BUTTON_SELECT
+key 0x123 BUTTON_START
+key 0x12f BUTTON_A
+key 0x12c BUTTON_B
+key 0x12e BUTTON_X
+key 0x12d BUTTON_Y
+key 0x12a BUTTON_L1
+key 0x12b BUTTON_R1
+key 0x128 BUTTON_L2
+key 0x129 BUTTON_R2
+key 0x121 BUTTON_THUMBL
+key 0x122 BUTTON_THUMBR
+
+# PS key
+key 0x2d0 BUTTON_1
+
+# Left Analog Stick
+axis 0x00 X
+axis 0x01 Y
+
+# Right Analog Stick
+axis 0x02 Z
+axis 0x05 RZ
+
+# DPAD
+# axis 0x2c -HAT_Y
+# axis 0x2d +HAT_X
+# axis 0x2e +HAT_Y
+# axis 0x2f -HAT_X
+
+# L2 trigger
+axis 0x30 LTRIGGER
+
+# R2 trigger
+axis 0x31 RTRIGGER
+
+# L1 trigger
+# axis 0x32
+
+# R1 trigger
+# axis 0x33
+
+# Triangle
+# axis 0x34
+
+# Circle
+# axis 0x35
+
+# Cross
+# axis 0x36
+
+# Square
+# axis 0x37
diff --git a/keylayout/Vendor_05ac_Product_0239.kl b/keylayout/Vendor_05ac_Product_0239.kl
new file mode 100644
index 0000000..6bd3753
--- /dev/null
+++ b/keylayout/Vendor_05ac_Product_0239.kl
@@ -0,0 +1,119 @@
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Apple Wireless Keyboard
+#
+# Notes:
+# - Keys such as PAGE_UP and FORWARD_DEL are produced using the
+# function key.
+# - Special function keys for brightness control, etc. are not
+# implemented here.
+
+key 1 ESCAPE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 87 F11
+key 88 F12
+key 100 ALT_RIGHT
+key 102 MOVE_HOME
+key 103 DPAD_UP
+key 104 PAGE_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 109 PAGE_DOWN
+key 110 NUMPAD_ENTER
+key 111 FORWARD_DEL
+key 113 VOLUME_MUTE
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 120 APP_SWITCH
+key 125 META_LEFT
+key 126 META_RIGHT
+key 161 MEDIA_EJECT
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+# key 204 show gadgets
+# key 224 reduce brightness
+# key 225 increase brightness
+# key 229 blank special function on F5
+# key 230 blank special function on F6
+key 464 FUNCTION
diff --git a/keylayout/Vendor_22b8_Product_093d.kl b/keylayout/Vendor_22b8_Product_093d.kl
new file mode 100644
index 0000000..2749c5b
--- /dev/null
+++ b/keylayout/Vendor_22b8_Product_093d.kl
@@ -0,0 +1,105 @@
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Motorola Bluetooth Wireless Keyboard.
+#
+
+key 1 BACK
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 12 MINUS
+key 13 EQUALS
+key 14 DEL
+key 15 TAB
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 28 ENTER
+key 29 CTRL_LEFT
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 41 GRAVE
+key 42 SHIFT_LEFT
+key 43 BACKSLASH
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 54 SHIFT_RIGHT
+key 56 ALT_LEFT
+key 57 SPACE
+key 58 CAPS_LOCK
+key 59 F1
+key 60 F2
+key 61 F3
+key 62 F4
+key 63 F5
+key 64 F6
+key 65 F7
+key 66 F8
+key 67 F9
+key 68 F10
+key 87 F11
+key 88 F12
+key 97 CTRL_RIGHT
+key 102 HOME
+key 103 DPAD_UP
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 107 MOVE_END
+key 108 DPAD_DOWN
+key 111 FORWARD_DEL
+key 113 VOLUME_MUTE
+key 114 VOLUME_DOWN
+key 115 VOLUME_UP
+key 125 MENU
+key 127 SEARCH
+key 163 MEDIA_NEXT
+key 164 MEDIA_PLAY_PAUSE
+key 165 MEDIA_PREVIOUS
+key 166 MEDIA_STOP
+# key 226 tbd reserved key
diff --git a/keylayout/asusec.kl b/keylayout/asusec.kl
new file mode 100644
index 0000000..2d7e164
--- /dev/null
+++ b/keylayout/asusec.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
diff --git a/keylayout/gpio-keys.kl b/keylayout/gpio-keys.kl
new file mode 100644
index 0000000..378f460
--- /dev/null
+++ b/keylayout/gpio-keys.kl
@@ -0,0 +1,7 @@
+key 136 SEARCH WAKE_DROPPED
+key 139 MENU WAKE
+key 102 HOME WAKE
+key 158 BACK WAKE_DROPPED
+key 116 POWER WAKE
+key 115 VOLUME_UP WAKE_DROPPED
+key 114 VOLUME_DOWN WAKE_DROPPED
diff --git a/keylayout/qwerty.kl b/keylayout/qwerty.kl
new file mode 100644
index 0000000..f1caacd
--- /dev/null
+++ b/keylayout/qwerty.kl
@@ -0,0 +1,112 @@
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Emulator keyboard layout #1.
+#
+# This file is no longer used as the platform's default keyboard layout.
+# Refer to Generic.kl instead.
+#
+
+key 399 GRAVE
+key 2 1
+key 3 2
+key 4 3
+key 5 4
+key 6 5
+key 7 6
+key 8 7
+key 9 8
+key 10 9
+key 11 0
+key 158 BACK WAKE_DROPPED
+key 230 SOFT_RIGHT WAKE
+key 60 SOFT_RIGHT WAKE
+key 107 ENDCALL WAKE_DROPPED
+key 62 ENDCALL WAKE_DROPPED
+key 229 MENU WAKE_DROPPED
+key 139 MENU WAKE_DROPPED
+key 59 MENU WAKE_DROPPED
+key 127 SEARCH WAKE_DROPPED
+key 217 SEARCH WAKE_DROPPED
+key 228 POUND
+key 227 STAR
+key 231 CALL WAKE_DROPPED
+key 61 CALL WAKE_DROPPED
+key 232 DPAD_CENTER WAKE_DROPPED
+key 108 DPAD_DOWN WAKE_DROPPED
+key 103 DPAD_UP WAKE_DROPPED
+key 102 HOME WAKE
+key 105 DPAD_LEFT WAKE_DROPPED
+key 106 DPAD_RIGHT WAKE_DROPPED
+key 115 VOLUME_UP WAKE
+key 114 VOLUME_DOWN WAKE
+key 116 POWER WAKE
+key 212 CAMERA
+
+key 16 Q
+key 17 W
+key 18 E
+key 19 R
+key 20 T
+key 21 Y
+key 22 U
+key 23 I
+key 24 O
+key 25 P
+key 26 LEFT_BRACKET
+key 27 RIGHT_BRACKET
+key 43 BACKSLASH
+
+key 30 A
+key 31 S
+key 32 D
+key 33 F
+key 34 G
+key 35 H
+key 36 J
+key 37 K
+key 38 L
+key 39 SEMICOLON
+key 40 APOSTROPHE
+key 14 DEL
+
+key 44 Z
+key 45 X
+key 46 C
+key 47 V
+key 48 B
+key 49 N
+key 50 M
+key 51 COMMA
+key 52 PERIOD
+key 53 SLASH
+key 28 ENTER
+
+key 56 ALT_LEFT
+key 100 ALT_RIGHT
+key 42 SHIFT_LEFT
+key 54 SHIFT_RIGHT
+key 15 TAB
+key 57 SPACE
+key 150 EXPLORER
+key 155 ENVELOPE
+
+key 12 MINUS
+key 13 EQUALS
+key 215 AT
+
+# On an AT keyboard: ESC, F10
+key 1 BACK WAKE_DROPPED
+key 68 MENU WAKE_DROPPED
diff --git a/xt9/config/databases.conf b/xt9/config/databases.conf
new file mode 100644
index 0000000..d2cda54
--- /dev/null
+++ b/xt9/config/databases.conf
@@ -0,0 +1,116 @@
+
+##
+## Keyboard and language databases configure file. This file map keyboard and laguage IDs to the actual
+## physical path
+
+##
+## Keyboard database mapping. Although keyboard datatase ID can be formated any form as long as the ID
+## matches the ID defined within the keyboard file. However for easy understanding and having a standard, we compose
+## the keyboard ID as follow;
+## YYZZ -- two bytes hex digits encoding for keyboard databases
+## YY -- one byte defines the keyboard layout
+## 06 -- Phonepad (12-keys)
+## 07 -- Qwertz (use by View when current locale is German)
+## 08 -- Azerty (use by View when current locale is French)
+## 09 -- Qwerty
+## 0A -- Reduced qwerty
+## 0B -- Reduced azerty
+## 0C -- Reduced qwertz
+##
+## ZZ -- one byte define language ID
+## FF -- indicates language independent, meaning can be use as a default keyboard database
+## Example:
+## 0x09FF - Language independent qwerty keyboard database
+## 0x0919 - Russian qwerty keyboard database
+## 0x09FF - French qwerty keyboard
+## 0x08FF - French azerty keyboard
+## 0x0BFF - French reduced azerty keyboard
+## 0x07FF - German Qwertz
+## 0x0CFF - German reduced Qwertz keyboard
+
+[kdb]
+# Regional qwerty keyboard database that is use by most alphabetic languages. This is the default qwerty keyboard
+# database use if we could not find a match ID/keyboard database file
+0x09FF /system/usr/xt9/databases/kdb/qwerty.english.center.kdb
+0x07FF /system/usr/xt9/databases/kdb/qwertz.german.center.kdb
+0x08FF /system/usr/xt9/databases/kdb/azerty.french.center.kdb
+0x0A04 /system/usr/xt9/databases/kdb/ZHhpd_pinyin_bpmf_stroke_cangjie.kdb
+0x0919 /system/usr/xt9/databases/kdb/qwerty.russian.center.kdb
+0x0908 /system/usr/xt9/databases/kdb/qwerty.greek.center.kdb
+0x090d /system/usr/xt9/databases/kdb/qwerty.hebrew.center.kdb
+0x0901 /system/usr/xt9/databases/kdb/qwerty.arabic.center.kdb
+0x091E /system/usr/xt9/databases/kdb/qwerty.thai.center.kdb
+0x0912 /system/usr/xt9/databases/kdb/kohqd.kdb
+
+## Language datbases mapping. Two bytes hex digits encoding
+[ldb]
+0x0109 /system/usr/xt9/databases/ldb/ENubUN_xt9_2.ldb
+0x010C /system/usr/xt9/databases/ldb/FRusUN_xt9_2.ldb
+0x0107 /system/usr/xt9/databases/ldb/DEusUN_xt9_2.ldb
+0x010A /system/usr/xt9/databases/ldb/ESusUN_xt9_2.ldb
+0x0110 /system/usr/xt9/databases/ldb/ITusUN_xt9_2.ldb
+0x0113 /system/usr/xt9/databases/ldb/NLlsUN_xt9_2.ldb
+0x0119 /system/usr/xt9/databases/ldb/RUlsUN_xt9_2.ldb
+0x0106 /system/usr/xt9/databases/ldb/DAusUN_xt9.ldb
+0x0116 /system/usr/xt9/databases/ldb/PTusUN_xt9.ldb
+0x010b /system/usr/xt9/databases/ldb/FIusUN_xt9_2.ldb
+0x011d /system/usr/xt9/databases/ldb/SVusUN_xt9.ldb
+0x0114 /system/usr/xt9/databases/ldb/NOlsUN_xt9.ldb
+0x0105 /system/usr/xt9/databases/ldb/CSlsUN_xt9.ldb
+0x0115 /system/usr/xt9/databases/ldb/PLlsUN_xt9.ldb
+0x011f /system/usr/xt9/databases/ldb/TRlsUN_xt9.ldb
+0x0108 /system/usr/xt9/databases/ldb/ELlsUN_xt9.ldb
+0x011b /system/usr/xt9/databases/ldb/SKlsUN_xt9.ldb
+0x010E /system/usr/xt9/databases/ldb/HUlsUN_xt9.ldb
+0x0101 /system/usr/xt9/databases/ldb/ARlsUN_xt9.ldb
+0x010D /system/usr/xt9/databases/ldb/HElsUN_xt9.ldb
+0x011E /system/usr/xt9/databases/ldb/THlsUN_xt9.ldb
+0x00E0 /system/usr/xt9/databases/ldb/ZHtbUNps_Big5_bpmf_pinyin_CJ_xt9.ldb
+0x00E1 /system/usr/xt9/databases/ldb/ZHsbUNps_GB2312_xt9.ldb
+
+##
+# Decuma hwr dictionaries. use if present, otherwise will convert xt9 ldb to t9write dictionary at run time
+[hwr_dic]
+## If HWR dictionary is not specified, we'll use the xt9 ldb and convert to t9 write dictionary at runtime
+##0x0109 /system/usr/xt9/databases/hwr/Alpha/english_xt9_le.dat
+##0x01FF /system/usr/xt9/databases/hwr/Alpha/english_xt9_le.dat
+
+##
+# Decuma hwr template databases
+[hwr_db_template]
+0x0109 /system/usr/xt9/databases/hwr/Alpha/database_le.dat
+0x01FF /system/usr/xt9/databases/hwr/Alpha/database_le.dat
+0x00E1 /system/usr/xt9/databases/hwr/PRC/dltsdb.dat
+0x00E0 /system/usr/xt9/databases/hwr/TW/dlttdb.dat
+
+##
+## Manufacturer Database - a supplementary word list that may be added by OEMs.
+## If it exists, xt9 will read and supply the words alongside LDB words in the
+## selection list.
+##
+## Format: UTF8 text, line delimited (*NIX line breaks)
+[mdb]
+0x0109 /system/usr/xt9/databases/mdb/EN.txt
+0x010C /system/usr/xt9/databases/mdb/FR.txt
+0x0107 /system/usr/xt9/databases/mdb/DE.txt
+0x010A /system/usr/xt9/databases/mdb/ES.txt
+0x0110 /system/usr/xt9/databases/mdb/IT.txt
+
+##
+## User Dictionary. Words are added user dictionary if they are not in our LDB nor MDB. File is created at run time.
+##
+[udb]
+0x00FF /data/data/com.nuance.xt9.input/udb.bin
+0x00E0 /data/data/com.nuance.xt9.input/chinese_trad_udb.bin
+0x00E1 /data/data/com.nuance.xt9.input/chinese_simp_udb.bin
+
+##
+## Auto-substibution database. Create at run time.
+[asdb]
+0x00FF /data/data/com.nuance.xt9.input/asdb.bin
+
+##
+## Cdb
+[cdb]
+0x00FF /data/data/com.nuance.xt9.input/cdb.bin
+
diff --git a/xt9/databases/hwr/PRC/dltsdb.dat b/xt9/databases/hwr/PRC/dltsdb.dat
new file mode 100644
index 0000000..d4cf633
--- /dev/null
+++ b/xt9/databases/hwr/PRC/dltsdb.dat
Binary files differ
diff --git a/xt9/databases/hwr/TW/dlttdb.dat b/xt9/databases/hwr/TW/dlttdb.dat
new file mode 100644
index 0000000..adad96d
--- /dev/null
+++ b/xt9/databases/hwr/TW/dlttdb.dat
Binary files differ
diff --git a/xt9/databases/kdb/ZHhpd_pinyin_bpmf_stroke_cangjie.kdb b/xt9/databases/kdb/ZHhpd_pinyin_bpmf_stroke_cangjie.kdb
new file mode 100644
index 0000000..e93b182
--- /dev/null
+++ b/xt9/databases/kdb/ZHhpd_pinyin_bpmf_stroke_cangjie.kdb
Binary files differ
diff --git a/xt9/databases/kdb/azerty.french.center.kdb b/xt9/databases/kdb/azerty.french.center.kdb
new file mode 100644
index 0000000..abd617d
--- /dev/null
+++ b/xt9/databases/kdb/azerty.french.center.kdb
Binary files differ
diff --git a/xt9/databases/kdb/kohqd.kdb b/xt9/databases/kdb/kohqd.kdb
new file mode 100644
index 0000000..0d8bc24
--- /dev/null
+++ b/xt9/databases/kdb/kohqd.kdb
Binary files differ
diff --git a/xt9/databases/kdb/qwerty.arabic.center.kdb b/xt9/databases/kdb/qwerty.arabic.center.kdb
new file mode 100644
index 0000000..3eb912e
--- /dev/null
+++ b/xt9/databases/kdb/qwerty.arabic.center.kdb
Binary files differ
diff --git a/xt9/databases/kdb/qwerty.english.center.kdb b/xt9/databases/kdb/qwerty.english.center.kdb
new file mode 100644
index 0000000..6cde87c
--- /dev/null
+++ b/xt9/databases/kdb/qwerty.english.center.kdb
Binary files differ
diff --git a/xt9/databases/kdb/qwerty.greek.center.kdb b/xt9/databases/kdb/qwerty.greek.center.kdb
new file mode 100644
index 0000000..f5b5a5e
--- /dev/null
+++ b/xt9/databases/kdb/qwerty.greek.center.kdb
Binary files differ
diff --git a/xt9/databases/kdb/qwerty.hebrew.center.kdb b/xt9/databases/kdb/qwerty.hebrew.center.kdb
new file mode 100644
index 0000000..54fcc14
--- /dev/null
+++ b/xt9/databases/kdb/qwerty.hebrew.center.kdb
Binary files differ
diff --git a/xt9/databases/kdb/qwerty.russian.center.kdb b/xt9/databases/kdb/qwerty.russian.center.kdb
new file mode 100644
index 0000000..4aefbc1
--- /dev/null
+++ b/xt9/databases/kdb/qwerty.russian.center.kdb
Binary files differ
diff --git a/xt9/databases/kdb/qwerty.thai.center.kdb b/xt9/databases/kdb/qwerty.thai.center.kdb
new file mode 100644
index 0000000..f250550
--- /dev/null
+++ b/xt9/databases/kdb/qwerty.thai.center.kdb
Binary files differ
diff --git a/xt9/databases/kdb/qwertz.german.center.kdb b/xt9/databases/kdb/qwertz.german.center.kdb
new file mode 100644
index 0000000..f48eb8a
--- /dev/null
+++ b/xt9/databases/kdb/qwertz.german.center.kdb
Binary files differ
diff --git a/xt9/databases/ldb/ARlsUN_xt9.ldb b/xt9/databases/ldb/ARlsUN_xt9.ldb
new file mode 100644
index 0000000..db5ebe4
--- /dev/null
+++ b/xt9/databases/ldb/ARlsUN_xt9.ldb
Binary files differ
diff --git a/xt9/databases/ldb/CSlsUN_xt9.ldb b/xt9/databases/ldb/CSlsUN_xt9.ldb
new file mode 100644
index 0000000..fb889a4
--- /dev/null
+++ b/xt9/databases/ldb/CSlsUN_xt9.ldb
Binary files differ
diff --git a/xt9/databases/ldb/DAusUN_xt9.ldb b/xt9/databases/ldb/DAusUN_xt9.ldb
new file mode 100644
index 0000000..a1d2468
--- /dev/null
+++ b/xt9/databases/ldb/DAusUN_xt9.ldb
Binary files differ
diff --git a/xt9/databases/ldb/DEusUN_xt9_2.ldb b/xt9/databases/ldb/DEusUN_xt9_2.ldb
new file mode 100644
index 0000000..e4d05bd
--- /dev/null
+++ b/xt9/databases/ldb/DEusUN_xt9_2.ldb
Binary files differ
diff --git a/xt9/databases/ldb/ELlsUN_xt9.ldb b/xt9/databases/ldb/ELlsUN_xt9.ldb
new file mode 100644
index 0000000..7bc91a6
--- /dev/null
+++ b/xt9/databases/ldb/ELlsUN_xt9.ldb
Binary files differ
diff --git a/xt9/databases/ldb/ENubUN_xt9_2.ldb b/xt9/databases/ldb/ENubUN_xt9_2.ldb
new file mode 100644
index 0000000..8bc7f14
--- /dev/null
+++ b/xt9/databases/ldb/ENubUN_xt9_2.ldb
Binary files differ
diff --git a/xt9/databases/ldb/ESusUN_xt9_2.ldb b/xt9/databases/ldb/ESusUN_xt9_2.ldb
new file mode 100644
index 0000000..186059c
--- /dev/null
+++ b/xt9/databases/ldb/ESusUN_xt9_2.ldb
Binary files differ
diff --git a/xt9/databases/ldb/FIusUN_xt9_2.ldb b/xt9/databases/ldb/FIusUN_xt9_2.ldb
new file mode 100644
index 0000000..401041a
--- /dev/null
+++ b/xt9/databases/ldb/FIusUN_xt9_2.ldb
Binary files differ
diff --git a/xt9/databases/ldb/FRusUN_xt9_2.ldb b/xt9/databases/ldb/FRusUN_xt9_2.ldb
new file mode 100644
index 0000000..193576c
--- /dev/null
+++ b/xt9/databases/ldb/FRusUN_xt9_2.ldb
Binary files differ
diff --git a/xt9/databases/ldb/HElsUN_xt9.ldb b/xt9/databases/ldb/HElsUN_xt9.ldb
new file mode 100644
index 0000000..5ff1577
--- /dev/null
+++ b/xt9/databases/ldb/HElsUN_xt9.ldb
Binary files differ
diff --git a/xt9/databases/ldb/HUlsUN_xt9.ldb b/xt9/databases/ldb/HUlsUN_xt9.ldb
new file mode 100644
index 0000000..6a24c72
--- /dev/null
+++ b/xt9/databases/ldb/HUlsUN_xt9.ldb
Binary files differ
diff --git a/xt9/databases/ldb/ITusUN_xt9_2.ldb b/xt9/databases/ldb/ITusUN_xt9_2.ldb
new file mode 100644
index 0000000..7a1b1e7
--- /dev/null
+++ b/xt9/databases/ldb/ITusUN_xt9_2.ldb
Binary files differ
diff --git a/xt9/databases/ldb/NLlsUN_xt9_2.ldb b/xt9/databases/ldb/NLlsUN_xt9_2.ldb
new file mode 100644
index 0000000..f982f89
--- /dev/null
+++ b/xt9/databases/ldb/NLlsUN_xt9_2.ldb
Binary files differ
diff --git a/xt9/databases/ldb/NOlsUN_xt9.ldb b/xt9/databases/ldb/NOlsUN_xt9.ldb
new file mode 100644
index 0000000..c93bacc
--- /dev/null
+++ b/xt9/databases/ldb/NOlsUN_xt9.ldb
Binary files differ
diff --git a/xt9/databases/ldb/PLlsUN_xt9.ldb b/xt9/databases/ldb/PLlsUN_xt9.ldb
new file mode 100644
index 0000000..dffc782
--- /dev/null
+++ b/xt9/databases/ldb/PLlsUN_xt9.ldb
Binary files differ
diff --git a/xt9/databases/ldb/PTusUN_xt9.ldb b/xt9/databases/ldb/PTusUN_xt9.ldb
new file mode 100644
index 0000000..1dfe6fd
--- /dev/null
+++ b/xt9/databases/ldb/PTusUN_xt9.ldb
Binary files differ
diff --git a/xt9/databases/ldb/RUlsUN_xt9_2.ldb b/xt9/databases/ldb/RUlsUN_xt9_2.ldb
new file mode 100644
index 0000000..078e64e
--- /dev/null
+++ b/xt9/databases/ldb/RUlsUN_xt9_2.ldb
Binary files differ
diff --git a/xt9/databases/ldb/SKlsUN_xt9.ldb b/xt9/databases/ldb/SKlsUN_xt9.ldb
new file mode 100644
index 0000000..581c8b7
--- /dev/null
+++ b/xt9/databases/ldb/SKlsUN_xt9.ldb
Binary files differ
diff --git a/xt9/databases/ldb/SVusUN_xt9.ldb b/xt9/databases/ldb/SVusUN_xt9.ldb
new file mode 100644
index 0000000..1029ad9
--- /dev/null
+++ b/xt9/databases/ldb/SVusUN_xt9.ldb
Binary files differ
diff --git a/xt9/databases/ldb/THlsUN_xt9.ldb b/xt9/databases/ldb/THlsUN_xt9.ldb
new file mode 100644
index 0000000..020f018
--- /dev/null
+++ b/xt9/databases/ldb/THlsUN_xt9.ldb
Binary files differ
diff --git a/xt9/databases/ldb/TRlsUN_xt9.ldb b/xt9/databases/ldb/TRlsUN_xt9.ldb
new file mode 100644
index 0000000..05c3961
--- /dev/null
+++ b/xt9/databases/ldb/TRlsUN_xt9.ldb
Binary files differ
diff --git a/xt9/databases/ldb/ZHsbUNps_GB2312_xt9.ldb b/xt9/databases/ldb/ZHsbUNps_GB2312_xt9.ldb
new file mode 100644
index 0000000..f171ac5
--- /dev/null
+++ b/xt9/databases/ldb/ZHsbUNps_GB2312_xt9.ldb
Binary files differ
diff --git a/xt9/databases/ldb/ZHtbUNps_Big5_bpmf_pinyin_CJ_xt9.ldb b/xt9/databases/ldb/ZHtbUNps_Big5_bpmf_pinyin_CJ_xt9.ldb
new file mode 100644
index 0000000..b9afe57
--- /dev/null
+++ b/xt9/databases/ldb/ZHtbUNps_Big5_bpmf_pinyin_CJ_xt9.ldb
Binary files differ
diff --git a/xt9/databases/mdb/DE.txt b/xt9/databases/mdb/DE.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/xt9/databases/mdb/DE.txt
@@ -0,0 +1 @@
+
diff --git a/xt9/databases/mdb/EN.txt b/xt9/databases/mdb/EN.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/xt9/databases/mdb/EN.txt
diff --git a/xt9/databases/mdb/ES.txt b/xt9/databases/mdb/ES.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/xt9/databases/mdb/ES.txt
@@ -0,0 +1 @@
+
diff --git a/xt9/databases/mdb/FR.txt b/xt9/databases/mdb/FR.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/xt9/databases/mdb/FR.txt
@@ -0,0 +1 @@
+
diff --git a/xt9/databases/mdb/IT.txt b/xt9/databases/mdb/IT.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/xt9/databases/mdb/IT.txt
@@ -0,0 +1 @@
+
diff --git a/xt9/keychars/qwerty-ar_EG.kcm b/xt9/keychars/qwerty-ar_EG.kcm
new file mode 100644
index 0000000..5af383f
--- /dev/null
+++ b/xt9/keychars/qwerty-ar_EG.kcm
@@ -0,0 +1,355 @@
+type FULL
+
+key GRAVE {
+ label, number: '\u0630'
+ base: '\u0630'
+ shift: '\u0651'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '\u0661'
+ base: '\u0661'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '\u0662'
+ base: '\u0662'
+ shift: '@'
+ alt, ctrl, meta: none
+}
+
+key 3 {
+ label, number: '\u0663'
+ base: '\u0663'
+ shift: '#'
+ alt, ctrl, meta: none
+}
+
+key 4 {
+ label, number: '\u0664'
+ base: '\u0664'
+ shift: '$'
+ alt, ctrl, meta: none
+}
+
+key 5 {
+ label, number: '\u0665'
+ base: '\u0665'
+ shift: '%'
+ alt, ctrl, meta: none
+}
+
+key 6 {
+ label, number: '\u0666'
+ base: '\u0666'
+ shift: '^'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '\u0667'
+ base: '\u0667'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '\u0668'
+ base: '\u0668'
+ shift: '*'
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '\u0669'
+ base: '\u0669'
+ shift: '('
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '\u0660'
+ base: '\u0660'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label, number: '\u0636'
+ base: '\u0636'
+ shift: '\u064e'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label, number: '\u0635'
+ base: '\u0635'
+ shift: '\u064b'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label, number: '\u062b'
+ base: '\u062b'
+ shift: '\u064f'
+ alt, ctrl, meta: none
+}
+
+key R {
+ label, number: '\u0642'
+ base: '\u0642'
+ shift: '\u064c'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label, number: '\u0641'
+ base: '\u0641'
+ shift: '\ufef9'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label, number: '\u063a'
+ base: '\u063a'
+ shift: '\u0625'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label, number: '\u0639'
+ base: '\u0639'
+ shift: '\u2018'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label, number: '\u0647'
+ base: '\u0647'
+ shift: '\u00f7'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label, number: '\u062e'
+ base: '\u062e'
+ shift: '\u00d7'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label, number: '\u062d'
+ base: '\u062d'
+ shift: '\u061b'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '\u062c'
+ base: '\u062c'
+ shift: '<'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '\u062f'
+ base: '\u062f'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
+
+key A {
+ label, number: '\u0634'
+ base: '\u0634'
+ shift: '\u0650'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label, number: '\u0633'
+ base: '\u0633'
+ shift: '\u064d'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label, number: '\u064a'
+ base: '\u064a'
+ shift: '['
+ alt, ctrl, meta: none
+}
+
+key F {
+ label, number: '\u0628'
+ base: '\u0628'
+ shift: ']'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label, number: '\u0644'
+ base: '\u0644'
+ shift: '\ufef7'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label, number: '\u0627'
+ base: '\u0627'
+ shift: '\u0623'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label, number: '\u062a'
+ base: '\u062a'
+ shift: '\u0640'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label, number: '\u0646'
+ base: '\u0646'
+ shift: '\u060c'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label, number: '\u0645'
+ base: '\u0645'
+ shift: '/'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: '\u0643'
+ base: '\u0643'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\u0637'
+ base: '\u0637'
+ shift: '"'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label, number: '\u0626'
+ base: '\u0626'
+ shift: '~'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label, number: '\u0621'
+ base: '\u0621'
+ shift: '\u0652'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label, number: '\u0624'
+ base: '\u0624'
+ shift: '{'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label, number: '\u0631'
+ base: '\u0631'
+ shift: '}'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label, number: '\ufefb'
+ base: '\ufefb'
+ shift: '\ufef5'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label, number: '\u0649'
+ base: '\u0649'
+ shift: '\u0622'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label, number: '\u0629'
+ base: '\u0629'
+ shift: '\u2019'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: '\u0648'
+ base: '\u0648'
+ shift: ','
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '\u0632'
+ base: '\u0632'
+ shift: '.'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '\u0638'
+ base: '\u0638'
+ shift: '\u061f'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-cs_CZ.kcm b/xt9/keychars/qwerty-cs_CZ.kcm
new file mode 100644
index 0000000..68acbd9
--- /dev/null
+++ b/xt9/keychars/qwerty-cs_CZ.kcm
@@ -0,0 +1,547 @@
+type FULL
+
+key GRAVE {
+ label, number: ';'
+ base: ';'
+ shift: '\u030a'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '+'
+ base: '+'
+ shift: '1'
+ alt: '~'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 2 {
+ label, number: '\u011b'
+ base: '\u011b'
+ shift: '2'
+ capslock: '\u011a'
+ alt: '\u030c'
+ alt+shift: none
+ capslock+alt: '\u030c'
+ capslock+shift: '2'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '\u0161'
+ base: '\u0161'
+ shift: '3'
+ capslock: '\u0160'
+ alt: '\u0302'
+ alt+shift: none
+ capslock+alt: '\u0302'
+ capslock+shift: '3'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '\u010d'
+ base: '\u010d'
+ shift: '4'
+ capslock: '\u010c'
+ alt: '\u0306'
+ alt+shift: none
+ capslock+alt: '\u0306'
+ capslock+shift: '4'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '\u0159'
+ base: '\u0159'
+ shift: '5'
+ capslock: '\u0158'
+ alt: '\u030a'
+ alt+shift: none
+ capslock+alt: '\u030a'
+ capslock+shift: '5'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '\u017e'
+ base: '\u017e'
+ shift: '6'
+ capslock: '\u017d'
+ alt: '\u0328'
+ alt+shift: none
+ capslock+alt: '\u0328'
+ capslock+shift: '6'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 7 {
+ label, number: '\u00fd'
+ base: '\u00fd'
+ shift: '7'
+ capslock: '\u00dd'
+ alt: '\u0300'
+ alt+shift: none
+ capslock+alt: '\u0300'
+ capslock+shift: '7'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 8 {
+ label, number: '\u00e1'
+ base: '\u00e1'
+ shift: '8'
+ capslock: '\u00c1'
+ alt: '\u0307'
+ alt+shift: none
+ capslock+alt: '\u0307'
+ capslock+shift: '8'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label, number: '\u00ed'
+ base: '\u00ed'
+ shift: '9'
+ capslock: '\u00cd'
+ alt: '\u0301'
+ alt+shift: none
+ capslock+alt: '\u0301'
+ capslock+shift: '9'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label, number: '\u00e9'
+ base: '\u00e9'
+ shift: '0'
+ capslock: '\u00c9'
+ alt: '\u030b'
+ alt+shift: none
+ capslock+alt: '\u030b'
+ capslock+shift: '0'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '='
+ base: '='
+ shift: '%'
+ alt: '\u0308'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '\u0301'
+ base: '\u0301'
+ shift: '\u030c'
+ alt: '\u0327'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ alt: '\\'
+ alt+shift: none
+ capslock+alt: '\\'
+ capslock+shift: 'q'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ alt: '|'
+ alt+shift: none
+ capslock+alt: '|'
+ capslock+shift: 'w'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '\u00da'
+ base: '\u00fa'
+ shift: '/'
+ capslock: '\u00da'
+ alt: '\u00f7'
+ alt+shift: none
+ capslock+alt: '\u00f7'
+ capslock+shift: '/'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ')'
+ base: ')'
+ shift: '('
+ alt: '\u00d7'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ alt: '\u0111'
+ alt+shift: none
+ capslock+alt: '\u0111'
+ capslock+shift: 's'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ alt: '\u0110'
+ alt+shift: none
+ capslock+alt: '\u0110'
+ capslock+shift: 'd'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ alt: '['
+ alt+shift: none
+ capslock+alt: '['
+ capslock+shift: 'f'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ alt: ']'
+ alt+shift: none
+ capslock+alt: ']'
+ capslock+shift: 'g'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ alt: '\u0142'
+ alt+shift: none
+ capslock+alt: '\u0142'
+ capslock+shift: 'k'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ alt: '\u0141'
+ alt+shift: none
+ capslock+alt: '\u0141'
+ capslock+shift: 'l'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: '\u016e'
+ base: '\u016f'
+ shift: '"'
+ capslock: '\u016e'
+ alt: '$'
+ alt+shift: none
+ capslock+alt: '$'
+ capslock+shift: '"'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\u00a7'
+ base: '\u00a7'
+ shift: '!'
+ alt: '\u00df'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\u0308'
+ base: '\u0308'
+ shift: '\''
+ alt: '\u00a4'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ alt: '#'
+ alt+shift: none
+ capslock+alt: '#'
+ capslock+shift: 'x'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ alt: '&'
+ alt+shift: none
+ capslock+alt: '&'
+ capslock+shift: 'c'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ alt: '@'
+ alt+shift: none
+ capslock+alt: '@'
+ capslock+shift: 'v'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ alt: '{'
+ alt+shift: none
+ capslock+alt: '{'
+ capslock+shift: 'b'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ alt: '}'
+ alt+shift: none
+ capslock+alt: '}'
+ capslock+shift: 'n'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '?'
+ alt: '<'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: ':'
+ alt: '>'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt: '*'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-da_DK.kcm b/xt9/keychars/qwerty-da_DK.kcm
new file mode 100644
index 0000000..0f425e9
--- /dev/null
+++ b/xt9/keychars/qwerty-da_DK.kcm
@@ -0,0 +1,443 @@
+type FULL
+
+key GRAVE {
+ label, number: '\u00bd'
+ base: '\u00bd'
+ shift: '\u00a7'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '"'
+ alt: '@'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt: '\u00a3'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '\u00a4'
+ alt: '$'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u20ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '/'
+ alt: '{'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '('
+ alt: '['
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: ')'
+ alt: ']'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: '='
+ alt: '}'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '+'
+ base: '+'
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '\u0301'
+ base: '\u0301'
+ shift: '\u0300'
+ alt: '|'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label: '\u00c5'
+ number: '\u00e5'
+ base: '\u00e5'
+ shift, capslock: '\u00c5'
+ capslock+shift: '\u00e5'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '\u0308'
+ base: '\u0308'
+ shift: '\u0302'
+ alt: '\u0303'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label: '\u00c6'
+ number: '\u00e6'
+ base: '\u00e6'
+ shift, capslock: '\u00c6'
+ capslock+shift: '\u00e6'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label: '\u00d8'
+ number: '\u00f8'
+ base: '\u00f8'
+ shift, capslock: '\u00d8'
+ capslock+shift: '\u00f8'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\''
+ base: '\''
+ shift: '*'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt: '\\'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ alt: '\u00b5'
+ alt+shift: none
+ capslock+alt: '\u00b5'
+ capslock+shift: 'm'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: ';'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-de_CH.kcm b/xt9/keychars/qwerty-de_CH.kcm
new file mode 100644
index 0000000..9b9e92f
--- /dev/null
+++ b/xt9/keychars/qwerty-de_CH.kcm
@@ -0,0 +1,451 @@
+type FULL
+
+key GRAVE {
+ label, number: '\u00a7'
+ base: '\u00a7'
+ shift: '\u00b0'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '+'
+ alt: '\u00a6'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '"'
+ alt: '@'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '*'
+ alt: '#'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '\u00e7'
+ alt: '\u00b0'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u00a7'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '&'
+ alt: '\u00ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '/'
+ alt: '|'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '('
+ alt: '\u00a2'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: '='
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '\''
+ base: '\''
+ shift: '?'
+ alt: '\u0301'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '\u0302'
+ base: '\u0302'
+ shift: '\u0300'
+ alt: '\u0303'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '\u00fc'
+ base: '\u00fc'
+ shift: '\u00e8'
+ capslock: '\u00dc'
+ alt: '['
+ alt+shift: none
+ capslock+alt: '['
+ capslock+shift: '\u00c8'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '\u0308'
+ base: '\u0308'
+ shift: '!'
+ alt: ']'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: '\u00f6'
+ base: '\u00f6'
+ shift: '\u00e9'
+ capslock: '\u00d6'
+ capslock+shift: '\u00c9'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\u00e4'
+ base: '\u00e4'
+ shift: '\u00e0'
+ capslock: '\u00c4'
+ alt: '{'
+ alt+shift: none
+ capslock+alt: '{'
+ capslock+shift: '\u00c0'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '$'
+ base: '$'
+ shift: '\u00a3'
+ alt: '}'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt: '\\'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: ';'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-de_DE.kcm b/xt9/keychars/qwerty-de_DE.kcm
new file mode 100644
index 0000000..04bd4a7
--- /dev/null
+++ b/xt9/keychars/qwerty-de_DE.kcm
@@ -0,0 +1,477 @@
+type FULL
+
+key GRAVE {
+ label, number: '\u0302'
+ base: '\u0302'
+ shift: '\u00b0'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift, capslock: '!'
+ capslock+shift: '1'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift, capslock: '"'
+ alt: '\u00b2'
+ alt+shift: none
+ capslock+alt: '\u00b2'
+ capslock+shift: '2'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift, capslock: '\u00a7'
+ alt: '\u00b3'
+ alt+shift: none
+ capslock+alt: '\u00b3'
+ capslock+shift: '3'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift, capslock: '$'
+ capslock+shift: '4'
+ alt, ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift, capslock: '%'
+ capslock+shift: '5'
+ alt, ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift, capslock: '&'
+ capslock+shift: '6'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift, capslock: '/'
+ alt: '{'
+ alt+shift: none
+ capslock+alt: '{'
+ capslock+shift: '7'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift, capslock: '('
+ alt: '['
+ alt+shift: none
+ capslock+alt: '['
+ capslock+shift: '8'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift, capslock: ')'
+ alt: ']'
+ alt+shift: none
+ capslock+alt: ']'
+ capslock+shift: '9'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift, capslock: '='
+ alt: '}'
+ alt+shift: none
+ capslock+alt: '}'
+ capslock+shift: '0'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '\u00df'
+ base: '\u00df'
+ shift, capslock: '?'
+ alt: '\\'
+ alt+shift: none
+ capslock+alt: '\\'
+ capslock+shift: '\u00df'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '\u0301'
+ base: '\u0301'
+ shift: '\u0300'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ alt: '@'
+ alt+shift: none
+ capslock+alt: '@'
+ capslock+shift: 'q'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label: '\u00dc'
+ number: '\u00fc'
+ base: '\u00fc'
+ shift, capslock: '\u00dc'
+ capslock+shift: '\u00fc'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '+'
+ base: '+'
+ shift, capslock: '*'
+ alt: '~'
+ alt+shift: none
+ capslock+alt: '~'
+ capslock+shift: '+'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label: '\u00d6'
+ number: '\u00f6'
+ base: '\u00f6'
+ shift, capslock: '\u00d6'
+ capslock+shift: '\u00f6'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label: '\u00c4'
+ number: '\u00e4'
+ base: '\u00e4'
+ shift, capslock: '\u00c4'
+ capslock+shift: '\u00e4'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '#'
+ base: '#'
+ shift, capslock: '\''
+ capslock+shift: '#'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift, capslock: '>'
+ alt: '|'
+ alt+shift: none
+ capslock+alt: '|'
+ capslock+shift: '<'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ alt: '\u00b5'
+ alt+shift: none
+ capslock+alt: '\u00b5'
+ capslock+shift: 'm'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift, capslock: ';'
+ capslock+shift: ','
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift, capslock: ':'
+ capslock+shift: '.'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-el_GR.kcm b/xt9/keychars/qwerty-el_GR.kcm
new file mode 100644
index 0000000..509b1cc
--- /dev/null
+++ b/xt9/keychars/qwerty-el_GR.kcm
@@ -0,0 +1,447 @@
+type FULL
+
+key GRAVE {
+ label, number: '`'
+ base: '`'
+ shift: '~'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '@'
+ alt: '\u00b2'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt: '\u00b3'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt: '\u00a3'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u00a7'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '^'
+ alt: '\u00b6'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ alt: '\u00a4'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ alt: '\u00a6'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ alt: '\u00b0'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt: '\u00b1'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ alt: '\u00bd'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: ';'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: '\u03c2'
+ shift: '\u0385'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: '\u03b5'
+ shift, capslock: '\u0395'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: '\u03b5'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: '\u03c1'
+ shift, capslock: '\u03a1'
+ alt: '\u00ae'
+ alt+shift: none
+ capslock+alt: '\u00ae'
+ capslock+shift: '\u03c1'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: '\u03c4'
+ shift, capslock: '\u03a4'
+ capslock+shift: '\u03c4'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: '\u03c5'
+ shift, capslock: '\u03a5'
+ alt: '\u00a5'
+ alt+shift: none
+ capslock+alt: '\u00a5'
+ capslock+shift: '\u03c5'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: '\u03b8'
+ shift, capslock: '\u0398'
+ capslock+shift: '\u03b8'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: '\u03b9'
+ shift, capslock: '\u0399'
+ capslock+shift: '\u03b9'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: '\u03bf'
+ shift, capslock: '\u039f'
+ capslock+shift: '\u03bf'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: '\u03c0'
+ shift, capslock: '\u03a0'
+ capslock+shift: '\u03c0'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '['
+ base: '['
+ shift: '{'
+ alt: '\u00ab'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ']'
+ base: ']'
+ shift: '}'
+ alt: '\u00bb'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: '\u03b1'
+ shift, capslock: '\u0391'
+ capslock+shift: '\u03b1'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: '\u03c3'
+ shift, capslock: '\u03a3'
+ capslock+shift: '\u03c3'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: '\u03b4'
+ shift, capslock: '\u0394'
+ capslock+shift: '\u03b4'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: '\u03c6'
+ shift, capslock: '\u03a6'
+ capslock+shift: '\u03c6'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: '\u03b3'
+ shift, capslock: '\u0393'
+ capslock+shift: '\u03b3'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: '\u03b7'
+ shift, capslock: '\u0397'
+ capslock+shift: '\u03b7'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: '\u03be'
+ shift, capslock: '\u039e'
+ capslock+shift: '\u03be'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: '\u03ba'
+ shift, capslock: '\u039a'
+ capslock+shift: '\u03ba'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: '\u03bb'
+ shift, capslock: '\u039b'
+ capslock+shift: '\u03bb'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: '\u0384'
+ shift: '\u0308'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\''
+ base: '\''
+ shift: '"'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '#'
+ base: '\\'
+ shift: '|'
+ alt: '\u00ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: '\u03b6'
+ shift, capslock: '\u0396'
+ capslock+shift: '\u03b6'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: '\u03c7'
+ shift, capslock: '\u03a7'
+ capslock+shift: '\u03c7'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: '\u03c8'
+ shift, capslock: '\u03a8'
+ alt: '\u00a9'
+ alt+shift: none
+ capslock+alt: '\u00a9'
+ capslock+shift: '\u03c8'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: '\u03c9'
+ shift, capslock: '\u03a9'
+ capslock+shift: '\u03c9'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: '\u03b2'
+ shift, capslock: '\u0392'
+ capslock+shift: '\u03b2'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: '\u03bd'
+ shift, capslock: '\u039d'
+ capslock+shift: '\u03bd'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: '\u03bc'
+ shift, capslock: '\u039c'
+ capslock+shift: '\u03bc'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '<'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '/'
+ base: '/'
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-en_CA.kcm b/xt9/keychars/qwerty-en_CA.kcm
new file mode 100644
index 0000000..7c79dc0
--- /dev/null
+++ b/xt9/keychars/qwerty-en_CA.kcm
@@ -0,0 +1,407 @@
+type FULL
+
+key GRAVE {
+ label, number: '`'
+ base: '`'
+ shift: '~'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '@'
+ alt, ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt, ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt, ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt, ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '^'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ capslock+shift: 'e'
+ alt, ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '['
+ base: '['
+ shift: '{'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ']'
+ base: ']'
+ shift: '}'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\''
+ base: '\''
+ shift: '"'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '<'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '/'
+ base: '/'
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-en_GB.kcm b/xt9/keychars/qwerty-en_GB.kcm
new file mode 100644
index 0000000..3d600e8
--- /dev/null
+++ b/xt9/keychars/qwerty-en_GB.kcm
@@ -0,0 +1,426 @@
+type FULL
+
+key GRAVE {
+ label, number: '`'
+ base: '`'
+ shift: '\u00ac'
+ alt: '\u00a6'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '"'
+ alt, ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '\u00a3'
+ alt, ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt: '\u20ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt, ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '^'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u00e9'
+ alt+shift, capslock+alt: '\u00c9'
+ capslock+shift: 'e'
+ capslock+alt+shift: '\u00e9'
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ alt: '\u00fa'
+ alt+shift, capslock+alt: '\u00da'
+ capslock+shift: 'u'
+ capslock+alt+shift: '\u00fa'
+ ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ alt: '\u00ed'
+ alt+shift, capslock+alt: '\u00cd'
+ capslock+shift: 'i'
+ capslock+alt+shift: '\u00ed'
+ ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ alt: '\u00f3'
+ alt+shift, capslock+alt: '\u00d3'
+ capslock+shift: 'o'
+ capslock+alt+shift: '\u00f3'
+ ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '['
+ base: '['
+ shift: '{'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ']'
+ base: ']'
+ shift: '}'
+ alt, ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ alt: '\u00e1'
+ alt+shift, capslock+alt: '\u00c1'
+ capslock+shift: 'a'
+ capslock+alt+shift: '\u00e1'
+ ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\''
+ base: '\''
+ shift: '@'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '#'
+ base: '#'
+ shift: '~'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '<'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '/'
+ base: '/'
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-en_GR.kcm b/xt9/keychars/qwerty-en_GR.kcm
new file mode 100644
index 0000000..6ea53a7
--- /dev/null
+++ b/xt9/keychars/qwerty-en_GR.kcm
@@ -0,0 +1,407 @@
+type FULL
+
+key GRAVE {
+ label, number: '`'
+ base: '`'
+ shift: '~'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '@'
+ alt, ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt, ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt, ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt, ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '^'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ capslock+shift: 'e'
+ alt, ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '['
+ base: '['
+ shift: '{'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ']'
+ base: ']'
+ shift: '}'
+ alt, ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\''
+ base: '\''
+ shift: '"'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '<'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '/'
+ base: '/'
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-en_US.kcm b/xt9/keychars/qwerty-en_US.kcm
new file mode 100644
index 0000000..7c79dc0
--- /dev/null
+++ b/xt9/keychars/qwerty-en_US.kcm
@@ -0,0 +1,407 @@
+type FULL
+
+key GRAVE {
+ label, number: '`'
+ base: '`'
+ shift: '~'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '@'
+ alt, ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt, ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt, ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt, ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '^'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ capslock+shift: 'e'
+ alt, ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '['
+ base: '['
+ shift: '{'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ']'
+ base: ']'
+ shift: '}'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\''
+ base: '\''
+ shift: '"'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '<'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '/'
+ base: '/'
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-es_ES.kcm b/xt9/keychars/qwerty-es_ES.kcm
new file mode 100644
index 0000000..cba5e50
--- /dev/null
+++ b/xt9/keychars/qwerty-es_ES.kcm
@@ -0,0 +1,439 @@
+type FULL
+
+key GRAVE {
+ label, number: '\u00ba'
+ base: '\u00ba'
+ shift: '\u00aa'
+ alt: '\\'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt: '|'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '"'
+ alt: '@'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '\u00b7'
+ alt: '#'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt: '\u0303'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u20ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '&'
+ alt: '\u00ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '/'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '('
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: '='
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '\''
+ base: '\''
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '\u00a1'
+ base: '\u00a1'
+ shift: '\u00bf'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '\u0300'
+ base: '\u0300'
+ shift: '\u0302'
+ alt: '['
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '+'
+ base: '+'
+ shift: '*'
+ alt: ']'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label: '\u00d1'
+ number: '\u00f1'
+ base: '\u00f1'
+ shift, capslock: '\u00d1'
+ capslock+shift: '\u00f1'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\u0301'
+ base: '\u0301'
+ shift: '\u0308'
+ alt: '{'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key BACKSLASH {
+ label: '\u00c7'
+ number: '\u00e7'
+ base: '\u00e7'
+ shift, capslock: '\u00c7'
+ alt: '}'
+ alt+shift: none
+ capslock+alt: '}'
+ capslock+shift: '\u00e7'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: ';'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-es_US.kcm b/xt9/keychars/qwerty-es_US.kcm
new file mode 100644
index 0000000..4445bc0
--- /dev/null
+++ b/xt9/keychars/qwerty-es_US.kcm
@@ -0,0 +1,504 @@
+type FULL
+
+key GRAVE {
+ label, number: '\u0300'
+ base: '\u0300'
+ shift: '\u0303'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt: '\u00a1'
+ alt+shift: '\u00b9'
+ ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '@'
+ alt: '\u00b2'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt: '\u00b3'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt: '\u00a4'
+ alt+shift: '\u00a3'
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u20ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '\u0302'
+ alt: '\u00bc'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ alt: '\u00bd'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ alt: '\u00be'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ alt: '\u2018'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ alt: '\u2019'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt: '\u00a5'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ alt: '\u00d7'
+ alt+shift: '\u00f7'
+ ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ alt: '\u00e4'
+ alt+shift, capslock+alt: '\u00c4'
+ capslock+shift: 'q'
+ capslock+alt+shift: '\u00e4'
+ ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ alt: '\u00e5'
+ alt+shift, capslock+alt: '\u00c5'
+ capslock+shift: 'w'
+ capslock+alt+shift: '\u00e5'
+ ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u00e9'
+ alt+shift, capslock+alt: '\u00c9'
+ capslock+shift: 'e'
+ capslock+alt+shift: '\u00e9'
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ alt: '\u00ae'
+ alt+shift: none
+ capslock+alt: '\u00ae'
+ capslock+shift: 'r'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ alt: '\u00fe'
+ alt+shift, capslock+alt: '\u00de'
+ capslock+shift: 't'
+ capslock+alt+shift: '\u00fe'
+ ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ alt: '\u00fc'
+ alt+shift, capslock+alt: '\u00dc'
+ capslock+shift: 'y'
+ capslock+alt+shift: '\u00fc'
+ ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ alt: '\u00fa'
+ alt+shift, capslock+alt: '\u00da'
+ capslock+shift: 'u'
+ capslock+alt+shift: '\u00fa'
+ ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ alt: '\u00ed'
+ alt+shift, capslock+alt: '\u00cd'
+ capslock+shift: 'i'
+ capslock+alt+shift: '\u00ed'
+ ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ alt: '\u00f3'
+ alt+shift, capslock+alt: '\u00d3'
+ capslock+shift: 'o'
+ capslock+alt+shift: '\u00f3'
+ ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ alt: '\u00f6'
+ alt+shift, capslock+alt: '\u00d6'
+ capslock+shift: 'p'
+ capslock+alt+shift: '\u00f6'
+ ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '['
+ base: '['
+ shift: '{'
+ alt: '\u00ab'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ']'
+ base: ']'
+ shift: '}'
+ alt: '\u00bb'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt: '\u00ac'
+ alt+shift: '\u00a6'
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ alt: '\u00e1'
+ alt+shift, capslock+alt: '\u00c1'
+ capslock+shift: 'a'
+ capslock+alt+shift: '\u00e1'
+ ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ alt: '\u00df'
+ alt+shift: '\u00a7'
+ capslock+alt: '\u00df'
+ capslock+shift: 's'
+ capslock+alt+shift: '\u00a7'
+ ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ alt: '\u00f0'
+ alt+shift, capslock+alt: '\u00d0'
+ capslock+shift: 'd'
+ capslock+alt+shift: '\u00f0'
+ ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ alt: '\u00f8'
+ alt+shift, capslock+alt: '\u00d8'
+ capslock+shift: 'l'
+ capslock+alt+shift: '\u00f8'
+ ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift: ':'
+ alt: '\u00b6'
+ alt+shift: '\u00b0'
+ ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\u1df0'
+ base: '\u1df0'
+ shift: '\u1df1'
+ alt: '\u00b4'
+ alt+shift: '\u00a8'
+ ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ alt: '\u00e6'
+ alt+shift, capslock+alt: '\u00c6'
+ capslock+shift: 'z'
+ capslock+alt+shift: '\u00e6'
+ ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ alt: '\u00a9'
+ alt+shift: '\u00a2'
+ capslock+alt: '\u00a9'
+ capslock+shift: 'c'
+ capslock+alt+shift: '\u00a2'
+ ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ alt: '\u00f1'
+ alt+shift, capslock+alt: '\u00d1'
+ capslock+shift: 'n'
+ capslock+alt+shift: '\u00f1'
+ ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ alt: '\u00b5'
+ alt+shift: none
+ capslock+alt: '\u00b5'
+ capslock+shift: 'm'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '<'
+ alt: '\u00e7'
+ alt+shift, capslock+alt: '\u00c7'
+ capslock+alt+shift: '\u00e7'
+ ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '/'
+ base: '/'
+ shift: '?'
+ alt: '\u00bf'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-fi_FI.kcm b/xt9/keychars/qwerty-fi_FI.kcm
new file mode 100644
index 0000000..ec5110f
--- /dev/null
+++ b/xt9/keychars/qwerty-fi_FI.kcm
@@ -0,0 +1,443 @@
+type FULL
+
+key GRAVE {
+ label, number: '\u00a7'
+ base: '\u00a7'
+ shift: '\u00bd'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '"'
+ alt: '@'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt: '\u00a3'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '\u00a4'
+ alt: '$'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u20ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '/'
+ alt: '{'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '('
+ alt: '['
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: ')'
+ alt: ']'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: '='
+ alt: '}'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '+'
+ base: '+'
+ shift: '?'
+ alt: '\\'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '\u0301'
+ base: '\u0301'
+ shift: '\u0300'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label: '\u00c5'
+ number: '\u00e5'
+ base: '\u00e5'
+ shift, capslock: '\u00c5'
+ capslock+shift: '\u00e5'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '\u0308'
+ base: '\u0308'
+ shift: '\u0302'
+ alt: '\u0303'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label: '\u00d6'
+ number: '\u00f6'
+ base: '\u00f6'
+ shift, capslock: '\u00d6'
+ capslock+shift: '\u00f6'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label: '\u00c4'
+ number: '\u00e4'
+ base: '\u00e4'
+ shift, capslock: '\u00c4'
+ capslock+shift: '\u00e4'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\''
+ base: '\''
+ shift: '*'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt: '|'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ alt: '\u00b5'
+ alt+shift: none
+ capslock+alt: '\u00b5'
+ capslock+shift: 'm'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: ';'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-fr_BE.kcm b/xt9/keychars/qwerty-fr_BE.kcm
new file mode 100644
index 0000000..903dfce
--- /dev/null
+++ b/xt9/keychars/qwerty-fr_BE.kcm
@@ -0,0 +1,482 @@
+type FULL
+
+key GRAVE {
+ label, number: '\u00b2'
+ base: '\u00b2'
+ shift: '\u00b3'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '&'
+ base: '&'
+ shift, capslock: '1'
+ alt: '|'
+ alt+shift: none
+ capslock+alt: '|'
+ capslock+shift: '&'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 2 {
+ label, number: '\u00e9'
+ base: '\u00e9'
+ shift, capslock: '2'
+ alt: '@'
+ alt+shift: none
+ capslock+alt: '@'
+ capslock+shift: '\u00e9'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '"'
+ base: '"'
+ shift, capslock: '3'
+ alt: '#'
+ alt+shift: none
+ capslock+alt: '#'
+ capslock+shift: '"'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '\''
+ base: '\''
+ shift, capslock: '4'
+ alt: '{'
+ alt+shift: none
+ capslock+alt: '{'
+ capslock+shift: '\''
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '('
+ base: '('
+ shift, capslock: '5'
+ alt: '['
+ alt+shift: none
+ capslock+alt: '['
+ capslock+shift: '('
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '\u00a7'
+ base: '\u00a7'
+ shift, capslock: '6'
+ alt: '^'
+ alt+shift: none
+ capslock+alt: '^'
+ capslock+shift: '\u00a7'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 7 {
+ label, number: '\u00e8'
+ base: '\u00e8'
+ shift, capslock: '7'
+ capslock+shift: '\u00e8'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '!'
+ base: '!'
+ shift, capslock: '8'
+ capslock+shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '\u00e7'
+ base: '\u00e7'
+ shift, capslock: '9'
+ alt: '{'
+ alt+shift: none
+ capslock+alt: '{'
+ capslock+shift: '\u00e7'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label, number: '\u00e0'
+ base: '\u00e0'
+ shift, capslock: '0'
+ alt: '}'
+ alt+shift: none
+ capslock+alt: '}'
+ capslock+shift: '\u00e0'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: ')'
+ base: ')'
+ shift, capslock: '\u00b0'
+ capslock+shift: ')'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '-'
+ base: '-'
+ shift, capslock: '_'
+ capslock+shift: '-'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '\u0302'
+ base: '\u0302'
+ shift, capslock: '\u0308'
+ alt: '['
+ alt+shift: none
+ capslock+alt: '['
+ capslock+shift: '\u0302'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '$'
+ base: '$'
+ shift, capslock: '*'
+ alt: ']'
+ alt+shift: none
+ capslock+alt: ']'
+ capslock+shift: '$'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\u00f9'
+ base: '\u00f9'
+ shift, capslock: '%'
+ alt: '\u0301'
+ alt+shift, capslock+alt: '\u0301'
+ capslock+shift: '\u00f9'
+ capslock+alt+shift: '\u0301'
+ ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\u00b5'
+ base: '\u00b5'
+ shift, capslock: '\u00a3'
+ alt: '\u0300'
+ alt+shift, capslock+alt: '\u0300'
+ capslock+shift: '\u00b5'
+ capslock+alt+shift: '\u0300'
+ ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt: '\\'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift, capslock: '?'
+ capslock+shift: ','
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift, capslock: '.'
+ capslock+shift: ';'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: ':'
+ base: ':'
+ shift, capslock: '/'
+ capslock+shift: ':'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '='
+ base: '='
+ shift, capslock: '+'
+ alt: '\u0303'
+ alt+shift, capslock+alt: '\u0303'
+ capslock+shift: '='
+ capslock+alt+shift: '\u0303'
+ ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-fr_CA.kcm b/xt9/keychars/qwerty-fr_CA.kcm
new file mode 100644
index 0000000..744f044
--- /dev/null
+++ b/xt9/keychars/qwerty-fr_CA.kcm
@@ -0,0 +1,462 @@
+type FULL
+
+key GRAVE {
+ label, number: '#'
+ base: '#'
+ shift: '|'
+ alt: '\\'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt: '\u00b1'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '"'
+ alt: '@'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '/'
+ alt: '\u00a3'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt: '\u00a2'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u00a4'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '?'
+ alt: '\u00ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ alt: '\u00a6'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ alt: '\u00b2'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ alt: '\u00b3'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ alt: '\u00bc'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt: '\u00bd'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ alt: '\u00be'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ capslock+shift: 'e'
+ alt, ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ alt: '\u00a7'
+ alt+shift: none
+ capslock+alt: '\u00a7'
+ capslock+shift: 'o'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ alt: '\u00b6'
+ alt+shift: none
+ capslock+alt: '\u00b6'
+ capslock+shift: 'p'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '\u0302'
+ base: '\u0302'
+ alt: '['
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '\u0327'
+ base: '\u0327'
+ shift: '\u0308'
+ alt: ']'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift: ':'
+ alt: '\u0303'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\u0300'
+ base: '\u0300'
+ alt: '{'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt: '}'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '\u00ab'
+ base: '\u00ab'
+ shift: '\u00bb'
+ alt: '\u00b0'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ alt: '\u00b5'
+ alt+shift: none
+ capslock+alt: '\u00b5'
+ capslock+shift: 'm'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '\''
+ alt: '\u00af'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label: '\u00c9'
+ number: '\u00e9'
+ base: '\u00e9'
+ shift, capslock: '\u00c9'
+ alt: '\u0301'
+ alt+shift: none
+ capslock+alt: '\u0301'
+ capslock+shift: '\u00e9'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-fr_CH.kcm b/xt9/keychars/qwerty-fr_CH.kcm
new file mode 100644
index 0000000..8f159f3
--- /dev/null
+++ b/xt9/keychars/qwerty-fr_CH.kcm
@@ -0,0 +1,441 @@
+type FULL
+
+key GRAVE {
+ label, number: '\u00a7'
+ base: '\u00a7'
+ shift: '\u00b0'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '+'
+ alt: '\u00a6'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '"'
+ alt: '@'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '*'
+ alt: '#'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '\u00e7'
+ alt: '\u00b0'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u00a7'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '&'
+ alt: '\u00ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '/'
+ alt: '|'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '('
+ alt: '\u00a2'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: '='
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '\''
+ base: '\''
+ shift: '?'
+ alt: '\u0301'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '\u0302'
+ base: '\u0302'
+ shift: '\u0300'
+ alt: '\u0303'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '\u00e8'
+ base: '\u00e8'
+ shift: '\u00fc'
+ alt: '['
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '\u0308'
+ base: '\u0308'
+ shift: '!'
+ alt: ']'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: '\u00e9'
+ base: '\u00e9'
+ shift: '\u00f6'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\u00e0'
+ base: '\u00e0'
+ shift: '\u00e4'
+ alt: '{'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '$'
+ base: '$'
+ shift: '\u00a3'
+ alt: '}'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt: '\\'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: ';'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-fr_FR.kcm b/xt9/keychars/qwerty-fr_FR.kcm
new file mode 100644
index 0000000..41134d4
--- /dev/null
+++ b/xt9/keychars/qwerty-fr_FR.kcm
@@ -0,0 +1,489 @@
+type FULL
+
+key GRAVE {
+ label, number: '\u00b2'
+ base: '\u00b2'
+ shift: none
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label: '&'
+ number: '1'
+ base: '&'
+ shift, capslock: '1'
+ capslock+shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label: '\u00e9'
+ number: '2'
+ base: '\u00e9'
+ shift, capslock: '2'
+ alt: '\u0303'
+ alt+shift: none
+ capslock+alt: '\u0303'
+ capslock+shift: '\u00e9'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label: '"'
+ number: '3'
+ base: '"'
+ shift, capslock: '3'
+ alt: '#'
+ alt+shift: none
+ capslock+alt: '#'
+ capslock+shift: '"'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label: '\''
+ number: '4'
+ base: '\''
+ shift, capslock: '4'
+ alt: '{'
+ alt+shift: none
+ capslock+alt: '{'
+ capslock+shift: '\''
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label: '('
+ number: '5'
+ base: '('
+ shift, capslock: '5'
+ alt: '['
+ alt+shift: none
+ capslock+alt: '['
+ capslock+shift: '('
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label: '-'
+ number: '6'
+ base: '-'
+ shift, capslock: '6'
+ alt: '|'
+ alt+shift: none
+ capslock+alt: '|'
+ capslock+shift: '-'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 7 {
+ label: '\u00e8'
+ number: '7'
+ base: '\u00e8'
+ shift, capslock: '7'
+ alt: '\u0300'
+ alt+shift: none
+ capslock+alt: '\u0300'
+ capslock+shift: '\u00e8'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 8 {
+ label: '_'
+ number: '8'
+ base: '_'
+ shift, capslock: '8'
+ alt: '\\'
+ alt+shift: none
+ capslock+alt: '\\'
+ capslock+shift: '_'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label: '\u00e7'
+ number: '9'
+ base: '\u00e7'
+ shift, capslock: '9'
+ alt: '^'
+ alt+shift: none
+ capslock+alt: '^'
+ capslock+shift: '\u00e7'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label: '\u00e0'
+ number: '0'
+ base: '\u00e0'
+ shift, capslock: '0'
+ alt: '@'
+ alt+shift: none
+ capslock+alt: '@'
+ capslock+shift: '\u00e0'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: ')'
+ base: ')'
+ shift, capslock: '\u00b0'
+ alt: ']'
+ alt+shift: none
+ capslock+alt: ']'
+ capslock+shift: ')'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift, capslock: '+'
+ alt: '}'
+ alt+shift: none
+ capslock+alt: '}'
+ capslock+shift: '='
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '\u0302'
+ base: '\u0302'
+ shift, capslock: '\u0308'
+ capslock+shift: '\u0302'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '$'
+ base: '$'
+ shift, capslock: '\u00a3'
+ alt: '\u00a4'
+ alt+shift: none
+ capslock+alt: '\u00a4'
+ capslock+shift: '$'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\u00f9'
+ base: '\u00f9'
+ shift, capslock: '%'
+ capslock+shift: '\u00f9'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '*'
+ base: '*'
+ shift, capslock: '\u00b5'
+ capslock+shift: '*'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift, capslock: '?'
+ capslock+shift: ','
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift, capslock: '.'
+ capslock+shift: ';'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: ':'
+ base: ':'
+ shift, capslock: '/'
+ capslock+shift: ':'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '!'
+ base: '!'
+ shift, capslock: '\u00a7'
+ capslock+shift: '!'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-hu_HU.kcm b/xt9/keychars/qwerty-hu_HU.kcm
new file mode 100644
index 0000000..8bbc150
--- /dev/null
+++ b/xt9/keychars/qwerty-hu_HU.kcm
@@ -0,0 +1,565 @@
+type FULL
+
+key GRAVE {
+ label, number: '0'
+ base: '0'
+ shift: '\u00a7'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '\''
+ alt: '~'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '"'
+ alt: '\u030c'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '+'
+ alt: '\u0302'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '!'
+ alt: '\u0306'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u030a'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '/'
+ alt: '\u0328'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '='
+ alt: '`'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '('
+ alt: '\u0307'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: ')'
+ alt: '\u0301'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label: '\u00d6'
+ number: '\u00f6'
+ base: '\u00f6'
+ shift, capslock: '\u00d6'
+ alt: '\u030b'
+ alt+shift: none
+ capslock+alt: '\u030b'
+ capslock+shift: '\u00f6'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label: '\u00dc'
+ number: '\u00fc'
+ base: '\u00fc'
+ shift, capslock: '\u00dc'
+ alt: '\u0308'
+ alt+shift: none
+ capslock+alt: '\u0308'
+ capslock+shift: '\u00fc'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key EQUALS {
+ label: '\u00d3'
+ number: '\u00f3'
+ base: '\u00f3'
+ shift, capslock: '\u00d3'
+ alt: '\u0327'
+ alt+shift: none
+ capslock+alt: '\u0327'
+ capslock+shift: '\u00f3'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ alt: '\\'
+ alt+shift: none
+ capslock+alt: '\\'
+ capslock+shift: 'q'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ alt: '|'
+ alt+shift: none
+ capslock+alt: '|'
+ capslock+shift: 'w'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u00c4'
+ alt+shift: none
+ capslock+alt: '\u00c4'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'u'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ alt: '\u00cd'
+ alt+shift: none
+ capslock+alt: '\u00cd'
+ capslock+shift: 'i'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label: '\u0150'
+ number: '\u0151'
+ base: '\u0151'
+ shift, capslock: '\u0150'
+ alt: '\u00f7'
+ alt+shift: none
+ capslock+alt: '\u00f7'
+ capslock+shift: '\u0151'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label: '\u00da'
+ number: '\u00fa'
+ base: '\u00fa'
+ shift, capslock: '\u00da'
+ alt: '\u00d7'
+ alt+shift: none
+ capslock+alt: '\u00d7'
+ capslock+shift: '\u00fa'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ alt: '\u00e4'
+ alt+shift: none
+ capslock+alt: '\u00e4'
+ capslock+shift: 'a'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ alt: '\u0111'
+ alt+shift: none
+ capslock+alt: '\u0111'
+ capslock+shift: 's'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ alt: '\u0110'
+ alt+shift: none
+ capslock+alt: '\u0110'
+ capslock+shift: 'd'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ alt: '['
+ alt+shift: none
+ capslock+alt: '['
+ capslock+shift: 'f'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ alt: ']'
+ alt+shift: none
+ capslock+alt: ']'
+ capslock+shift: 'g'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ alt: '\u00ed'
+ alt+shift: none
+ capslock+alt: '\u00ed'
+ capslock+shift: 'j'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ alt: '\u0142'
+ alt+shift: none
+ capslock+alt: '\u0142'
+ capslock+shift: 'k'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ alt: '\u0141'
+ alt+shift: none
+ capslock+alt: '\u0141'
+ capslock+shift: 'l'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key SEMICOLON {
+ label: '\u00c9'
+ number: '\u00e9'
+ base: '\u00e9'
+ shift, capslock: '\u00c9'
+ alt: '$'
+ alt+shift: none
+ capslock+alt: '$'
+ capslock+shift: '\u00e9'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label: '\u00c1'
+ number: '\u00e1'
+ base: '\u00e1'
+ shift, capslock: '\u00c1'
+ alt: '\u00df'
+ alt+shift: none
+ capslock+alt: '\u00df'
+ capslock+shift: '\u00e1'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key BACKSLASH {
+ label: '\u0170'
+ number: '\u0171'
+ base: '\u0171'
+ shift, capslock: '\u0170'
+ alt: '\u00a4'
+ alt+shift: none
+ capslock+alt: '\u00a4'
+ capslock+shift: '\u0171'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label: '\u00cd'
+ number: '\u00ed'
+ base: '\u00ed'
+ shift, capslock: '\u00cd'
+ alt: '<'
+ alt+shift: none
+ capslock+alt: '<'
+ capslock+shift: '\u00ed'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ alt: '>'
+ alt+shift: none
+ capslock+alt: '>'
+ capslock+shift: 'y'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ alt: '#'
+ alt+shift: none
+ capslock+alt: '#'
+ capslock+shift: 'x'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ alt: '&'
+ alt+shift: none
+ capslock+alt: '&'
+ capslock+shift: 'c'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ alt: '@'
+ alt+shift: none
+ capslock+alt: '@'
+ capslock+shift: 'v'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ alt: '{'
+ alt+shift: none
+ capslock+alt: '{'
+ capslock+shift: 'b'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ alt: '}'
+ alt+shift: none
+ capslock+alt: '}'
+ capslock+shift: 'n'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ alt: '<'
+ alt+shift: none
+ capslock+alt: '<'
+ capslock+shift: 'm'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '?'
+ alt: ';'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: ':'
+ alt: '>'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt: '*'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-it_CH.kcm b/xt9/keychars/qwerty-it_CH.kcm
new file mode 100644
index 0000000..72d1020
--- /dev/null
+++ b/xt9/keychars/qwerty-it_CH.kcm
@@ -0,0 +1,421 @@
+type FULL
+
+key GRAVE {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '"'
+ alt, ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '\u00a3'
+ alt, ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt, ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u20ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '/'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '('
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: '='
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '\''
+ base: '\''
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '\u00ec'
+ base: '\u00ec'
+ shift: '^'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '\u00e8'
+ base: '\u00e8'
+ shift: '\u00e9'
+ alt: '['
+ alt+shift: '{'
+ ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '+'
+ base: '+'
+ shift: '*'
+ alt: ']'
+ alt+shift: '}'
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: '\u00f2'
+ base: '\u00f2'
+ shift: '\u00e7'
+ alt: '@'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\u00e0'
+ base: '\u00e0'
+ shift: '\u00b0'
+ alt: '#'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\u00f9'
+ base: '\u00f9'
+ shift: '\u00a7'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: ';'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-it_IT.kcm b/xt9/keychars/qwerty-it_IT.kcm
new file mode 100644
index 0000000..72d1020
--- /dev/null
+++ b/xt9/keychars/qwerty-it_IT.kcm
@@ -0,0 +1,421 @@
+type FULL
+
+key GRAVE {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '"'
+ alt, ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '\u00a3'
+ alt, ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt, ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u20ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '/'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '('
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: '='
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '\''
+ base: '\''
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '\u00ec'
+ base: '\u00ec'
+ shift: '^'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '\u00e8'
+ base: '\u00e8'
+ shift: '\u00e9'
+ alt: '['
+ alt+shift: '{'
+ ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '+'
+ base: '+'
+ shift: '*'
+ alt: ']'
+ alt+shift: '}'
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: '\u00f2'
+ base: '\u00f2'
+ shift: '\u00e7'
+ alt: '@'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\u00e0'
+ base: '\u00e0'
+ shift: '\u00b0'
+ alt: '#'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\u00f9'
+ base: '\u00f9'
+ shift: '\u00a7'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: ';'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-iw_IL.kcm b/xt9/keychars/qwerty-iw_IL.kcm
new file mode 100644
index 0000000..422d858
--- /dev/null
+++ b/xt9/keychars/qwerty-iw_IL.kcm
@@ -0,0 +1,429 @@
+type FULL
+
+key GRAVE {
+ label, number: ';'
+ base: ';'
+ shift: '~'
+ capslock+shift: '\u05b0'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ capslock+shift: '\u05b1'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '@'
+ capslock+shift: '\u05b2'
+ alt, ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ capslock+shift: '\u05b3'
+ alt, ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt: '\u20aa'
+ alt+shift: none
+ capslock+shift: '\u05b4'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ capslock+shift: '\u05b5'
+ alt, ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '^'
+ capslock+shift: '\u05b6'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ capslock+shift: '\u05b7'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ capslock+shift: '\u05b8'
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ capslock+shift: '\u05c2'
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ capslock+shift: '\u05c1'
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt: '\u05bf'
+ alt+shift: none
+ capslock+shift: '\u05b9'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ capslock+shift: '\u05bc'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label, number: '/'
+ base: '/'
+ shift, capslock: 'Q'
+ capslock+shift: '/'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label, number: '\''
+ base: '\''
+ shift, capslock: 'W'
+ capslock+shift: '\''
+ alt, ctrl, meta: none
+}
+
+key E {
+ label, number: '\u05e7'
+ base: '\u05e7'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: '\u05e7'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label, number: '\u05e8'
+ base: '\u05e8'
+ shift, capslock: 'R'
+ capslock+shift: '\u05e8'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label, number: '\u05d0'
+ base: '\u05d0'
+ shift, capslock: 'T'
+ capslock+shift: '\u05d0'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label, number: '\u05d8'
+ base: '\u05d8'
+ shift, capslock: 'Y'
+ capslock+shift: '\u05d8'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label, number: '\u05d5'
+ base: '\u05d5'
+ shift, capslock: 'U'
+ alt: '\u05f0'
+ alt+shift: none
+ capslock+alt: '\u05f0'
+ capslock+shift: '\u05d5'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key I {
+ label, number: '\u05df'
+ base: '\u05df'
+ shift, capslock: 'I'
+ capslock+shift: '\u05df'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label, number: '\u05dd'
+ base: '\u05dd'
+ shift, capslock: 'O'
+ capslock+shift: '\u05dd'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label, number: '\u05e4'
+ base: '\u05e4'
+ shift, capslock: 'P'
+ capslock+shift: '\u05e4'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '['
+ base: '['
+ shift: '{'
+ capslock+shift: '['
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ']'
+ base: ']'
+ shift: '}'
+ capslock+shift: ']'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ capslock+shift: '\u05bb'
+ alt, ctrl, meta: none
+}
+
+key A {
+ label, number: '\u05e9'
+ base: '\u05e9'
+ shift, capslock: 'A'
+ capslock+shift: '\u05e9'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label, number: '\u05d3'
+ base: '\u05d3'
+ shift, capslock: 'S'
+ capslock+shift: '\u05d3'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label, number: '\u05d2'
+ base: '\u05d2'
+ shift, capslock: 'D'
+ capslock+shift: '\u05d2'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label, number: '\u05db'
+ base: '\u05db'
+ shift, capslock: 'F'
+ capslock+shift: '\u05db'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label, number: '\u05e2'
+ base: '\u05e2'
+ shift, capslock: 'G'
+ capslock+shift: '\u05e2'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label, number: '\u05d9'
+ base: '\u05d9'
+ shift, capslock: 'H'
+ alt: '\u05f2'
+ alt+shift: none
+ capslock+alt: '\u05f2'
+ capslock+shift: '\u05d9'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key J {
+ label, number: '\u05d7'
+ base: '\u05d7'
+ shift, capslock: 'J'
+ alt: '\u05f1'
+ alt+shift: none
+ capslock+alt: '\u05f1'
+ capslock+shift: '\u05d7'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key K {
+ label, number: '\u05dc'
+ base: '\u05dc'
+ shift, capslock: 'K'
+ capslock+shift: '\u05dc'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label, number: '\u05da'
+ base: '\u05da'
+ shift, capslock: 'L'
+ capslock+shift: '\u05da'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: '\u05e3'
+ base: '\u05e3'
+ shift: ':'
+ capslock: ';'
+ capslock+shift: '\u05e3'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: ','
+ base: ','
+ shift: '"'
+ capslock: '\''
+ capslock+shift: ','
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label, number: '\u05d6'
+ base: '\u05d6'
+ shift, capslock: 'Z'
+ capslock+shift: '\u05d6'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label, number: '\u05e1'
+ base: '\u05e1'
+ shift, capslock: 'X'
+ capslock+shift: '\u05e1'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label, number: '\u05d1'
+ base: '\u05d1'
+ shift, capslock: 'C'
+ capslock+shift: '\u05d1'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label, number: '\u05d4'
+ base: '\u05d4'
+ shift, capslock: 'V'
+ capslock+shift: '\u05d4'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label, number: '\u05e0'
+ base: '\u05e0'
+ shift, capslock: 'B'
+ capslock+shift: '\u05e0'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label, number: '\u05de'
+ base: '\u05de'
+ shift, capslock: 'N'
+ capslock+shift: '\u05de'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label, number: '\u05e6'
+ base: '\u05e6'
+ shift, capslock: 'M'
+ capslock+shift: '\u05e6'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: '\u05ea'
+ base: '\u05ea'
+ shift: '<'
+ capslock: ','
+ capslock+shift: '\u05ea'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '\u05e5'
+ base: '\u05e5'
+ shift: '>'
+ capslock: '.'
+ capslock+shift: '\u05e5'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '.'
+ base: '.'
+ shift: '?'
+ capslock: '/'
+ capslock+shift: '.'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-nb_NO.kcm b/xt9/keychars/qwerty-nb_NO.kcm
new file mode 100644
index 0000000..a611593
--- /dev/null
+++ b/xt9/keychars/qwerty-nb_NO.kcm
@@ -0,0 +1,441 @@
+type FULL
+
+key GRAVE {
+ label, number: '|'
+ base: '|'
+ shift: '\u00a7'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '"'
+ alt: '@'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt: '\u00a3'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '\u00a4'
+ alt: '$'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u20ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '/'
+ alt: '{'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '('
+ alt: '['
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: ')'
+ alt: ']'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: '='
+ alt: '}'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '+'
+ base: '+'
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '\\'
+ base: '\\'
+ shift: '\u0300'
+ alt: '\u0301'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label: '\u00c5'
+ number: '\u00e5'
+ base: '\u00e5'
+ shift, capslock: '\u00c5'
+ capslock+shift: '\u00e5'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '\u0308'
+ base: '\u0308'
+ shift: '\u0302'
+ alt: '\u0303'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label: '\u00d8'
+ number: '\u00f8'
+ base: '\u00f8'
+ shift, capslock: '\u00d8'
+ capslock+shift: '\u00f8'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label: '\u00c6'
+ number: '\u00e6'
+ base: '\u00e6'
+ shift, capslock: '\u00c6'
+ capslock+shift: '\u00e6'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\''
+ base: '\''
+ shift: '*'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ alt: '\u00b5'
+ alt+shift: none
+ capslock+alt: '\u00b5'
+ capslock+shift: 'm'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: ';'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-nl_BE.kcm b/xt9/keychars/qwerty-nl_BE.kcm
new file mode 100644
index 0000000..903dfce
--- /dev/null
+++ b/xt9/keychars/qwerty-nl_BE.kcm
@@ -0,0 +1,482 @@
+type FULL
+
+key GRAVE {
+ label, number: '\u00b2'
+ base: '\u00b2'
+ shift: '\u00b3'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '&'
+ base: '&'
+ shift, capslock: '1'
+ alt: '|'
+ alt+shift: none
+ capslock+alt: '|'
+ capslock+shift: '&'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 2 {
+ label, number: '\u00e9'
+ base: '\u00e9'
+ shift, capslock: '2'
+ alt: '@'
+ alt+shift: none
+ capslock+alt: '@'
+ capslock+shift: '\u00e9'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '"'
+ base: '"'
+ shift, capslock: '3'
+ alt: '#'
+ alt+shift: none
+ capslock+alt: '#'
+ capslock+shift: '"'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '\''
+ base: '\''
+ shift, capslock: '4'
+ alt: '{'
+ alt+shift: none
+ capslock+alt: '{'
+ capslock+shift: '\''
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '('
+ base: '('
+ shift, capslock: '5'
+ alt: '['
+ alt+shift: none
+ capslock+alt: '['
+ capslock+shift: '('
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '\u00a7'
+ base: '\u00a7'
+ shift, capslock: '6'
+ alt: '^'
+ alt+shift: none
+ capslock+alt: '^'
+ capslock+shift: '\u00a7'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 7 {
+ label, number: '\u00e8'
+ base: '\u00e8'
+ shift, capslock: '7'
+ capslock+shift: '\u00e8'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '!'
+ base: '!'
+ shift, capslock: '8'
+ capslock+shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '\u00e7'
+ base: '\u00e7'
+ shift, capslock: '9'
+ alt: '{'
+ alt+shift: none
+ capslock+alt: '{'
+ capslock+shift: '\u00e7'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label, number: '\u00e0'
+ base: '\u00e0'
+ shift, capslock: '0'
+ alt: '}'
+ alt+shift: none
+ capslock+alt: '}'
+ capslock+shift: '\u00e0'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: ')'
+ base: ')'
+ shift, capslock: '\u00b0'
+ capslock+shift: ')'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '-'
+ base: '-'
+ shift, capslock: '_'
+ capslock+shift: '-'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '\u0302'
+ base: '\u0302'
+ shift, capslock: '\u0308'
+ alt: '['
+ alt+shift: none
+ capslock+alt: '['
+ capslock+shift: '\u0302'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '$'
+ base: '$'
+ shift, capslock: '*'
+ alt: ']'
+ alt+shift: none
+ capslock+alt: ']'
+ capslock+shift: '$'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\u00f9'
+ base: '\u00f9'
+ shift, capslock: '%'
+ alt: '\u0301'
+ alt+shift, capslock+alt: '\u0301'
+ capslock+shift: '\u00f9'
+ capslock+alt+shift: '\u0301'
+ ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\u00b5'
+ base: '\u00b5'
+ shift, capslock: '\u00a3'
+ alt: '\u0300'
+ alt+shift, capslock+alt: '\u0300'
+ capslock+shift: '\u00b5'
+ capslock+alt+shift: '\u0300'
+ ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt: '\\'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift, capslock: '?'
+ capslock+shift: ','
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift, capslock: '.'
+ capslock+shift: ';'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: ':'
+ base: ':'
+ shift, capslock: '/'
+ capslock+shift: ':'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '='
+ base: '='
+ shift, capslock: '+'
+ alt: '\u0303'
+ alt+shift, capslock+alt: '\u0303'
+ capslock+shift: '='
+ capslock+alt+shift: '\u0303'
+ ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-nl_NL.kcm b/xt9/keychars/qwerty-nl_NL.kcm
new file mode 100644
index 0000000..4445bc0
--- /dev/null
+++ b/xt9/keychars/qwerty-nl_NL.kcm
@@ -0,0 +1,504 @@
+type FULL
+
+key GRAVE {
+ label, number: '\u0300'
+ base: '\u0300'
+ shift: '\u0303'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt: '\u00a1'
+ alt+shift: '\u00b9'
+ ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '@'
+ alt: '\u00b2'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt: '\u00b3'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt: '\u00a4'
+ alt+shift: '\u00a3'
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u20ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '\u0302'
+ alt: '\u00bc'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ alt: '\u00bd'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ alt: '\u00be'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ alt: '\u2018'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ alt: '\u2019'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt: '\u00a5'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ alt: '\u00d7'
+ alt+shift: '\u00f7'
+ ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ alt: '\u00e4'
+ alt+shift, capslock+alt: '\u00c4'
+ capslock+shift: 'q'
+ capslock+alt+shift: '\u00e4'
+ ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ alt: '\u00e5'
+ alt+shift, capslock+alt: '\u00c5'
+ capslock+shift: 'w'
+ capslock+alt+shift: '\u00e5'
+ ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u00e9'
+ alt+shift, capslock+alt: '\u00c9'
+ capslock+shift: 'e'
+ capslock+alt+shift: '\u00e9'
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ alt: '\u00ae'
+ alt+shift: none
+ capslock+alt: '\u00ae'
+ capslock+shift: 'r'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ alt: '\u00fe'
+ alt+shift, capslock+alt: '\u00de'
+ capslock+shift: 't'
+ capslock+alt+shift: '\u00fe'
+ ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ alt: '\u00fc'
+ alt+shift, capslock+alt: '\u00dc'
+ capslock+shift: 'y'
+ capslock+alt+shift: '\u00fc'
+ ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ alt: '\u00fa'
+ alt+shift, capslock+alt: '\u00da'
+ capslock+shift: 'u'
+ capslock+alt+shift: '\u00fa'
+ ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ alt: '\u00ed'
+ alt+shift, capslock+alt: '\u00cd'
+ capslock+shift: 'i'
+ capslock+alt+shift: '\u00ed'
+ ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ alt: '\u00f3'
+ alt+shift, capslock+alt: '\u00d3'
+ capslock+shift: 'o'
+ capslock+alt+shift: '\u00f3'
+ ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ alt: '\u00f6'
+ alt+shift, capslock+alt: '\u00d6'
+ capslock+shift: 'p'
+ capslock+alt+shift: '\u00f6'
+ ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '['
+ base: '['
+ shift: '{'
+ alt: '\u00ab'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ']'
+ base: ']'
+ shift: '}'
+ alt: '\u00bb'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt: '\u00ac'
+ alt+shift: '\u00a6'
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ alt: '\u00e1'
+ alt+shift, capslock+alt: '\u00c1'
+ capslock+shift: 'a'
+ capslock+alt+shift: '\u00e1'
+ ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ alt: '\u00df'
+ alt+shift: '\u00a7'
+ capslock+alt: '\u00df'
+ capslock+shift: 's'
+ capslock+alt+shift: '\u00a7'
+ ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ alt: '\u00f0'
+ alt+shift, capslock+alt: '\u00d0'
+ capslock+shift: 'd'
+ capslock+alt+shift: '\u00f0'
+ ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ alt: '\u00f8'
+ alt+shift, capslock+alt: '\u00d8'
+ capslock+shift: 'l'
+ capslock+alt+shift: '\u00f8'
+ ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift: ':'
+ alt: '\u00b6'
+ alt+shift: '\u00b0'
+ ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\u1df0'
+ base: '\u1df0'
+ shift: '\u1df1'
+ alt: '\u00b4'
+ alt+shift: '\u00a8'
+ ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ alt: '\u00e6'
+ alt+shift, capslock+alt: '\u00c6'
+ capslock+shift: 'z'
+ capslock+alt+shift: '\u00e6'
+ ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ alt: '\u00a9'
+ alt+shift: '\u00a2'
+ capslock+alt: '\u00a9'
+ capslock+shift: 'c'
+ capslock+alt+shift: '\u00a2'
+ ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ alt: '\u00f1'
+ alt+shift, capslock+alt: '\u00d1'
+ capslock+shift: 'n'
+ capslock+alt+shift: '\u00f1'
+ ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ alt: '\u00b5'
+ alt+shift: none
+ capslock+alt: '\u00b5'
+ capslock+shift: 'm'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '<'
+ alt: '\u00e7'
+ alt+shift, capslock+alt: '\u00c7'
+ capslock+alt+shift: '\u00e7'
+ ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '/'
+ base: '/'
+ shift: '?'
+ alt: '\u00bf'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-pl_PL.kcm b/xt9/keychars/qwerty-pl_PL.kcm
new file mode 100644
index 0000000..2cbe69f
--- /dev/null
+++ b/xt9/keychars/qwerty-pl_PL.kcm
@@ -0,0 +1,438 @@
+type FULL
+
+key GRAVE {
+ label, number: '`'
+ base: '`'
+ shift: '~'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '@'
+ alt, ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt, ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt, ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt, ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '^'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u0119'
+ alt+shift, capslock+alt: '\u0118'
+ capslock+shift: 'e'
+ capslock+alt+shift: '\u0119'
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'u'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ alt: '\u00f3'
+ alt+shift, capslock+alt: '\u00d3'
+ capslock+shift: 'o'
+ capslock+alt+shift: '\u00f3'
+ ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '['
+ base: '['
+ shift: '{'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ']'
+ base: ']'
+ shift: '}'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ alt: '\u0105'
+ alt+shift, capslock+alt: '\u0104'
+ capslock+shift: 'a'
+ capslock+alt+shift: '\u0105'
+ ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ alt: '\u015b'
+ alt+shift, capslock+alt: '\u015a'
+ capslock+shift: 's'
+ capslock+alt+shift: '\u015b'
+ ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ alt: '\u0142'
+ alt+shift, capslock+alt: '\u0141'
+ capslock+shift: 'l'
+ capslock+alt+shift: '\u0142'
+ ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\''
+ base: '\''
+ shift: '"'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ alt: '\u017c'
+ alt+shift, capslock+alt: '\u017b'
+ capslock+shift: 'z'
+ capslock+alt+shift: '\u017c'
+ ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ alt: '\u017a'
+ alt+shift, capslock+alt: '\u0179'
+ capslock+shift: 'x'
+ capslock+alt+shift: '\u017a'
+ ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ alt: '\u0107'
+ alt+shift, capslock+alt: '\u0106'
+ capslock+shift: 'c'
+ capslock+alt+shift: '\u0107'
+ ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ alt: '\u0144'
+ alt+shift, capslock+alt: '\u0143'
+ capslock+shift: 'n'
+ capslock+alt+shift: '\u0144'
+ ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '<'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '/'
+ base: '/'
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-pt_BR.kcm b/xt9/keychars/qwerty-pt_BR.kcm
new file mode 100644
index 0000000..40b8fd9
--- /dev/null
+++ b/xt9/keychars/qwerty-pt_BR.kcm
@@ -0,0 +1,439 @@
+type FULL
+
+key GRAVE {
+ label, number: '\''
+ base: '\''
+ shift: '"'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt: '\u00b9'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '@'
+ alt: '\u00b2'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt: '\u00b3'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt: '\u00a3'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u00a2'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '\u0308'
+ alt: '\u00ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ alt: '\u00a7'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ alt: '/'
+ alt+shift: none
+ capslock+alt: '/'
+ capslock+shift: 'q'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ alt: '?'
+ alt+shift: none
+ capslock+alt: '?'
+ capslock+shift: 'w'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u00b0'
+ alt+shift: none
+ capslock+alt: '\u00b0'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '\u0301'
+ base: '\u0301'
+ shift: '\u0300'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '['
+ base: '['
+ shift: '{'
+ alt: '\u00aa'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label: '\u00c7'
+ number: '\u00e7'
+ base: '\u00e7'
+ shift, capslock: '\u00c7'
+ capslock+shift: '\u00e7'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\u0303'
+ base: '\u0303'
+ shift: '\u0302'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: ']'
+ base: ']'
+ shift: '}'
+ alt: '\u00ba'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '<'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: ';'
+ base: ';'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-pt_PT.kcm b/xt9/keychars/qwerty-pt_PT.kcm
new file mode 100644
index 0000000..3f5fa02
--- /dev/null
+++ b/xt9/keychars/qwerty-pt_PT.kcm
@@ -0,0 +1,433 @@
+type FULL
+
+key GRAVE {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '"'
+ alt: '@'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt: '\u00a3'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt: '\u00a7'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u20ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '/'
+ alt: '{'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '('
+ alt: '['
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: ')'
+ alt: ']'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: '='
+ alt: '}'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '\''
+ base: '\''
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '\u00ab'
+ base: '\u00ab'
+ shift: '\u00bb'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '+'
+ base: '+'
+ shift: '*'
+ alt: '\u0308'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '\u0301'
+ base: '\u0301'
+ shift: '\u0300'
+ alt: ']'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label: '\u00c7'
+ number: '\u00e7'
+ base: '\u00e7'
+ shift, capslock: '\u00c7'
+ capslock+shift: '\u00e7'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\u00ba'
+ base: '\u00ba'
+ shift: '\u00aa'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\u0303'
+ base: '\u0303'
+ shift: '\u0302'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: ';'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-ru_RU.kcm b/xt9/keychars/qwerty-ru_RU.kcm
new file mode 100644
index 0000000..529149d
--- /dev/null
+++ b/xt9/keychars/qwerty-ru_RU.kcm
@@ -0,0 +1,414 @@
+type FULL
+
+key GRAVE {
+ label, number: '`'
+ base: '\u0451'
+ shift, capslock: '\u0401'
+ capslock+shift: '\u0451'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '"'
+ alt, ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '\u2116'
+ alt, ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: ';'
+ alt, ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt, ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: '\u0439'
+ shift, capslock: '\u0419'
+ capslock+shift: '\u0439'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: '\u0446'
+ shift, capslock: '\u0426'
+ capslock+shift: '\u0446'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: '\u0443'
+ shift, capslock: '\u0423'
+ capslock+shift: '\u0443'
+ alt, ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: '\u043a'
+ shift, capslock: '\u041a'
+ capslock+shift: '\u043a'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: '\u0435'
+ shift, capslock: '\u0415'
+ capslock+shift: '\u0435'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: '\u043d'
+ shift, capslock: '\u041d'
+ capslock+shift: '\u043d'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: '\u0433'
+ shift, capslock: '\u0413'
+ capslock+shift: '\u0433'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: '\u0448'
+ shift, capslock: '\u0428'
+ capslock+shift: '\u0448'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: '\u0449'
+ shift, capslock: '\u0429'
+ capslock+shift: '\u0449'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: '\u0437'
+ shift, capslock: '\u0417'
+ capslock+shift: '\u0437'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '['
+ base: '\u0445'
+ shift, capslock: '\u0425'
+ capslock+shift: '\u0445'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ']'
+ base: '\u044a'
+ shift, capslock: '\u042a'
+ capslock+shift: '\u044a'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\\'
+ base: '\\'
+ shift: '/'
+ alt, ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: '\u0444'
+ shift, capslock: '\u0424'
+ capslock+shift: '\u0444'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: '\u044b'
+ shift, capslock: '\u042b'
+ capslock+shift: '\u044b'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: '\u0432'
+ shift, capslock: '\u0412'
+ capslock+shift: '\u0432'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: '\u0430'
+ shift, capslock: '\u0410'
+ capslock+shift: '\u0430'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: '\u043f'
+ shift, capslock: '\u041f'
+ capslock+shift: '\u043f'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: '\u0440'
+ shift, capslock: '\u0420'
+ capslock+shift: '\u0440'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: '\u043e'
+ shift, capslock: '\u041e'
+ capslock+shift: '\u043e'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: '\u043b'
+ shift, capslock: '\u041b'
+ capslock+shift: '\u043b'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: '\u0434'
+ shift, capslock: '\u0414'
+ capslock+shift: '\u0434'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: '\u0436'
+ shift, capslock: '\u0416'
+ capslock+shift: '\u0436'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\''
+ base: '\u044d'
+ shift, capslock: '\u042d'
+ capslock+shift: '\u044d'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: '\u044f'
+ shift, capslock: '\u042f'
+ capslock+shift: '\u044f'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: '\u0447'
+ shift, capslock: '\u0427'
+ capslock+shift: '\u0447'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: '\u0441'
+ shift, capslock: '\u0421'
+ capslock+shift: '\u0441'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: '\u043c'
+ shift, capslock: '\u041c'
+ capslock+shift: '\u043c'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: '\u0438'
+ shift, capslock: '\u0418'
+ capslock+shift: '\u0438'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: '\u0442'
+ shift, capslock: '\u0422'
+ capslock+shift: '\u0442'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: '\u044c'
+ shift, capslock: '\u042c'
+ capslock+shift: '\u044c'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: '\u0431'
+ shift, capslock: '\u0411'
+ capslock+shift: '\u0431'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '\u044e'
+ shift, capslock: '\u042e'
+ capslock+shift: '\u044e'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '/'
+ base: '.'
+ shift: ','
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-sv_SE.kcm b/xt9/keychars/qwerty-sv_SE.kcm
new file mode 100644
index 0000000..ec5110f
--- /dev/null
+++ b/xt9/keychars/qwerty-sv_SE.kcm
@@ -0,0 +1,443 @@
+type FULL
+
+key GRAVE {
+ label, number: '\u00a7'
+ base: '\u00a7'
+ shift: '\u00bd'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '"'
+ alt: '@'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt: '\u00a3'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '\u00a4'
+ alt: '$'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u20ac'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '/'
+ alt: '{'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '('
+ alt: '['
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: ')'
+ alt: ']'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: '='
+ alt: '}'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '+'
+ base: '+'
+ shift: '?'
+ alt: '\\'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '\u0301'
+ base: '\u0301'
+ shift: '\u0300'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label: '\u00c5'
+ number: '\u00e5'
+ base: '\u00e5'
+ shift, capslock: '\u00c5'
+ capslock+shift: '\u00e5'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: '\u0308'
+ base: '\u0308'
+ shift: '\u0302'
+ alt: '\u0303'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label: '\u00d6'
+ number: '\u00f6'
+ base: '\u00f6'
+ shift, capslock: '\u00d6'
+ capslock+shift: '\u00f6'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label: '\u00c4'
+ number: '\u00e4'
+ base: '\u00e4'
+ shift, capslock: '\u00c4'
+ capslock+shift: '\u00e4'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\''
+ base: '\''
+ shift: '*'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt: '|'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ alt: '\u00b5'
+ alt+shift: none
+ capslock+alt: '\u00b5'
+ capslock+shift: 'm'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: ';'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-tr_TR.kcm b/xt9/keychars/qwerty-tr_TR.kcm
new file mode 100644
index 0000000..f017ca6
--- /dev/null
+++ b/xt9/keychars/qwerty-tr_TR.kcm
@@ -0,0 +1,475 @@
+type FULL
+
+key GRAVE {
+ label, number: '"'
+ base: '"'
+ shift: '\u00e9'
+ alt: '<'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt: '>'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '\''
+ alt: '\u00a3'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '^'
+ alt: '#'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '+'
+ alt: '$'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt: '\u00bd'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '/'
+ alt: '{'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '('
+ alt: '['
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: ')'
+ alt: ']'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: '='
+ alt: '}'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '*'
+ base: '*'
+ shift: '?'
+ alt: '\\'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt: '|'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ alt: '@'
+ alt+shift: none
+ capslock+alt: '@'
+ capslock+shift: 'q'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ alt: '\u20ac'
+ alt+shift: none
+ capslock+alt: '\u20ac'
+ capslock+shift: 'e'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label: '\u011e'
+ number: '\u011f'
+ base: '\u011f'
+ shift, capslock: '\u011e'
+ alt: '\u0308'
+ alt+shift: none
+ capslock+alt: '\u0308'
+ capslock+shift: '\u011f'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label: '\u00dc'
+ number: '\u00fc'
+ base: '\u00fc'
+ shift, capslock: '\u00dc'
+ alt: '\u0303'
+ alt+shift: none
+ capslock+alt: '\u0303'
+ capslock+shift: '\u00fc'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ alt: '\u00e6'
+ alt+shift: none
+ capslock+alt: '\u00c6'
+ capslock+shift: 'a'
+ capslock+alt+shift: '\u00e6'
+ ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ alt: '\u00df'
+ alt+shift: none
+ capslock+alt: '\u00df'
+ capslock+shift: 's'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label: '\u015e'
+ number: '\u015f'
+ base: '\u015f'
+ shift, capslock: '\u015e'
+ alt: '\u0301'
+ alt+shift: none
+ capslock+alt: '\u0301'
+ capslock+shift: '\u015f'
+ capslock+alt+shift: none
+ ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label: '\u0130'
+ number: 'i'
+ base: 'i'
+ shift, capslock: '\u0130'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: ','
+ base: ','
+ shift: ';'
+ alt: '\u0300'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '<'
+ base: '<'
+ shift: '>'
+ alt: '|'
+ alt+shift: none
+ ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label: '\u00d6'
+ number: '\u00f6'
+ base: '\u00f6'
+ shift, capslock: '\u00d6'
+ capslock+shift: '\u00f6'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label: '\u00c7'
+ number: '\u00e7'
+ base: '\u00e7'
+ shift, capslock: '\u00c7'
+ capslock+shift: '\u00e7'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '.'
+ base: '.'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-zh_CN.kcm b/xt9/keychars/qwerty-zh_CN.kcm
new file mode 100644
index 0000000..7c79dc0
--- /dev/null
+++ b/xt9/keychars/qwerty-zh_CN.kcm
@@ -0,0 +1,407 @@
+type FULL
+
+key GRAVE {
+ label, number: '`'
+ base: '`'
+ shift: '~'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '@'
+ alt, ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt, ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt, ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt, ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '^'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ capslock+shift: 'e'
+ alt, ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '['
+ base: '['
+ shift: '{'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ']'
+ base: ']'
+ shift: '}'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\''
+ base: '\''
+ shift: '"'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '<'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '/'
+ base: '/'
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keychars/qwerty-zh_TW.kcm b/xt9/keychars/qwerty-zh_TW.kcm
new file mode 100644
index 0000000..7c79dc0
--- /dev/null
+++ b/xt9/keychars/qwerty-zh_TW.kcm
@@ -0,0 +1,407 @@
+type FULL
+
+key GRAVE {
+ label, number: '`'
+ base: '`'
+ shift: '~'
+ alt, ctrl, meta: none
+}
+
+key 1 {
+ label, number: '1'
+ base: '1'
+ shift: '!'
+ alt, ctrl, meta: none
+}
+
+key 2 {
+ label, number: '2'
+ base: '2'
+ shift: '@'
+ alt, ctrl, meta: none
+}
+
+key 3 {
+ label, number: '3'
+ base: '3'
+ shift: '#'
+ alt, ctrl, meta: none
+}
+
+key 4 {
+ label, number: '4'
+ base: '4'
+ shift: '$'
+ alt, ctrl, meta: none
+}
+
+key 5 {
+ label, number: '5'
+ base: '5'
+ shift: '%'
+ alt, ctrl, meta: none
+}
+
+key 6 {
+ label, number: '6'
+ base: '6'
+ shift: '^'
+ alt, ctrl, meta: none
+}
+
+key 7 {
+ label, number: '7'
+ base: '7'
+ shift: '&'
+ alt, ctrl, meta: none
+}
+
+key 8 {
+ label, number: '8'
+ base: '8'
+ shift: '*'
+ alt, ctrl, meta: none
+}
+
+key 9 {
+ label, number: '9'
+ base: '9'
+ shift: '('
+ alt, ctrl, meta: none
+}
+
+key 0 {
+ label, number: '0'
+ base: '0'
+ shift: ')'
+ alt, ctrl, meta: none
+}
+
+key MINUS {
+ label, number: '-'
+ base: '-'
+ shift: '_'
+ alt, ctrl, meta: none
+}
+
+key EQUALS {
+ label, number: '='
+ base: '='
+ shift: '+'
+ alt, ctrl, meta: none
+}
+
+key TAB {
+ label, number: '\t'
+ base: '\t'
+ alt, ctrl, meta: none
+}
+
+key Q {
+ label: 'Q'
+ number: '7'
+ base: 'q'
+ shift, capslock: 'Q'
+ capslock+shift: 'q'
+ alt, ctrl, meta: none
+}
+
+key W {
+ label: 'W'
+ number: '9'
+ base: 'w'
+ shift, capslock: 'W'
+ capslock+shift: 'w'
+ alt, ctrl, meta: none
+}
+
+key E {
+ label: 'E'
+ number: '3'
+ base: 'e'
+ shift, capslock: 'E'
+ capslock+shift: 'e'
+ alt, ctrl, meta: none
+}
+
+key R {
+ label: 'R'
+ number: '7'
+ base: 'r'
+ shift, capslock: 'R'
+ capslock+shift: 'r'
+ alt, ctrl, meta: none
+}
+
+key T {
+ label: 'T'
+ number: '8'
+ base: 't'
+ shift, capslock: 'T'
+ capslock+shift: 't'
+ alt, ctrl, meta: none
+}
+
+key Y {
+ label: 'Y'
+ number: '9'
+ base: 'y'
+ shift, capslock: 'Y'
+ capslock+shift: 'y'
+ alt, ctrl, meta: none
+}
+
+key U {
+ label: 'U'
+ number: '8'
+ base: 'u'
+ shift, capslock: 'U'
+ capslock+shift: 'u'
+ alt, ctrl, meta: none
+}
+
+key I {
+ label: 'I'
+ number: '4'
+ base: 'i'
+ shift, capslock: 'I'
+ capslock+shift: 'i'
+ alt, ctrl, meta: none
+}
+
+key O {
+ label: 'O'
+ number: '6'
+ base: 'o'
+ shift, capslock: 'O'
+ capslock+shift: 'o'
+ alt, ctrl, meta: none
+}
+
+key P {
+ label: 'P'
+ number: '7'
+ base: 'p'
+ shift, capslock: 'P'
+ capslock+shift: 'p'
+ alt, ctrl, meta: none
+}
+
+key LEFT_BRACKET {
+ label, number: '['
+ base: '['
+ shift: '{'
+ alt, ctrl, meta: none
+}
+
+key RIGHT_BRACKET {
+ label, number: ']'
+ base: ']'
+ shift: '}'
+ alt, ctrl, meta: none
+}
+
+key BACKSLASH {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
+
+key A {
+ label: 'A'
+ number: '2'
+ base: 'a'
+ shift, capslock: 'A'
+ capslock+shift: 'a'
+ alt, ctrl, meta: none
+}
+
+key S {
+ label: 'S'
+ number: '7'
+ base: 's'
+ shift, capslock: 'S'
+ capslock+shift: 's'
+ alt, ctrl, meta: none
+}
+
+key D {
+ label: 'D'
+ number: '3'
+ base: 'd'
+ shift, capslock: 'D'
+ capslock+shift: 'd'
+ alt, ctrl, meta: none
+}
+
+key F {
+ label: 'F'
+ number: '3'
+ base: 'f'
+ shift, capslock: 'F'
+ capslock+shift: 'f'
+ alt, ctrl, meta: none
+}
+
+key G {
+ label: 'G'
+ number: '4'
+ base: 'g'
+ shift, capslock: 'G'
+ capslock+shift: 'g'
+ alt, ctrl, meta: none
+}
+
+key H {
+ label: 'H'
+ number: '4'
+ base: 'h'
+ shift, capslock: 'H'
+ capslock+shift: 'h'
+ alt, ctrl, meta: none
+}
+
+key J {
+ label: 'J'
+ number: '5'
+ base: 'j'
+ shift, capslock: 'J'
+ capslock+shift: 'j'
+ alt, ctrl, meta: none
+}
+
+key K {
+ label: 'K'
+ number: '5'
+ base: 'k'
+ shift, capslock: 'K'
+ capslock+shift: 'k'
+ alt, ctrl, meta: none
+}
+
+key L {
+ label: 'L'
+ number: '5'
+ base: 'l'
+ shift, capslock: 'L'
+ capslock+shift: 'l'
+ alt, ctrl, meta: none
+}
+
+key SEMICOLON {
+ label, number: ';'
+ base: ';'
+ shift: ':'
+ alt, ctrl, meta: none
+}
+
+key APOSTROPHE {
+ label, number: '\''
+ base: '\''
+ shift: '"'
+ alt, ctrl, meta: none
+}
+
+key ENTER {
+ label, number: '\n'
+ base: '\n'
+ alt, ctrl, meta: none
+}
+
+key Z {
+ label: 'Z'
+ number: '9'
+ base: 'z'
+ shift, capslock: 'Z'
+ capslock+shift: 'z'
+ alt, ctrl, meta: none
+}
+
+key X {
+ label: 'X'
+ number: '9'
+ base: 'x'
+ shift, capslock: 'X'
+ capslock+shift: 'x'
+ alt, ctrl, meta: none
+}
+
+key C {
+ label: 'C'
+ number: '2'
+ base: 'c'
+ shift, capslock: 'C'
+ capslock+shift: 'c'
+ alt, ctrl, meta: none
+}
+
+key V {
+ label: 'V'
+ number: '8'
+ base: 'v'
+ shift, capslock: 'V'
+ capslock+shift: 'v'
+ alt, ctrl, meta: none
+}
+
+key B {
+ label: 'B'
+ number: '2'
+ base: 'b'
+ shift, capslock: 'B'
+ capslock+shift: 'b'
+ alt, ctrl, meta: none
+}
+
+key N {
+ label: 'N'
+ number: '6'
+ base: 'n'
+ shift, capslock: 'N'
+ capslock+shift: 'n'
+ alt, ctrl, meta: none
+}
+
+key M {
+ label: 'M'
+ number: '6'
+ base: 'm'
+ shift, capslock: 'M'
+ capslock+shift: 'm'
+ alt, ctrl, meta: none
+}
+
+key COMMA {
+ label, number: ','
+ base: ','
+ shift: '<'
+ alt, ctrl, meta: none
+}
+
+key PERIOD {
+ label, number: '.'
+ base: '.'
+ shift: '>'
+ alt, ctrl, meta: none
+}
+
+key SLASH {
+ label, number: '/'
+ base: '/'
+ shift: '?'
+ alt, ctrl, meta: none
+}
+
+key SPACE {
+ label, number: ' '
+ base: ' '
+ alt, ctrl, meta: none
+}
+
+key EUROPE_2 {
+ label, number: '\\'
+ base: '\\'
+ shift: '|'
+ alt, ctrl, meta: none
+}
diff --git a/xt9/keylayout/qwerty-ar_EG.kl b/xt9/keylayout/qwerty-ar_EG.kl
new file mode 100644
index 0000000..2d7e164
--- /dev/null
+++ b/xt9/keylayout/qwerty-ar_EG.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-cs_CZ.kl b/xt9/keylayout/qwerty-cs_CZ.kl
new file mode 100644
index 0000000..adc4d92
--- /dev/null
+++ b/xt9/keylayout/qwerty-cs_CZ.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Z WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Y WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-da_DK.kl b/xt9/keylayout/qwerty-da_DK.kl
new file mode 100644
index 0000000..74d5299
--- /dev/null
+++ b/xt9/keylayout/qwerty-da_DK.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-de_CH.kl b/xt9/keylayout/qwerty-de_CH.kl
new file mode 100644
index 0000000..adc4d92
--- /dev/null
+++ b/xt9/keylayout/qwerty-de_CH.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Z WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Y WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-de_DE.kl b/xt9/keylayout/qwerty-de_DE.kl
new file mode 100644
index 0000000..adc4d92
--- /dev/null
+++ b/xt9/keylayout/qwerty-de_DE.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Z WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Y WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-el_GR.kl b/xt9/keylayout/qwerty-el_GR.kl
new file mode 100644
index 0000000..74d5299
--- /dev/null
+++ b/xt9/keylayout/qwerty-el_GR.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-en_CA.kl b/xt9/keylayout/qwerty-en_CA.kl
new file mode 100644
index 0000000..2d7e164
--- /dev/null
+++ b/xt9/keylayout/qwerty-en_CA.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-en_GB.kl b/xt9/keylayout/qwerty-en_GB.kl
new file mode 100644
index 0000000..74d5299
--- /dev/null
+++ b/xt9/keylayout/qwerty-en_GB.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-en_GR.kl b/xt9/keylayout/qwerty-en_GR.kl
new file mode 100644
index 0000000..74d5299
--- /dev/null
+++ b/xt9/keylayout/qwerty-en_GR.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-en_US.kl b/xt9/keylayout/qwerty-en_US.kl
new file mode 100644
index 0000000..2d7e164
--- /dev/null
+++ b/xt9/keylayout/qwerty-en_US.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-es_ES.kl b/xt9/keylayout/qwerty-es_ES.kl
new file mode 100644
index 0000000..74d5299
--- /dev/null
+++ b/xt9/keylayout/qwerty-es_ES.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-es_US.kl b/xt9/keylayout/qwerty-es_US.kl
new file mode 100644
index 0000000..2d7e164
--- /dev/null
+++ b/xt9/keylayout/qwerty-es_US.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-fi_FI.kl b/xt9/keylayout/qwerty-fi_FI.kl
new file mode 100644
index 0000000..74d5299
--- /dev/null
+++ b/xt9/keylayout/qwerty-fi_FI.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-fr_BE.kl b/xt9/keylayout/qwerty-fr_BE.kl
new file mode 100644
index 0000000..2a6e33e
--- /dev/null
+++ b/xt9/keylayout/qwerty-fr_BE.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 A WAKE UNLOCK
+key 17 Z WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 Q WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 M WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 W WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 COMMA WAKE UNLOCK
+key 51 SEMICOLON WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-fr_CA.kl b/xt9/keylayout/qwerty-fr_CA.kl
new file mode 100644
index 0000000..74d5299
--- /dev/null
+++ b/xt9/keylayout/qwerty-fr_CA.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-fr_CH.kl b/xt9/keylayout/qwerty-fr_CH.kl
new file mode 100644
index 0000000..adc4d92
--- /dev/null
+++ b/xt9/keylayout/qwerty-fr_CH.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Z WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Y WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-fr_FR.kl b/xt9/keylayout/qwerty-fr_FR.kl
new file mode 100644
index 0000000..2a6e33e
--- /dev/null
+++ b/xt9/keylayout/qwerty-fr_FR.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 A WAKE UNLOCK
+key 17 Z WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 Q WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 M WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 W WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 COMMA WAKE UNLOCK
+key 51 SEMICOLON WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-hu_HU.kl b/xt9/keylayout/qwerty-hu_HU.kl
new file mode 100644
index 0000000..adc4d92
--- /dev/null
+++ b/xt9/keylayout/qwerty-hu_HU.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Z WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Y WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-it_CH.kl b/xt9/keylayout/qwerty-it_CH.kl
new file mode 100644
index 0000000..74d5299
--- /dev/null
+++ b/xt9/keylayout/qwerty-it_CH.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-it_IT.kl b/xt9/keylayout/qwerty-it_IT.kl
new file mode 100644
index 0000000..74d5299
--- /dev/null
+++ b/xt9/keylayout/qwerty-it_IT.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-iw_IL.kl b/xt9/keylayout/qwerty-iw_IL.kl
new file mode 100644
index 0000000..2d7e164
--- /dev/null
+++ b/xt9/keylayout/qwerty-iw_IL.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-nb_NO.kl b/xt9/keylayout/qwerty-nb_NO.kl
new file mode 100644
index 0000000..74d5299
--- /dev/null
+++ b/xt9/keylayout/qwerty-nb_NO.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-nl_BE.kl b/xt9/keylayout/qwerty-nl_BE.kl
new file mode 100644
index 0000000..2a6e33e
--- /dev/null
+++ b/xt9/keylayout/qwerty-nl_BE.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 A WAKE UNLOCK
+key 17 Z WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 Q WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 M WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 W WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 COMMA WAKE UNLOCK
+key 51 SEMICOLON WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-nl_NL.kl b/xt9/keylayout/qwerty-nl_NL.kl
new file mode 100644
index 0000000..2d7e164
--- /dev/null
+++ b/xt9/keylayout/qwerty-nl_NL.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-pl_PL.kl b/xt9/keylayout/qwerty-pl_PL.kl
new file mode 100644
index 0000000..2d7e164
--- /dev/null
+++ b/xt9/keylayout/qwerty-pl_PL.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-pt_BR.kl b/xt9/keylayout/qwerty-pt_BR.kl
new file mode 100644
index 0000000..74d5299
--- /dev/null
+++ b/xt9/keylayout/qwerty-pt_BR.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-pt_PT.kl b/xt9/keylayout/qwerty-pt_PT.kl
new file mode 100644
index 0000000..74d5299
--- /dev/null
+++ b/xt9/keylayout/qwerty-pt_PT.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-ru_RU.kl b/xt9/keylayout/qwerty-ru_RU.kl
new file mode 100644
index 0000000..2d7e164
--- /dev/null
+++ b/xt9/keylayout/qwerty-ru_RU.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-sv_SE.kl b/xt9/keylayout/qwerty-sv_SE.kl
new file mode 100644
index 0000000..74d5299
--- /dev/null
+++ b/xt9/keylayout/qwerty-sv_SE.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-tr_TR.kl b/xt9/keylayout/qwerty-tr_TR.kl
new file mode 100644
index 0000000..74d5299
--- /dev/null
+++ b/xt9/keylayout/qwerty-tr_TR.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-zh_CN.kl b/xt9/keylayout/qwerty-zh_CN.kl
new file mode 100644
index 0000000..2d7e164
--- /dev/null
+++ b/xt9/keylayout/qwerty-zh_CN.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK
diff --git a/xt9/keylayout/qwerty-zh_TW.kl b/xt9/keylayout/qwerty-zh_TW.kl
new file mode 100644
index 0000000..2d7e164
--- /dev/null
+++ b/xt9/keylayout/qwerty-zh_TW.kl
@@ -0,0 +1,86 @@
+key 41 GRAVE WAKE UNLOCK
+key 2 1 WAKE UNLOCK
+key 3 2 WAKE UNLOCK
+key 4 3 WAKE UNLOCK
+key 5 4 WAKE UNLOCK
+key 6 5 WAKE UNLOCK
+key 7 6 WAKE UNLOCK
+key 8 7 WAKE UNLOCK
+key 9 8 WAKE UNLOCK
+key 10 9 WAKE UNLOCK
+key 11 0 WAKE UNLOCK
+key 12 MINUS WAKE UNLOCK
+key 13 EQUALS WAKE UNLOCK
+key 14 DEL WAKE UNLOCK
+key 15 TAB WAKE UNLOCK
+key 16 Q WAKE UNLOCK
+key 17 W WAKE UNLOCK
+key 18 E WAKE UNLOCK
+key 19 R WAKE UNLOCK
+key 20 T WAKE UNLOCK
+key 21 Y WAKE UNLOCK
+key 22 U WAKE UNLOCK
+key 23 I WAKE UNLOCK
+key 24 O WAKE UNLOCK
+key 25 P WAKE UNLOCK
+key 26 LEFT_BRACKET WAKE UNLOCK
+key 27 RIGHT_BRACKET WAKE UNLOCK
+key 43 BACKSLASH WAKE UNLOCK
+key 58 CAPS_LOCK WAKE UNLOCK
+key 30 A WAKE UNLOCK
+key 31 S WAKE UNLOCK
+key 32 D WAKE UNLOCK
+key 33 F WAKE UNLOCK
+key 34 G WAKE UNLOCK
+key 35 H WAKE UNLOCK
+key 36 J WAKE UNLOCK
+key 37 K WAKE UNLOCK
+key 38 L WAKE UNLOCK
+key 39 SEMICOLON WAKE UNLOCK
+key 40 APOSTROPHE WAKE UNLOCK
+key 28 ENTER WAKE UNLOCK
+key 42 SHIFT_LEFT WAKE UNLOCK
+key 44 Z WAKE UNLOCK
+key 45 X WAKE UNLOCK
+key 46 C WAKE UNLOCK
+key 47 V WAKE UNLOCK
+key 48 B WAKE UNLOCK
+key 49 N WAKE UNLOCK
+key 50 M WAKE UNLOCK
+key 51 COMMA WAKE UNLOCK
+key 52 PERIOD WAKE UNLOCK
+key 53 SLASH WAKE UNLOCK
+key 54 SHIFT_RIGHT WAKE UNLOCK
+key 29 CTRL_LEFT WAKE UNLOCK
+key 217 SEARCH WAKE UNLOCK
+key 57 SPACE WAKE UNLOCK
+key 100 ALT_RIGHT WAKE UNLOCK
+key 97 CTRL_RIGHT WAKE UNLOCK
+key 115 VOLUME_UP WAKE UNLOCK
+key 142 SLEEP WAKE UNLOCK
+key 105 DPAD_LEFT WAKE UNLOCK
+key 103 DPAD_UP WAKE UNLOCK
+key 108 DPAD_DOWN WAKE UNLOCK
+key 106 DPAD_RIGHT WAKE UNLOCK
+key 158 BACK WAKE UNLOCK
+key 238 WIRELESS WAKE UNLOCK
+key 237 BLUETOOTH WAKE UNLOCK
+key 60 TOUCHPAD WAKE UNLOCK
+key 224 BRIGHTNESS_DOWN WAKE UNLOCK
+key 225 BRIGHTNESS_UP WAKE UNLOCK
+key 61 BRIGHTNESS_AUTO WAKE UNLOCK
+key 212 CAPTURE WAKE UNLOCK
+key 150 EXPLORER WAKE UNLOCK
+key 62 SETTINGS WAKE UNLOCK
+key 165 MEDIA_PREVIOUS WAKE UNLOCK
+key 164 MEDIA_PLAY_PAUSE WAKE UNLOCK
+key 163 MEDIA_NEXT WAKE UNLOCK
+key 114 VOLUME_DOWN WAKE UNLOCK
+key 113 VOLUME_MUTE WAKE UNLOCK
+key 172 HOME WAKE UNLOCK
+key 139 MENU WAKE UNLOCK
+key 104 PAGE_UP WAKE UNLOCK
+key 109 PAGE_DOWN WAKE UNLOCK
+key 107 MOVE_END WAKE UNLOCK
+key 102 MOVE_HOME WAKE UNLOCK
+key 86 EUROPE_2 WAKE UNLOCK