#include <ibusmarshalers.h>
#include "engineproxy.h"
-#define BUS_ENGINE_PROXY_GET_PRIVATE(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), BUS_TYPE_ENGINE_PROXY, BusEngineProxyPrivate))
-
enum {
COMMIT_TEXT,
FORWARD_KEY_EVENT,
};
-/* BusEngineProxyPriv */
-struct _BusEngineProxyPrivate {
- gboolean enabled;
- IBusEngineDesc *desc;
-
- IBusPropList *prop_list;
-};
-typedef struct _BusEngineProxyPrivate BusEngineProxyPrivate;
-
static guint engine_signals[LAST_SIGNAL] = { 0 };
// static guint engine_signals[LAST_SIGNAL] = { 0 };
"connection", connection,
NULL);
- BusEngineProxyPrivate *priv;
- priv = BUS_ENGINE_PROXY_GET_PRIVATE (engine);
- priv->desc = desc;
+ engine->desc = desc;
g_object_ref (desc);
+ if (desc->layout != NULL && desc->layout[0] != '\0') {
+ engine->keymap = ibus_keymap_new (desc->layout);
+ }
+
+ if (engine->keymap == NULL) {
+ engine->keymap = ibus_keymap_new ("us");
+ }
return engine;
}
parent_class = (IBusProxyClass *) g_type_class_peek_parent (klass);
- g_type_class_add_private (klass, sizeof (BusEngineProxyPrivate));
-
ibus_object_class->destroy = (IBusObjectDestroyFunc) bus_engine_proxy_real_destroy;
proxy_class->ibus_signal = bus_engine_proxy_ibus_signal;
static void
bus_engine_proxy_init (BusEngineProxy *engine)
{
- BusEngineProxyPrivate *priv;
- priv = BUS_ENGINE_PROXY_GET_PRIVATE (engine);
-
- priv->enabled = FALSE;
- priv->prop_list = NULL;
- priv->desc = NULL;
+ engine->enabled = FALSE;
+ engine->prop_list = NULL;
+ engine->desc = NULL;
+ engine->keymap = NULL;
}
static void
bus_engine_proxy_real_destroy (BusEngineProxy *engine)
{
- BusEngineProxyPrivate *priv;
- priv = BUS_ENGINE_PROXY_GET_PRIVATE (engine);
-
- if (priv->prop_list) {
- g_object_unref (priv->prop_list);
- priv->prop_list = NULL;
+ if (engine->prop_list) {
+ g_object_unref (engine->prop_list);
+ engine->prop_list = NULL;
}
if (ibus_proxy_get_connection ((IBusProxy *) engine)) {
G_TYPE_INVALID);
}
- if (priv->desc) {
- g_object_unref (priv->desc);
- priv->desc = NULL;
+ if (engine->desc) {
+ g_object_unref (engine->desc);
+ engine->desc = NULL;
+ }
+
+ if (engine->keymap) {
+ g_object_unref (engine->keymap);
+ engine->keymap = NULL;
}
IBUS_OBJECT_CLASS(parent_class)->destroy (IBUS_OBJECT (engine));
g_assert (message != NULL);
BusEngineProxy *engine;
- BusEngineProxyPrivate *priv;
IBusError *error;
gint i;
};
engine = BUS_ENGINE_PROXY (proxy);
- priv = BUS_ENGINE_PROXY_GET_PRIVATE (engine);
for (i = 0; ; i++) {
if (signals[i].member == NULL)
else if (ibus_message_is_signal (message, IBUS_INTERFACE_ENGINE, "RegisterProperties")) {
gboolean retval;
- if (priv->prop_list) {
- g_object_unref (priv->prop_list);
- priv->prop_list = NULL;
+ if (engine->prop_list) {
+ g_object_unref (engine->prop_list);
+ engine->prop_list = NULL;
}
retval = ibus_message_get_args (message,
&error,
- IBUS_TYPE_PROP_LIST, &priv->prop_list,
+ IBUS_TYPE_PROP_LIST, &engine->prop_list,
G_TYPE_INVALID);
if (!retval) {
- priv->prop_list = NULL;
+ engine->prop_list = NULL;
goto failed;
}
- g_signal_emit (engine, engine_signals[REGISTER_PROPERTIES], 0, priv->prop_list);
+ g_signal_emit (engine, engine_signals[REGISTER_PROPERTIES], 0, engine->prop_list);
}
else if (ibus_message_is_signal (message, IBUS_INTERFACE_ENGINE, "UpdateProperty")) {
IBusProperty *prop;
void
bus_engine_proxy_process_key_event (BusEngineProxy *engine,
guint keyval,
+ guint keycode,
guint state,
GFunc return_cb,
gpointer user_data)
IBusError *error;
gboolean retval;
+ if (keycode != 0 && engine->keymap != NULL) {
+ guint t = ibus_keymap_lookup_keysym (engine->keymap, keycode, state);
+ if (t != IBUS_VoidSymbol) {
+ keyval = t;
+ }
+ }
+
retval = ibus_proxy_call_with_reply ((IBusProxy *) engine,
"ProcessKeyEvent",
&pending,
-1,
&error,
G_TYPE_UINT, &keyval,
+ G_TYPE_UINT, &keycode,
G_TYPE_UINT, &state,
G_TYPE_INVALID);
if (!retval) {
{
g_assert (BUS_IS_ENGINE_PROXY (engine));
- BusEngineProxyPrivate *priv;
- priv = BUS_ENGINE_PROXY_GET_PRIVATE (engine);
-
- return priv->desc;
+ return engine->desc;
}
struct _BusEngineProxy {
IBusProxy parent;
/* instance members */
+ gboolean enabled;
+ IBusEngineDesc *desc;
+ IBusKeymap *keymap;
+ IBusPropList *prop_list;
};
struct _BusEngineProxyClass {
IBusEngineDesc *bus_engine_proxy_get_desc (BusEngineProxy *engine);
void bus_engine_proxy_process_key_event (BusEngineProxy *engine,
guint keyval,
+ guint keycode,
guint state,
GFunc return_cn,
gpointer user_data);
ibus->config = NULL;
ibus->hotkey_profile = ibus_hotkey_profile_new ();
+ ibus->keymap = ibus_keymap_new ("us");
bus_ibus_impl_reload_config (ibus);
ibus->hotkey_profile = NULL;
}
+ if (ibus->keymap != NULL) {
+ g_object_unref (ibus->keymap);
+ ibus->keymap = NULL;
+ }
+
bus_server_quit (BUS_DEFAULT_SERVER);
ibus_object_destroy ((IBusObject *) BUS_DEFAULT_SERVER);
IBUS_OBJECT_CLASS(parent_class)->destroy (IBUS_OBJECT (ibus));
return ibus->hotkey_profile;
}
+IBusKeymap *
+bus_ibus_impl_get_keymap (BusIBusImpl *ibus)
+{
+
+ g_assert (BUS_IS_IBUS_IMPL (ibus));
+
+ return ibus->keymap;
+}
+
BusRegistry *
bus_ibus_impl_get_registry (BusIBusImpl *ibus)
{
(bus_ibus_impl_get_default ())
#define BUS_DEFAULT_HOTKEY_PROFILE \
(bus_ibus_impl_get_hotkey_profile (BUS_DEFAULT_IBUS))
+#define BUS_DEFAULT_KEYMAP \
+ (bus_ibus_impl_get_keymap (BUS_DEFAULT_IBUS))
#define BUS_DEFAULT_REGISTRY \
(bus_ibus_impl_get_registry (BUS_DEFAULT_IBUS))
BusPanelProxy *panel;
IBusConfig *config;
IBusHotkeyProfile *hotkey_profile;
+ IBusKeymap *keymap;
};
const gchar *path);
IBusHotkeyProfile
*bus_ibus_impl_get_hotkey_profile (BusIBusImpl *ibus);
+IBusKeymap *bus_ibus_impl_get_keymap (BusIBusImpl *ibus);
BusRegistry *bus_ibus_impl_get_registry (BusIBusImpl *ibus);
G_END_DECLS
static gboolean bus_input_context_filter_keyboard_shortcuts
(BusInputContext *context,
guint keyval,
+ guint keycode,
guint modifiers);
static gboolean bus_input_context_send_signal (BusInputContext *context,
const gchar *signal_name,
}
static IBusMessage *
-_ic_process_key_event (BusInputContext *context,
- IBusMessage *message,
- BusConnection *connection)
+_ic_process_key_event (BusInputContext *context,
+ IBusMessage *message,
+ BusConnection *connection)
{
g_assert (BUS_IS_INPUT_CONTEXT (context));
g_assert (message != NULL);
g_assert (BUS_IS_CONNECTION (connection));
IBusMessage *reply = NULL;
- guint keyval, modifiers;
+ guint keyval, keycode, modifiers;
gboolean retval;
IBusError *error;
retval = ibus_message_get_args (message,
&error,
G_TYPE_UINT, &keyval,
+ G_TYPE_UINT, &keycode,
G_TYPE_UINT, &modifiers,
G_TYPE_INVALID);
return reply;
}
- retval = bus_input_context_filter_keyboard_shortcuts (context, keyval, modifiers);
+ retval = bus_input_context_filter_keyboard_shortcuts (context, keyval, keycode, modifiers);
if (retval) {
- priv->filter_release = TRUE;
reply = ibus_message_new_method_return (message);
ibus_message_append_args (reply,
G_TYPE_BOOLEAN, &retval,
bus_engine_proxy_process_key_event (priv->engine,
keyval,
+ keycode,
modifiers,
(GFunc) _ic_process_key_event_reply_cb,
call_data);
static gboolean
bus_input_context_filter_keyboard_shortcuts (BusInputContext *context,
guint keyval,
+ guint keycode,
guint modifiers)
{
g_assert (BUS_IS_INPUT_CONTEXT (context));
GQuark event;
+ if (keycode != 0) {
+ IBusKeymap *keymap = BUS_DEFAULT_KEYMAP;
+ if (keymap != NULL) {
+ guint t = ibus_keymap_lookup_keysym (keymap,
+ keycode,
+ modifiers);
+ if (t != IBUS_VoidSymbol)
+ keyval = t;
+ }
+ }
+
if (trigger == 0) {
trigger = g_quark_from_static_string ("trigger");
next_factory = g_quark_from_static_string ("next-engine");
case GDK_KEY_RELEASE:
retval = ibus_input_context_process_key_event (ibusimcontext->ibuscontext,
event->keyval,
+ event->hardware_keycode - 8,
event->state | IBUS_RELEASE_MASK);
break;
case GDK_KEY_PRESS:
retval = ibus_input_context_process_key_event (ibusimcontext->ibuscontext,
event->keyval,
+ event->hardware_keycode - 8,
event->state);
break;
default:
case GDK_KEY_RELEASE:
retval = ibus_input_context_process_key_event (ibusimcontext->ibuscontext,
event->keyval,
+ event->hardware_keycode - 8,
event->state | IBUS_RELEASE_MASK);
break;
case GDK_KEY_PRESS:
retval = ibus_input_context_process_key_event (ibusimcontext->ibuscontext,
event->keyval,
+ event->hardware_keycode - 8,
event->state);
break;
default:
}
if (ibus_input_context_process_key_event (x11ic->context,
- event.keyval, event.state)) {
+ event.keyval,
+ event.hardware_keycode - 8,
+ event.state)) {
if (! x11ic->has_preedit_area) {
_xim_set_cursor_location (x11ic);
}
# if not 1, append datestamp to the version number.
m4_define([ibus_released], [0])
m4_define([ibus_major_version], [1])
-m4_define([ibus_minor_version], [1])
+m4_define([ibus_minor_version], [2])
m4_define([ibus_micro_version], [0])
m4_define(ibus_maybe_datestamp,
m4_esyscmd([if test x]ibus_released[ != x1; then date +.%Y%m%d | tr -d '\n\r'; fi]))
# If only source code changed, lt_revision + 1
# If any interface added, lt_age + 1
# If any interfaces changed or removed, lt_current + 1
-m4_define([lt_current], [0])
+m4_define([lt_current], [1])
m4_define([lt_revision], [0])
m4_define([lt_age], [0])
LT_VERSION_INFO="lt_current:lt_revision:lt_age"
util/IMdkit/Makefile
data/Makefile
data/icons/Makefile
+data/keymaps/Makefile
docs/Makefile
docs/reference/Makefile
docs/reference/ibus/Makefile
SUBDIRS = \
icons \
+ keymaps \
$(NULL)
-
schemasdir = $(GCONF_SCHEMA_FILE_DIR)
schemas_in_files = ibus.schemas.in
schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
--- /dev/null
+# vim:set noet ts=4:
+#
+# ibus - The Input Bus
+#
+# Copyright (c) 2007-2008 Huang Peng <shawn.p.huang@gmail.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+# Boston, MA 02111-1307 USA
+
+# keymaps = \
+# ar \
+# common \
+# da \
+# de \
+# de-ch \
+# en-gb \
+# es \
+# et \
+# fi \
+# fo \
+# fr \
+# fr-be \
+# fr-ca \
+# fr-ch \
+# hr \
+# hu \
+# is \
+# it \
+# jp \
+# lt \
+# lv \
+# mk \
+# modifiers \
+# nl \
+# nl-be \
+# no \
+# pl \
+# pt \
+# pt-br \
+# ru \
+# sl \
+# sv \
+# th \
+# tr \
+# us \
+# $(NULL)
+
+keymaps = \
+ common \
+ modifiers \
+ jp \
+ us \
+ $(NULL)
+
+keymaps_DATA = $(keymaps)
+keymapsdir = $(pkgdatadir)/keymaps
+
+EXTRA_DIST = \
+ $(keymaps) \
+ $(NULL)
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ shift keycode 3 = at
+ shift keycode 4 = numbersign
+ shift keycode 5 = dollar
+ shift keycode 6 = percent
+ shift keycode 7 = asciicircum
+ shift keycode 8 = ampersand
+ shift keycode 9 = asterisk
+ shift keycode 10 = parenleft
+ shift keycode 11 = parenright
+keycode 12 = minus
+ shift keycode 12 = underscore
+keycode 13 = equal
+ shift keycode 13 = plus
+ altgr keycode 16 = Arabic_dad
+ shift altgr keycode 16 = Arabic_fatha
+ altgr keycode 17 = Arabic_sad
+ shift altgr keycode 17 = Arabic_fathatan
+ altgr keycode 18 = Arabic_theh
+ shift altgr keycode 18 = Arabic_damma
+ altgr keycode 19 = Arabic_qaf
+ shift altgr keycode 19 = Arabic_dammatan
+ altgr keycode 20 = Arabic_feh
+# shift altgr keycode 20 = UFEF9
+ altgr keycode 21 = Arabic_ghain
+ shift altgr keycode 21 = Arabic_hamzaunderalef
+ altgr keycode 22 = Arabic_ain
+ shift altgr keycode 22 = grave
+ altgr keycode 23 = Arabic_ha
+ shift altgr keycode 23 = division
+ altgr keycode 24 = Arabic_khah
+ shift altgr keycode 24 = multiply
+ altgr keycode 25 = Arabic_hah
+ shift altgr keycode 25 = Arabic_semicolon
+keycode 26 = bracketleft
+ shift keycode 26 = braceleft
+ altgr keycode 26 = Arabic_jeem
+keycode 27 = bracketright
+ shift keycode 27 = braceright
+ altgr keycode 27 = Arabic_dal
+ altgr keycode 30 = Arabic_sheen
+ shift altgr keycode 30 = backslash
+ altgr keycode 31 = Arabic_seen
+ altgr keycode 32 = Arabic_yeh
+ shift altgr keycode 32 = bracketleft
+ altgr keycode 33 = Arabic_beh
+ shift altgr keycode 33 = bracketright
+ altgr keycode 34 = Arabic_lam
+# shift altgr keycode 34 = UFEF7
+ altgr keycode 35 = Arabic_alef
+ shift altgr keycode 35 = Arabic_hamzaonalef
+ altgr keycode 36 = Arabic_teh
+ shift altgr keycode 36 = Arabic_tatweel
+ altgr keycode 37 = Arabic_noon
+ shift altgr keycode 37 = Arabic_comma
+ altgr keycode 38 = Arabic_meem
+ shift altgr keycode 38 = slash
+keycode 39 = semicolon
+ shift keycode 39 = colon
+ altgr keycode 39 = Arabic_kaf
+keycode 40 = apostrophe
+ shift keycode 40 = quotedbl
+ altgr keycode 40 = Arabic_tah
+keycode 41 = grave
+ shift keycode 41 = asciitilde
+ altgr keycode 41 = Arabic_thal
+ shift altgr keycode 41 = Arabic_shadda
+keycode 43 = backslash
+ shift keycode 43 = bar
+ altgr keycode 43 = less
+ shift altgr keycode 43 = greater
+ altgr keycode 44 = Arabic_hamzaonyeh
+ shift altgr keycode 44 = asciitilde
+ altgr keycode 45 = Arabic_hamza
+ shift altgr keycode 45 = Arabic_sukun
+ altgr keycode 46 = Arabic_hamzaonwaw
+ shift altgr keycode 46 = Arabic_kasra
+ altgr keycode 47 = Arabic_ra
+ shift altgr keycode 47 = Arabic_kasratan
+# altgr keycode 48 = UFEFB
+# shift altgr keycode 48 = UFEF5
+ altgr keycode 49 = Arabic_alefmaksura
+ shift altgr keycode 49 = Arabic_maddaonalef
+ altgr keycode 50 = Arabic_tehmarbuta
+ shift altgr keycode 50 = apostrophe
+keycode 51 = comma
+ shift keycode 51 = less
+ altgr keycode 51 = Arabic_waw
+keycode 52 = period
+ shift keycode 52 = greater
+ altgr keycode 52 = Arabic_zain
+keycode 53 = slash
+ shift keycode 53 = question
+ altgr keycode 53 = Arabic_zah
+ shift altgr keycode 53 = Arabic_question_mark
--- /dev/null
+include modifiers
+keycode 1 = Escape
+ shift keycode 1 = Escape
+keycode 2 = 1
+keycode 3 = 2
+keycode 4 = 3
+keycode 5 = 4
+keycode 6 = 5
+keycode 7 = 6
+keycode 8 = 7
+keycode 9 = 8
+keycode 10 = 9
+keycode 11 = 0
+keycode 14 = BackSpace
+keycode 15 = Tab
+ shift keycode 15 = ISO_Left_Tab
+keycode 16 = q
+ shift keycode 16 = Q
+keycode 17 = w
+ shift keycode 17 = W
+keycode 18 = e
+ shift keycode 18 = E
+keycode 19 = r
+ shift keycode 19 = R
+keycode 20 = t
+ shift keycode 20 = T
+keycode 21 = y
+ shift keycode 21 = Y
+keycode 22 = u
+ shift keycode 22 = U
+keycode 23 = i
+ shift keycode 23 = I
+keycode 24 = o
+ shift keycode 24 = O
+keycode 25 = p
+ shift keycode 25 = P
+keycode 28 = Return
+ shift keycode 28 = Return
+keycode 30 = a
+ shift keycode 30 = A
+keycode 31 = s
+ shift keycode 31 = S
+keycode 32 = d
+ shift keycode 32 = D
+keycode 33 = f
+ shift keycode 33 = F
+keycode 34 = g
+ shift keycode 34 = G
+keycode 35 = h
+ shift keycode 35 = H
+keycode 36 = j
+ shift keycode 36 = J
+keycode 37 = k
+ shift keycode 37 = K
+keycode 38 = l
+ shift keycode 38 = L
+keycode 44 = z
+ shift keycode 44 = Z
+keycode 45 = x
+ shift keycode 45 = X
+keycode 46 = c
+ shift keycode 46 = C
+keycode 47 = v
+ shift keycode 47 = V
+keycode 48 = b
+ shift keycode 48 = B
+keycode 49 = n
+ shift keycode 49 = N
+keycode 50 = m
+ shift keycode 50 = M
+keycode 55 = KP_Multiply
+keycode 57 = space
+ shift keycode 57 = space
+keycode 58 = Caps_Lock
+keycode 59 = F1
+ shift keycode 59 = F1
+keycode 60 = F2
+ shift keycode 60 = F2
+keycode 61 = F3
+ shift keycode 61 = F3
+keycode 62 = F4
+ shift keycode 62 = F4
+keycode 63 = F5
+ shift keycode 63 = F5
+keycode 64 = F6
+ shift keycode 64 = F6
+keycode 65 = F7
+ shift keycode 65 = F7
+keycode 66 = F8
+ shift keycode 66 = F8
+keycode 67 = F9
+ shift keycode 67 = F9
+keycode 68 = F10
+ shift keycode 68 = F10
+keycode 69 = Num_Lock
+keycode 70 = Scroll_Lock
+keycode 71 = KP_Home
+ numlock keycode 71 = KP_7
+keycode 72 = KP_Up
+ numlock keycode 72 = KP_8
+keycode 73 = KP_Prior
+ numlock keycode 73 = KP_9
+keycode 74 = KP_Subtract
+keycode 75 = KP_Left
+ numlock keycode 75 = KP_4
+keycode 76 = KP_Begin
+ numlock keycode 76 = KP_5
+keycode 77 = KP_Right
+ numlock keycode 77 = KP_6
+keycode 78 = KP_Add
+keycode 79 = KP_End
+ numlock keycode 79 = KP_1
+keycode 80 = KP_Down
+ numlock keycode 80 = KP_2
+keycode 81 = KP_Next
+ numlock keycode 81 = KP_3
+keycode 82 = KP_Insert
+ numlock keycode 82 = KP_0
+keycode 83 = KP_Delete
+ numlock keycode 83 = KP_Separator
+keycode 86 = less
+ shift keycode 86 = greater
+ altgr keycode 86 = bar
+ shift altgr keycode 86 = brokenbar
+keycode 87 = F11
+ shift keycode 87 = F11
+keycode 88 = F12
+ shift keycode 88 = F12
+keycode 156 = KP_Enter
+keycode 181 = KP_Divide
+keycode 183 = Execute
+ shift keycode 183 = Execute
+keycode 199 = Home
+ shift keycode 199 = Home
+keycode 200 = Up
+ shift keycode 200 = Up
+keycode 201 = Page_Up
+ shift keycode 201 = Page_Up
+keycode 203 = Left
+ shift keycode 203 = Left
+keycode 205 = Right
+ shift keycode 205 = Right
+keycode 207 = End
+ shift keycode 207 = End
+keycode 208 = Down
+ shift keycode 208 = Down
+keycode 209 = Page_Down
+ shift keycode 209 = Page_Down
+keycode 210 = Insert
+ shift keycode 210 = Insert
+keycode 211 = Delete
+ shift keycode 211 = Delete
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = exclamdown
+ shift altgr keycode 2 = onesuperior
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = at
+ shift altgr keycode 3 = twosuperior
+ shift keycode 4 = numbersign
+ altgr keycode 4 = sterling
+ shift altgr keycode 4 = threesuperior
+ shift keycode 5 = currency
+ altgr keycode 5 = dollar
+ shift altgr keycode 5 = onequarter
+ shift keycode 6 = percent
+ altgr keycode 6 = onehalf
+ shift altgr keycode 6 = cent
+ shift keycode 7 = ampersand
+ altgr keycode 7 = yen
+ shift altgr keycode 7 = fiveeighths
+ shift keycode 8 = slash
+ altgr keycode 8 = braceleft
+ shift altgr keycode 8 = division
+ shift keycode 9 = parenleft
+ altgr keycode 9 = bracketleft
+ shift altgr keycode 9 = guillemotleft
+ shift keycode 10 = parenright
+ altgr keycode 10 = bracketright
+ shift altgr keycode 10 = guillemotright
+ shift keycode 11 = equal
+ altgr keycode 11 = braceright
+ shift altgr keycode 11 = degree
+keycode 12 = plus
+ shift keycode 12 = question
+ altgr keycode 12 = plusminus
+ shift altgr keycode 12 = questiondown
+keycode 13 = dead_acute
+ shift keycode 13 = dead_grave
+ altgr keycode 13 = bar
+ shift altgr keycode 13 = brokenbar
+ shift altgr keycode 16 = Greek_OMEGA
+ altgr keycode 17 = lstroke
+ shift altgr keycode 17 = Lstroke
+ altgr keycode 18 = EuroSign
+ shift altgr keycode 18 = cent
+ altgr keycode 19 = registered
+ altgr keycode 20 = thorn
+ shift altgr keycode 20 = THORN
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = downarrow
+ shift altgr keycode 22 = uparrow
+ altgr keycode 23 = rightarrow
+ shift altgr keycode 23 = idotless
+ altgr keycode 24 = oe
+ shift altgr keycode 24 = OE
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = aring
+ shift keycode 26 = Aring
+ altgr keycode 26 = dead_diaeresis
+ shift altgr keycode 26 = dead_abovering
+keycode 27 = dead_diaeresis
+ shift keycode 27 = dead_circumflex
+ altgr keycode 27 = dead_tilde
+ shift altgr keycode 27 = dead_caron
+ altgr keycode 30 = ordfeminine
+ shift altgr keycode 30 = masculine
+ altgr keycode 31 = ssharp
+ shift altgr keycode 31 = section
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = dstroke
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = eng
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = kra
+ altgr keycode 38 = lstroke
+ shift altgr keycode 38 = Lstroke
+keycode 39 = ae
+ shift keycode 39 = AE
+keycode 40 = oslash
+ shift keycode 40 = Ooblique
+ shift altgr keycode 40 = dead_caron
+keycode 41 = onehalf
+ shift keycode 41 = section
+ altgr keycode 41 = threequarters
+ shift altgr keycode 41 = paragraph
+keycode 43 = apostrophe
+ shift keycode 43 = asterisk
+ altgr keycode 43 = dead_doubleacute
+ shift altgr keycode 43 = multiply
+ altgr keycode 44 = guillemotleft
+ altgr keycode 45 = guillemotright
+ altgr keycode 46 = copyright
+ altgr keycode 47 = leftdoublequotemark
+ shift altgr keycode 47 = grave
+ altgr keycode 48 = rightdoublequotemark
+ altgr keycode 50 = mu
+ shift altgr keycode 50 = masculine
+keycode 51 = comma
+ shift keycode 51 = semicolon
+ altgr keycode 51 = dead_cedilla
+ shift altgr keycode 51 = dead_ogonek
+keycode 52 = period
+ shift keycode 52 = colon
+ altgr keycode 52 = periodcentered
+ shift altgr keycode 52 = dead_abovedot
+keycode 53 = minus
+ shift keycode 53 = underscore
+ altgr keycode 53 = hyphen
+ shift altgr keycode 53 = macron
+ altgr keycode 57 = nobreakspace
+keycode 86 = less
+ shift keycode 86 = greater
+ altgr keycode 86 = backslash
+ shift altgr keycode 86 = notsign
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = onesuperior
+ shift altgr keycode 2 = exclamdown
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = twosuperior
+ shift altgr keycode 3 = oneeighth
+ shift keycode 4 = section
+ altgr keycode 4 = threesuperior
+ shift altgr keycode 4 = sterling
+ shift keycode 5 = dollar
+ altgr keycode 5 = onequarter
+ shift altgr keycode 5 = currency
+ shift keycode 6 = percent
+ altgr keycode 6 = onehalf
+ shift altgr keycode 6 = threeeighths
+ shift keycode 7 = ampersand
+ altgr keycode 7 = threequarters
+ shift altgr keycode 7 = fiveeighths
+ shift keycode 8 = slash
+ altgr keycode 8 = braceleft
+ shift altgr keycode 8 = seveneighths
+ shift keycode 9 = parenleft
+ altgr keycode 9 = bracketleft
+ shift altgr keycode 9 = trademark
+ shift keycode 10 = parenright
+ altgr keycode 10 = bracketright
+ shift altgr keycode 10 = plusminus
+ shift keycode 11 = equal
+ altgr keycode 11 = braceright
+keycode 12 = ssharp
+ shift keycode 12 = question
+ altgr keycode 12 = backslash
+ shift altgr keycode 12 = questiondown
+keycode 13 = dead_acute
+ shift keycode 13 = dead_grave
+ altgr keycode 13 = dead_cedilla
+ shift altgr keycode 13 = dead_ogonek
+ altgr keycode 16 = at
+ shift altgr keycode 16 = Greek_OMEGA
+ altgr keycode 18 = EuroSign
+ altgr keycode 19 = paragraph
+ shift altgr keycode 19 = registered
+ altgr keycode 20 = tslash
+ shift altgr keycode 20 = Tslash
+keycode 21 = z
+ shift keycode 21 = Z
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = downarrow
+ shift altgr keycode 22 = uparrow
+ altgr keycode 23 = rightarrow
+ shift altgr keycode 23 = idotless
+ altgr keycode 24 = oslash
+ shift altgr keycode 24 = Ooblique
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = udiaeresis
+ shift keycode 26 = Udiaeresis
+ altgr keycode 26 = dead_diaeresis
+ shift altgr keycode 26 = dead_abovering
+keycode 27 = plus
+ shift keycode 27 = asterisk
+ altgr keycode 27 = dead_tilde
+ shift altgr keycode 27 = dead_macron
+ altgr keycode 30 = ae
+ shift altgr keycode 30 = AE
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = dstroke
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = eng
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = kra
+keycode 39 = odiaeresis
+ shift keycode 39 = Odiaeresis
+ altgr keycode 39 = dead_doubleacute
+keycode 40 = adiaeresis
+ shift keycode 40 = Adiaeresis
+ shift altgr keycode 40 = dead_caron
+keycode 41 = dead_circumflex
+ shift keycode 41 = degree
+ altgr keycode 41 = notsign
+keycode 43 = numbersign
+ shift keycode 43 = apostrophe
+ shift altgr keycode 43 = dead_breve
+keycode 44 = y
+ shift keycode 44 = Y
+ altgr keycode 44 = guillemotleft
+ altgr keycode 45 = guillemotright
+ altgr keycode 46 = cent
+ shift altgr keycode 46 = copyright
+ altgr keycode 47 = leftdoublequotemark
+ altgr keycode 48 = rightdoublequotemark
+ altgr keycode 50 = mu
+ shift altgr keycode 50 = masculine
+keycode 51 = comma
+ shift keycode 51 = semicolon
+ altgr keycode 51 = horizconnector
+ shift altgr keycode 51 = multiply
+keycode 52 = period
+ shift keycode 52 = colon
+ altgr keycode 52 = periodcentered
+ shift altgr keycode 52 = division
+keycode 53 = minus
+ shift keycode 53 = underscore
+ altgr keycode 53 = dead_belowdot
+ shift altgr keycode 53 = dead_abovedot
--- /dev/null
+include common
+ shift keycode 2 = plus
+ altgr keycode 2 = brokenbar
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = at
+ shift keycode 4 = asterisk
+ altgr keycode 4 = numbersign
+ shift keycode 5 = ccedilla
+ shift keycode 6 = percent
+ shift keycode 7 = ampersand
+ altgr keycode 7 = notsign
+ shift keycode 8 = slash
+ altgr keycode 8 = bar
+ shift keycode 9 = parenleft
+ altgr keycode 9 = cent
+ shift keycode 10 = parenright
+ shift keycode 11 = equal
+keycode 12 = apostrophe
+ shift keycode 12 = question
+ altgr keycode 12 = dead_acute
+keycode 13 = dead_circumflex
+ shift keycode 13 = dead_grave
+ altgr keycode 13 = dead_tilde
+ altgr keycode 18 = EuroSign
+keycode 21 = z
+ shift keycode 21 = Z
+keycode 26 = udiaeresis
+ shift keycode 26 = egrave
+ altgr keycode 26 = bracketleft
+keycode 27 = dead_diaeresis
+ shift keycode 27 = exclam
+ altgr keycode 27 = bracketright
+keycode 39 = odiaeresis
+ shift keycode 39 = eacute
+keycode 40 = adiaeresis
+ shift keycode 40 = agrave
+ altgr keycode 40 = braceleft
+keycode 41 = section
+ shift keycode 41 = degree
+keycode 43 = dollar
+ shift keycode 43 = sterling
+ altgr keycode 43 = braceright
+keycode 44 = y
+ shift keycode 44 = Y
+keycode 51 = comma
+ shift keycode 51 = semicolon
+keycode 52 = period
+ shift keycode 52 = colon
+keycode 53 = minus
+ shift keycode 53 = underscore
+ altgr keycode 86 = backslash
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = onesuperior
+ shift altgr keycode 2 = exclamdown
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = twosuperior
+ shift altgr keycode 3 = oneeighth
+ shift keycode 4 = sterling
+ altgr keycode 4 = threesuperior
+ shift keycode 5 = dollar
+ altgr keycode 5 = EuroSign
+ shift keycode 6 = percent
+ altgr keycode 6 = onehalf
+ shift altgr keycode 6 = threeeighths
+ shift keycode 7 = asciicircum
+ altgr keycode 7 = threequarters
+ shift altgr keycode 7 = fiveeighths
+ shift keycode 8 = ampersand
+ altgr keycode 8 = braceleft
+ shift altgr keycode 8 = seveneighths
+ shift keycode 9 = asterisk
+ altgr keycode 9 = bracketleft
+ shift altgr keycode 9 = trademark
+ shift keycode 10 = parenleft
+ altgr keycode 10 = bracketright
+ shift altgr keycode 10 = plusminus
+ shift keycode 11 = parenright
+ altgr keycode 11 = braceright
+ shift altgr keycode 11 = degree
+keycode 12 = minus
+ shift keycode 12 = underscore
+ altgr keycode 12 = backslash
+ shift altgr keycode 12 = questiondown
+keycode 13 = equal
+ shift keycode 13 = plus
+ altgr keycode 13 = dead_cedilla
+ shift altgr keycode 13 = dead_ogonek
+ altgr keycode 16 = at
+ shift altgr keycode 16 = Greek_OMEGA
+ altgr keycode 17 = lstroke
+ shift altgr keycode 17 = Lstroke
+ altgr keycode 19 = paragraph
+ shift altgr keycode 19 = registered
+ altgr keycode 20 = tslash
+ shift altgr keycode 20 = Tslash
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = downarrow
+ shift altgr keycode 22 = uparrow
+ altgr keycode 23 = rightarrow
+ shift altgr keycode 23 = idotless
+ altgr keycode 24 = oslash
+ shift altgr keycode 24 = Ooblique
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = bracketleft
+ shift keycode 26 = braceleft
+ altgr keycode 26 = dead_diaeresis
+ shift altgr keycode 26 = dead_abovering
+keycode 27 = bracketright
+ shift keycode 27 = braceright
+ altgr keycode 27 = dead_tilde
+ shift altgr keycode 27 = dead_macron
+ altgr keycode 30 = ae
+ shift altgr keycode 30 = AE
+ altgr keycode 31 = ssharp
+ shift altgr keycode 31 = section
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = dstroke
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = eng
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = kra
+ altgr keycode 38 = lstroke
+ shift altgr keycode 38 = Lstroke
+keycode 39 = semicolon
+ shift keycode 39 = colon
+ altgr keycode 39 = dead_acute
+ shift altgr keycode 39 = dead_doubleacute
+keycode 40 = apostrophe
+ shift keycode 40 = at
+ altgr keycode 40 = dead_circumflex
+ shift altgr keycode 40 = dead_caron
+keycode 41 = grave
+ shift keycode 41 = notsign
+ altgr keycode 41 = bar
+keycode 43 = numbersign
+ shift keycode 43 = asciitilde
+ altgr keycode 43 = dead_grave
+ shift altgr keycode 43 = dead_breve
+ altgr keycode 44 = guillemotleft
+ shift altgr keycode 44 = less
+ altgr keycode 45 = guillemotright
+ shift altgr keycode 45 = greater
+ altgr keycode 46 = cent
+ shift altgr keycode 46 = copyright
+ altgr keycode 47 = leftdoublequotemark
+ altgr keycode 48 = rightdoublequotemark
+ altgr keycode 50 = mu
+ shift altgr keycode 50 = masculine
+keycode 51 = comma
+ shift keycode 51 = less
+ altgr keycode 51 = horizconnector
+ shift altgr keycode 51 = multiply
+keycode 52 = period
+ shift keycode 52 = greater
+ altgr keycode 52 = periodcentered
+ shift altgr keycode 52 = division
+keycode 53 = slash
+ shift keycode 53 = question
+ altgr keycode 53 = dead_belowdot
+ shift altgr keycode 53 = dead_abovedot
+keycode 86 = backslash
+ shift keycode 86 = bar
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = bar
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = at
+ shift altgr keycode 3 = oneeighth
+ shift keycode 4 = periodcentered
+ altgr keycode 4 = numbersign
+ shift altgr keycode 4 = sterling
+ shift keycode 5 = dollar
+ altgr keycode 5 = asciitilde
+ shift keycode 6 = percent
+ altgr keycode 6 = onehalf
+ shift altgr keycode 6 = threeeighths
+ shift keycode 7 = ampersand
+ altgr keycode 7 = notsign
+ shift altgr keycode 7 = fiveeighths
+ shift keycode 8 = slash
+ shift altgr keycode 8 = seveneighths
+ shift keycode 9 = parenleft
+ shift altgr keycode 9 = trademark
+ shift keycode 10 = parenright
+ shift altgr keycode 10 = plusminus
+ shift keycode 11 = equal
+ shift altgr keycode 11 = degree
+keycode 12 = apostrophe
+ shift keycode 12 = question
+keycode 13 = exclamdown
+ shift keycode 13 = questiondown
+ shift altgr keycode 16 = Greek_OMEGA
+ altgr keycode 17 = lstroke
+ shift altgr keycode 17 = Lstroke
+ altgr keycode 18 = EuroSign
+ altgr keycode 19 = paragraph
+ shift altgr keycode 19 = registered
+ altgr keycode 20 = tslash
+ shift altgr keycode 20 = Tslash
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = downarrow
+ shift altgr keycode 22 = uparrow
+ altgr keycode 23 = rightarrow
+ shift altgr keycode 23 = idotless
+ altgr keycode 24 = oslash
+ shift altgr keycode 24 = Ooblique
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = dead_grave
+ shift keycode 26 = dead_circumflex
+ altgr keycode 26 = bracketleft
+ shift altgr keycode 26 = dead_abovering
+keycode 27 = plus
+ shift keycode 27 = asterisk
+ altgr keycode 27 = bracketright
+ shift altgr keycode 27 = dead_macron
+ altgr keycode 30 = ae
+ shift altgr keycode 30 = AE
+ altgr keycode 31 = ssharp
+ shift altgr keycode 31 = section
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = dstroke
+ altgr keycode 34 = eng
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = kra
+ altgr keycode 38 = lstroke
+ shift altgr keycode 38 = Lstroke
+keycode 39 = ntilde
+ shift keycode 39 = Ntilde
+ shift altgr keycode 39 = dead_doubleacute
+keycode 40 = dead_acute
+ shift keycode 40 = dead_diaeresis
+ altgr keycode 40 = braceleft
+keycode 41 = masculine
+ shift keycode 41 = ordfeminine
+ altgr keycode 41 = backslash
+keycode 43 = ccedilla
+ shift keycode 43 = Ccedilla
+ altgr keycode 43 = braceright
+ shift altgr keycode 43 = dead_breve
+ altgr keycode 44 = guillemotleft
+ altgr keycode 45 = guillemotright
+ altgr keycode 46 = cent
+ shift altgr keycode 46 = copyright
+ altgr keycode 47 = leftdoublequotemark
+ shift altgr keycode 47 = grave
+ altgr keycode 48 = rightdoublequotemark
+ altgr keycode 50 = mu
+keycode 51 = comma
+ shift keycode 51 = semicolon
+ altgr keycode 51 = horizconnector
+ shift altgr keycode 51 = multiply
+keycode 52 = period
+ shift keycode 52 = colon
+ shift altgr keycode 52 = division
+keycode 53 = minus
+ shift keycode 53 = underscore
+ altgr keycode 53 = dead_belowdot
+ shift altgr keycode 53 = dead_abovedot
+keycode 86 = less
+ shift keycode 86 = greater
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = at
+ shift keycode 4 = numbersign
+ altgr keycode 4 = sterling
+ shift keycode 5 = currency
+ altgr keycode 5 = dollar
+ shift keycode 6 = percent
+ shift keycode 7 = ampersand
+ shift keycode 8 = slash
+ altgr keycode 8 = braceleft
+ shift keycode 9 = parenleft
+ altgr keycode 9 = bracketleft
+ shift keycode 10 = parenright
+ altgr keycode 10 = bracketright
+ shift keycode 11 = equal
+ altgr keycode 11 = braceright
+keycode 12 = plus
+ shift keycode 12 = question
+ altgr keycode 12 = backslash
+keycode 13 = dead_acute
+ shift keycode 13 = dead_grave
+ altgr keycode 18 = EuroSign
+keycode 26 = udiaeresis
+ shift keycode 26 = Udiaeresis
+keycode 27 = otilde
+ shift keycode 27 = Otilde
+ altgr keycode 27 = section
+ altgr keycode 31 = scaron
+ shift altgr keycode 31 = Scaron
+keycode 39 = odiaeresis
+ shift keycode 39 = Odiaeresis
+keycode 40 = adiaeresis
+ shift keycode 40 = Adiaeresis
+ altgr keycode 40 = asciicircum
+keycode 41 = dead_caron
+ shift keycode 41 = dead_tilde
+keycode 43 = apostrophe
+ shift keycode 43 = asterisk
+ altgr keycode 43 = onehalf
+ altgr keycode 44 = zcaron
+ shift altgr keycode 44 = Zcaron
+keycode 51 = comma
+ shift keycode 51 = semicolon
+keycode 52 = period
+ shift keycode 52 = colon
+keycode 53 = minus
+ shift keycode 53 = underscore
+keycode 86 = less
+ shift keycode 86 = greater
+ altgr keycode 86 = bar
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = exclamdown
+ shift altgr keycode 2 = onesuperior
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = at
+ shift altgr keycode 3 = twosuperior
+ shift keycode 4 = numbersign
+ altgr keycode 4 = sterling
+ shift altgr keycode 4 = threesuperior
+ shift keycode 5 = currency
+ altgr keycode 5 = dollar
+ shift altgr keycode 5 = onequarter
+ shift keycode 6 = percent
+ altgr keycode 6 = onehalf
+ shift altgr keycode 6 = cent
+ shift keycode 7 = ampersand
+ altgr keycode 7 = yen
+ shift altgr keycode 7 = fiveeighths
+ shift keycode 8 = slash
+ altgr keycode 8 = braceleft
+ shift altgr keycode 8 = division
+ shift keycode 9 = parenleft
+ altgr keycode 9 = bracketleft
+ shift altgr keycode 9 = guillemotleft
+ shift keycode 10 = parenright
+ altgr keycode 10 = bracketright
+ shift altgr keycode 10 = guillemotright
+ shift keycode 11 = equal
+ altgr keycode 11 = braceright
+ shift altgr keycode 11 = degree
+keycode 12 = plus
+ shift keycode 12 = question
+ altgr keycode 12 = backslash
+ shift altgr keycode 12 = questiondown
+keycode 13 = dead_acute
+ shift keycode 13 = dead_grave
+ altgr keycode 13 = plusminus
+ shift altgr keycode 13 = notsign
+ altgr keycode 16 = at
+ shift altgr keycode 16 = Greek_OMEGA
+ altgr keycode 17 = lstroke
+ shift altgr keycode 17 = Lstroke
+ altgr keycode 18 = EuroSign
+ shift altgr keycode 18 = cent
+ altgr keycode 19 = registered
+ altgr keycode 20 = thorn
+ shift altgr keycode 20 = THORN
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = downarrow
+ shift altgr keycode 22 = uparrow
+ altgr keycode 23 = rightarrow
+ shift altgr keycode 23 = idotless
+ altgr keycode 24 = oe
+ shift altgr keycode 24 = OE
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = aring
+ shift keycode 26 = Aring
+ altgr keycode 26 = dead_diaeresis
+ shift altgr keycode 26 = dead_abovering
+keycode 27 = dead_diaeresis
+ shift keycode 27 = dead_circumflex
+ altgr keycode 27 = dead_tilde
+ shift altgr keycode 27 = dead_caron
+ altgr keycode 30 = ordfeminine
+ shift altgr keycode 30 = masculine
+ altgr keycode 31 = ssharp
+ shift altgr keycode 31 = section
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = dstroke
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = eng
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = kra
+ shift altgr keycode 37 = ampersand
+ altgr keycode 38 = lstroke
+ shift altgr keycode 38 = Lstroke
+keycode 39 = odiaeresis
+ shift keycode 39 = Odiaeresis
+ altgr keycode 39 = oslash
+ shift altgr keycode 39 = Ooblique
+keycode 40 = adiaeresis
+ shift keycode 40 = Adiaeresis
+ altgr keycode 40 = ae
+ shift altgr keycode 40 = AE
+keycode 41 = section
+ shift keycode 41 = onehalf
+ altgr keycode 41 = paragraph
+ shift altgr keycode 41 = threequarters
+keycode 43 = apostrophe
+ shift keycode 43 = asterisk
+ altgr keycode 43 = acute
+ shift altgr keycode 43 = multiply
+ altgr keycode 44 = guillemotleft
+ shift altgr keycode 44 = less
+ altgr keycode 45 = guillemotright
+ shift altgr keycode 45 = greater
+ altgr keycode 46 = copyright
+ altgr keycode 47 = leftdoublequotemark
+ shift altgr keycode 47 = grave
+ altgr keycode 48 = rightdoublequotemark
+ shift altgr keycode 48 = apostrophe
+ altgr keycode 50 = mu
+ shift altgr keycode 50 = masculine
+keycode 51 = comma
+ shift keycode 51 = semicolon
+ altgr keycode 51 = dead_cedilla
+ shift altgr keycode 51 = dead_ogonek
+keycode 52 = period
+ shift keycode 52 = colon
+ altgr keycode 52 = periodcentered
+ shift altgr keycode 52 = dead_abovedot
+keycode 53 = minus
+ shift keycode 53 = underscore
+ altgr keycode 53 = hyphen
+ shift altgr keycode 53 = macron
+ altgr keycode 57 = nobreakspace
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = at
+ shift keycode 4 = numbersign
+ altgr keycode 4 = sterling
+ shift keycode 5 = currency
+ altgr keycode 5 = dollar
+ shift keycode 6 = percent
+ shift keycode 7 = ampersand
+ shift keycode 8 = slash
+ altgr keycode 8 = braceleft
+ shift keycode 9 = parenleft
+ altgr keycode 9 = bracketleft
+ shift keycode 10 = parenright
+ altgr keycode 10 = bracketright
+ shift keycode 11 = equal
+ altgr keycode 11 = braceright
+keycode 12 = plus
+ shift keycode 12 = question
+ altgr keycode 12 = plusminus
+keycode 13 = dead_acute
+ altgr keycode 13 = bar
+ altgr keycode 18 = EuroSign
+keycode 26 = aring
+ shift keycode 26 = Aring
+keycode 27 = eth
+ shift keycode 27 = ETH
+ altgr keycode 27 = asciitilde
+keycode 39 = ae
+ shift keycode 39 = AE
+keycode 40 = oslash
+ shift keycode 40 = Ooblique
+keycode 41 = onehalf
+ shift keycode 41 = section
+keycode 43 = apostrophe
+ shift keycode 43 = asterisk
+keycode 51 = comma
+ shift keycode 51 = semicolon
+keycode 52 = period
+ shift keycode 52 = colon
+keycode 53 = minus
+ shift keycode 53 = underscore
+keycode 86 = less
+ shift keycode 86 = greater
+ altgr keycode 86 = backslash
--- /dev/null
+include common
+keycode 2 = ampersand
+ shift keycode 2 = 1
+ altgr keycode 2 = onesuperior
+ shift altgr keycode 2 = exclamdown
+keycode 3 = eacute
+ shift keycode 3 = 2
+ altgr keycode 3 = asciitilde
+ shift altgr keycode 3 = oneeighth
+keycode 4 = quotedbl
+ shift keycode 4 = 3
+ altgr keycode 4 = numbersign
+keycode 5 = apostrophe
+ shift keycode 5 = 4
+ altgr keycode 5 = braceleft
+keycode 6 = parenleft
+ shift keycode 6 = 5
+ altgr keycode 6 = bracketleft
+ shift altgr keycode 6 = threeeighths
+keycode 7 = minus
+ shift keycode 7 = 6
+ altgr keycode 7 = bar
+ shift altgr keycode 7 = fiveeighths
+keycode 8 = egrave
+ shift keycode 8 = 7
+ altgr keycode 8 = grave
+ shift altgr keycode 8 = seveneighths
+keycode 9 = underscore
+ shift keycode 9 = 8
+ altgr keycode 9 = backslash
+ shift altgr keycode 9 = trademark
+keycode 10 = ccedilla
+ shift keycode 10 = 9
+ altgr keycode 10 = asciicircum
+ shift altgr keycode 10 = plusminus
+keycode 11 = agrave
+ shift keycode 11 = 0
+ altgr keycode 11 = at
+keycode 12 = parenright
+ shift keycode 12 = degree
+ altgr keycode 12 = bracketright
+ shift altgr keycode 12 = questiondown
+keycode 13 = equal
+ shift keycode 13 = plus
+ altgr keycode 13 = braceright
+ shift altgr keycode 13 = dead_ogonek
+keycode 16 = a
+ shift keycode 16 = A
+ altgr keycode 16 = ae
+ shift altgr keycode 16 = AE
+keycode 17 = z
+ shift keycode 17 = Z
+ altgr keycode 17 = guillemotleft
+ altgr keycode 18 = EuroSign
+ altgr keycode 19 = paragraph
+ shift altgr keycode 19 = registered
+ altgr keycode 20 = tslash
+ shift altgr keycode 20 = Tslash
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = downarrow
+ shift altgr keycode 22 = uparrow
+ altgr keycode 23 = rightarrow
+ shift altgr keycode 23 = idotless
+ altgr keycode 24 = oslash
+ shift altgr keycode 24 = Ooblique
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = dead_circumflex
+ shift keycode 26 = dead_diaeresis
+ shift altgr keycode 26 = dead_abovering
+keycode 27 = dollar
+ shift keycode 27 = sterling
+ altgr keycode 27 = currency
+ shift altgr keycode 27 = dead_macron
+keycode 30 = q
+ shift keycode 30 = Q
+ shift altgr keycode 30 = Greek_OMEGA
+ altgr keycode 31 = ssharp
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = dstroke
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = eng
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = kra
+ altgr keycode 38 = lstroke
+ shift altgr keycode 38 = Lstroke
+keycode 39 = m
+ shift keycode 39 = M
+ shift altgr keycode 39 = masculine
+keycode 40 = ugrave
+ shift keycode 40 = percent
+ shift altgr keycode 40 = dead_caron
+keycode 41 = twosuperior
+ altgr keycode 41 = notsign
+keycode 43 = asterisk
+ shift keycode 43 = mu
+ altgr keycode 43 = dead_grave
+ shift altgr keycode 43 = dead_breve
+keycode 44 = w
+ shift keycode 44 = W
+ altgr keycode 45 = guillemotright
+ altgr keycode 46 = cent
+ shift altgr keycode 46 = copyright
+ altgr keycode 47 = leftdoublequotemark
+ altgr keycode 48 = rightdoublequotemark
+keycode 50 = comma
+ shift keycode 50 = question
+ altgr keycode 50 = dead_acute
+ shift altgr keycode 50 = dead_doubleacute
+keycode 51 = semicolon
+ shift keycode 51 = period
+ altgr keycode 51 = horizconnector
+ shift altgr keycode 51 = multiply
+keycode 52 = colon
+ shift keycode 52 = slash
+ altgr keycode 52 = periodcentered
+ shift altgr keycode 52 = division
+keycode 53 = exclam
+ shift keycode 53 = section
+ altgr keycode 53 = dead_belowdot
+ shift altgr keycode 53 = dead_abovedot
+keycode 86 = less
+ shift keycode 86 = greater
--- /dev/null
+include common
+keycode 2 = ampersand
+ shift keycode 2 = 1
+ altgr keycode 2 = bar
+ shift altgr keycode 2 = exclamdown
+keycode 3 = eacute
+ shift keycode 3 = 2
+ altgr keycode 3 = at
+ shift altgr keycode 3 = oneeighth
+keycode 4 = quotedbl
+ shift keycode 4 = 3
+ altgr keycode 4 = numbersign
+ shift altgr keycode 4 = sterling
+keycode 5 = apostrophe
+ shift keycode 5 = 4
+ altgr keycode 5 = onequarter
+ shift altgr keycode 5 = dollar
+keycode 6 = parenleft
+ shift keycode 6 = 5
+ altgr keycode 6 = onehalf
+ shift altgr keycode 6 = threeeighths
+keycode 7 = section
+ shift keycode 7 = 6
+ altgr keycode 7 = asciicircum
+ shift altgr keycode 7 = fiveeighths
+keycode 8 = egrave
+ shift keycode 8 = 7
+ altgr keycode 8 = braceleft
+ shift altgr keycode 8 = seveneighths
+keycode 9 = exclam
+ shift keycode 9 = 8
+ altgr keycode 9 = bracketleft
+ shift altgr keycode 9 = trademark
+keycode 10 = ccedilla
+ shift keycode 10 = 9
+ altgr keycode 10 = braceleft
+ shift altgr keycode 10 = plusminus
+keycode 11 = agrave
+ shift keycode 11 = 0
+ altgr keycode 11 = braceright
+ shift altgr keycode 11 = degree
+keycode 12 = parenright
+ shift keycode 12 = degree
+ altgr keycode 12 = backslash
+ shift altgr keycode 12 = questiondown
+keycode 13 = minus
+ shift keycode 13 = underscore
+ altgr keycode 13 = dead_cedilla
+ shift altgr keycode 13 = dead_ogonek
+keycode 16 = a
+ shift keycode 16 = A
+ shift altgr keycode 16 = Greek_OMEGA
+keycode 17 = z
+ shift keycode 17 = Z
+ altgr keycode 17 = lstroke
+ shift altgr keycode 17 = Lstroke
+ altgr keycode 18 = EuroSign
+ shift altgr keycode 18 = cent
+ altgr keycode 19 = paragraph
+ shift altgr keycode 19 = registered
+ altgr keycode 20 = tslash
+ shift altgr keycode 20 = Tslash
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = downarrow
+ shift altgr keycode 22 = uparrow
+ altgr keycode 23 = rightarrow
+ shift altgr keycode 23 = idotless
+ altgr keycode 24 = oslash
+ shift altgr keycode 24 = Ooblique
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = dead_circumflex
+ shift keycode 26 = dead_diaeresis
+ altgr keycode 26 = bracketleft
+ shift altgr keycode 26 = dead_abovering
+keycode 27 = dollar
+ shift keycode 27 = asterisk
+ altgr keycode 27 = bracketright
+ shift altgr keycode 27 = dead_macron
+keycode 30 = q
+ shift keycode 30 = Q
+ altgr keycode 30 = ae
+ shift altgr keycode 30 = AE
+ altgr keycode 31 = ssharp
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = dstroke
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = eng
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = kra
+ altgr keycode 38 = lstroke
+ shift altgr keycode 38 = Lstroke
+keycode 39 = m
+ shift keycode 39 = M
+ altgr keycode 39 = dead_acute
+ shift altgr keycode 39 = dead_doubleacute
+keycode 40 = ugrave
+ shift keycode 40 = percent
+ altgr keycode 40 = dead_acute
+ shift altgr keycode 40 = dead_caron
+keycode 41 = twosuperior
+ shift keycode 41 = threesuperior
+ altgr keycode 41 = notsign
+keycode 43 = mu
+ shift keycode 43 = sterling
+ altgr keycode 43 = dead_grave
+ shift altgr keycode 43 = dead_breve
+keycode 44 = w
+ shift keycode 44 = W
+ altgr keycode 44 = guillemotleft
+ altgr keycode 45 = guillemotright
+ altgr keycode 46 = cent
+ shift altgr keycode 46 = copyright
+ altgr keycode 47 = leftdoublequotemark
+ shift altgr keycode 47 = grave
+ altgr keycode 48 = rightdoublequotemark
+keycode 50 = comma
+ shift keycode 50 = question
+ altgr keycode 50 = dead_cedilla
+ shift altgr keycode 50 = masculine
+keycode 51 = semicolon
+ shift keycode 51 = period
+ altgr keycode 51 = horizconnector
+ shift altgr keycode 51 = multiply
+keycode 52 = colon
+ shift keycode 52 = slash
+ altgr keycode 52 = periodcentered
+ shift altgr keycode 52 = division
+keycode 53 = equal
+ shift keycode 53 = plus
+ altgr keycode 53 = dead_tilde
+ shift altgr keycode 53 = dead_abovedot
+ altgr keycode 86 = backslash
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = plusminus
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = at
+ shift keycode 4 = slash
+ altgr keycode 4 = sterling
+ shift keycode 5 = dollar
+ altgr keycode 5 = cent
+ shift keycode 6 = percent
+ altgr keycode 6 = currency
+ shift keycode 7 = question
+ altgr keycode 7 = notsign
+ shift keycode 8 = ampersand
+ shift keycode 9 = asterisk
+ altgr keycode 9 = twosuperior
+ shift keycode 10 = parenleft
+ altgr keycode 10 = threesuperior
+ shift keycode 11 = parenright
+ altgr keycode 11 = onequarter
+ shift keycode 12 = underscore
+ altgr keycode 12 = onehalf
+ shift keycode 13 = plus
+ altgr keycode 13 = threequarters
+ altgr keycode 24 = section
+ altgr keycode 25 = paragraph
+keycode 26 = dead_circumflex
+ shift keycode 26 = dead_circumflex
+ altgr keycode 26 = bracketleft
+keycode 27 = dead_cedilla
+ shift keycode 27 = dead_diaeresis
+ altgr keycode 27 = bracketright
+ altgr keycode 39 = asciitilde
+keycode 40 = dead_grave
+ altgr keycode 40 = braceleft
+ shift keycode 41 = bar
+ altgr keycode 41 = backslash
+keycode 43 = less
+ shift keycode 43 = greater
+ altgr keycode 43 = braceright
+ altgr keycode 50 = mu
+keycode 53 = eacute
+ altgr keycode 53 = dead_acute
+keycode 86 = guillemotleft
+ shift keycode 86 = guillemotright
+ altgr keycode 86 = degree
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = onesuperior
+ shift altgr keycode 2 = exclamdown
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = twosuperior
+ shift altgr keycode 3 = oneeighth
+ shift keycode 4 = section
+ altgr keycode 4 = threesuperior
+ shift altgr keycode 4 = sterling
+ shift keycode 5 = dollar
+ altgr keycode 5 = onequarter
+ shift altgr keycode 5 = currency
+ shift keycode 6 = percent
+ altgr keycode 6 = onehalf
+ shift altgr keycode 6 = threeeighths
+ shift keycode 7 = ampersand
+ altgr keycode 7 = threequarters
+ shift altgr keycode 7 = fiveeighths
+ shift keycode 8 = slash
+ altgr keycode 8 = braceleft
+ shift altgr keycode 8 = seveneighths
+ shift keycode 9 = parenleft
+ altgr keycode 9 = bracketleft
+ shift altgr keycode 9 = trademark
+ shift keycode 10 = parenright
+ altgr keycode 10 = bracketright
+ shift altgr keycode 10 = plusminus
+ shift keycode 11 = equal
+ altgr keycode 11 = braceright
+keycode 12 = ssharp
+ shift keycode 12 = question
+ altgr keycode 12 = backslash
+ shift altgr keycode 12 = questiondown
+keycode 13 = dead_acute
+ shift keycode 13 = dead_grave
+ altgr keycode 13 = dead_cedilla
+ shift altgr keycode 13 = dead_ogonek
+ altgr keycode 16 = at
+ shift altgr keycode 16 = Greek_OMEGA
+ altgr keycode 18 = EuroSign
+ altgr keycode 19 = paragraph
+ shift altgr keycode 19 = registered
+ altgr keycode 20 = tslash
+ shift altgr keycode 20 = Tslash
+keycode 21 = z
+ shift keycode 21 = Z
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = downarrow
+ shift altgr keycode 22 = uparrow
+ altgr keycode 23 = rightarrow
+ shift altgr keycode 23 = idotless
+ altgr keycode 24 = oslash
+ shift altgr keycode 24 = Ooblique
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = udiaeresis
+ shift keycode 26 = Udiaeresis
+ altgr keycode 26 = dead_diaeresis
+ shift altgr keycode 26 = dead_abovering
+keycode 27 = plus
+ shift keycode 27 = asterisk
+ altgr keycode 27 = dead_tilde
+ shift altgr keycode 27 = dead_macron
+ altgr keycode 30 = ae
+ shift altgr keycode 30 = AE
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = dstroke
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = eng
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = kra
+keycode 39 = odiaeresis
+ shift keycode 39 = Odiaeresis
+ altgr keycode 39 = dead_doubleacute
+keycode 40 = adiaeresis
+ shift keycode 40 = Adiaeresis
+ shift altgr keycode 40 = dead_caron
+keycode 41 = dead_circumflex
+ shift keycode 41 = degree
+ altgr keycode 41 = notsign
+keycode 43 = numbersign
+ shift keycode 43 = apostrophe
+ shift altgr keycode 43 = dead_breve
+keycode 44 = y
+ shift keycode 44 = Y
+ altgr keycode 44 = guillemotleft
+ altgr keycode 45 = guillemotright
+ altgr keycode 46 = cent
+ shift altgr keycode 46 = copyright
+ altgr keycode 47 = leftdoublequotemark
+ altgr keycode 48 = rightdoublequotemark
+ altgr keycode 50 = mu
+ shift altgr keycode 50 = masculine
+keycode 51 = comma
+ shift keycode 51 = semicolon
+ altgr keycode 51 = horizconnector
+ shift altgr keycode 51 = multiply
+keycode 52 = period
+ shift keycode 52 = colon
+ altgr keycode 52 = periodcentered
+ shift altgr keycode 52 = division
+keycode 53 = minus
+ shift keycode 53 = underscore
+ altgr keycode 53 = dead_belowdot
+ shift altgr keycode 53 = dead_abovedot
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = asciitilde
+ shift altgr keycode 2 = dead_tilde
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = dead_caron
+ shift altgr keycode 3 = caron
+ shift keycode 4 = numbersign
+ altgr keycode 4 = asciicircum
+ shift altgr keycode 4 = dead_circumflex
+ shift keycode 5 = dollar
+ altgr keycode 5 = dead_breve
+ shift altgr keycode 5 = breve
+ shift keycode 6 = percent
+ altgr keycode 6 = degree
+ shift altgr keycode 6 = dead_abovering
+ shift keycode 7 = ampersand
+ altgr keycode 7 = dead_ogonek
+ shift altgr keycode 7 = ogonek
+ shift keycode 8 = slash
+ altgr keycode 8 = grave
+ shift altgr keycode 8 = dead_grave
+ shift keycode 9 = parenleft
+ altgr keycode 9 = dead_abovedot
+ shift altgr keycode 9 = abovedot
+ shift keycode 10 = parenright
+ altgr keycode 10 = dead_acute
+ shift altgr keycode 10 = apostrophe
+ shift keycode 11 = equal
+ altgr keycode 11 = dead_doubleacute
+ shift altgr keycode 11 = doubleacute
+keycode 12 = apostrophe
+ shift keycode 12 = question
+ altgr keycode 12 = dead_diaeresis
+ shift altgr keycode 12 = diaeresis
+keycode 13 = plus
+ shift keycode 13 = asterisk
+ altgr keycode 13 = dead_cedilla
+ shift altgr keycode 13 = cedilla
+ altgr keycode 16 = backslash
+ shift altgr keycode 16 = Greek_OMEGA
+ altgr keycode 17 = bar
+ shift altgr keycode 17 = Lstroke
+ altgr keycode 18 = EuroSign
+ altgr keycode 19 = paragraph
+ shift altgr keycode 19 = registered
+ altgr keycode 20 = tslash
+ shift altgr keycode 20 = Tslash
+keycode 21 = z
+ shift keycode 21 = Z
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = downarrow
+ shift altgr keycode 22 = uparrow
+ altgr keycode 23 = rightarrow
+ shift altgr keycode 23 = idotless
+ altgr keycode 24 = oslash
+ shift altgr keycode 24 = Ooblique
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = scaron
+ shift keycode 26 = Scaron
+ altgr keycode 26 = division
+ shift altgr keycode 26 = dead_abovering
+keycode 27 = dstroke
+ shift keycode 27 = Dstroke
+ altgr keycode 27 = multiply
+ shift altgr keycode 27 = dead_macron
+ altgr keycode 30 = ae
+ shift altgr keycode 30 = AE
+ altgr keycode 31 = ssharp
+ shift altgr keycode 31 = section
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = bracketleft
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = bracketright
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = lstroke
+ shift altgr keycode 37 = ampersand
+ altgr keycode 38 = Lstroke
+keycode 39 = ccaron
+ shift keycode 39 = Ccaron
+ altgr keycode 39 = dead_acute
+ shift altgr keycode 39 = dead_doubleacute
+keycode 40 = cacute
+ shift keycode 40 = Cacute
+ altgr keycode 40 = ssharp
+ shift altgr keycode 40 = dead_caron
+keycode 41 = dead_cedilla
+ shift keycode 41 = dead_diaeresis
+ altgr keycode 41 = notsign
+keycode 43 = zcaron
+ shift keycode 43 = Zcaron
+ altgr keycode 43 = currency
+ shift altgr keycode 43 = dead_breve
+keycode 44 = y
+ shift keycode 44 = Y
+ altgr keycode 44 = guillemotleft
+ shift altgr keycode 44 = less
+ altgr keycode 45 = guillemotright
+ shift altgr keycode 45 = greater
+ altgr keycode 46 = cent
+ shift altgr keycode 46 = copyright
+ altgr keycode 47 = at
+ shift altgr keycode 47 = grave
+ altgr keycode 48 = braceleft
+ shift altgr keycode 48 = apostrophe
+ altgr keycode 49 = braceright
+ altgr keycode 50 = section
+ shift altgr keycode 50 = masculine
+keycode 51 = comma
+ shift keycode 51 = semicolon
+ altgr keycode 51 = horizconnector
+ shift altgr keycode 51 = multiply
+keycode 52 = period
+ shift keycode 52 = colon
+ altgr keycode 52 = periodcentered
+ shift altgr keycode 52 = division
+keycode 53 = minus
+ shift keycode 53 = underscore
+ altgr keycode 53 = dead_belowdot
+ shift altgr keycode 53 = dead_abovedot
--- /dev/null
+include common
+ shift keycode 2 = apostrophe
+ altgr keycode 2 = asciitilde
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = caron
+ shift keycode 4 = plus
+ altgr keycode 4 = asciicircum
+ shift keycode 5 = exclam
+ altgr keycode 5 = breve
+ shift keycode 6 = percent
+ altgr keycode 6 = degree
+ shift keycode 7 = slash
+ altgr keycode 7 = ogonek
+ shift keycode 8 = equal
+ altgr keycode 8 = grave
+ shift keycode 9 = parenleft
+ altgr keycode 9 = abovedot
+ shift keycode 10 = parenright
+ altgr keycode 10 = acute
+keycode 11 = odiaeresis
+ shift keycode 11 = Odiaeresis
+ altgr keycode 11 = doubleacute
+keycode 12 = udiaeresis
+ shift keycode 12 = Udiaeresis
+ altgr keycode 12 = diaeresis
+keycode 13 = oacute
+ shift keycode 13 = Oacute
+ altgr keycode 13 = cedilla
+ altgr keycode 16 = backslash
+ altgr keycode 17 = bar
+ altgr keycode 18 = EuroSign
+keycode 21 = z
+ shift keycode 21 = Z
+ altgr keycode 23 = Iacute
+keycode 26 = odoubleacute
+ shift keycode 26 = Odoubleacute
+ altgr keycode 26 = division
+keycode 27 = uacute
+ shift keycode 27 = Uacute
+ altgr keycode 27 = multiply
+ altgr keycode 31 = dstroke
+ altgr keycode 32 = Dstroke
+ altgr keycode 33 = bracketleft
+ altgr keycode 34 = bracketright
+ altgr keycode 36 = iacute
+ altgr keycode 37 = lstroke
+ altgr keycode 38 = Lstroke
+keycode 39 = eacute
+ shift keycode 39 = Eacute
+ altgr keycode 39 = dollar
+keycode 40 = aacute
+ shift keycode 40 = Aacute
+ altgr keycode 40 = ssharp
+keycode 41 = 0
+ shift keycode 41 = section
+ altgr keycode 41 = notsign
+keycode 43 = udoubleacute
+ shift keycode 43 = Udoubleacute
+ altgr keycode 43 = currency
+keycode 44 = y
+ shift keycode 44 = Y
+ altgr keycode 44 = greater
+ altgr keycode 45 = numbersign
+ altgr keycode 46 = ampersand
+ altgr keycode 47 = at
+ altgr keycode 48 = braceleft
+ altgr keycode 49 = braceright
+keycode 51 = comma
+ shift keycode 51 = question
+ altgr keycode 51 = semicolon
+keycode 52 = period
+ shift keycode 52 = colon
+keycode 53 = minus
+ shift keycode 53 = underscore
+ altgr keycode 53 = asterisk
+ shift keycode 59 = F13
+ shift keycode 60 = F14
+ shift keycode 61 = F15
+ shift keycode 62 = F16
+ shift keycode 63 = F17
+ shift keycode 64 = F18
+ shift keycode 65 = F19
+ shift keycode 66 = F20
+ shift keycode 67 = F21
+ shift keycode 68 = F22
+ altgr keycode 86 = less
+ shift keycode 87 = F23
+ shift keycode 88 = F24
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = onesuperior
+ shift altgr keycode 2 = exclamdown
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = twosuperior
+ shift altgr keycode 3 = oneeighth
+ shift keycode 4 = numbersign
+ altgr keycode 4 = threesuperior
+ shift altgr keycode 4 = sterling
+ shift keycode 5 = dollar
+ altgr keycode 5 = onequarter
+ shift altgr keycode 5 = currency
+ shift keycode 6 = percent
+ altgr keycode 6 = onehalf
+ shift altgr keycode 6 = threeeighths
+ shift keycode 7 = ampersand
+ altgr keycode 7 = threequarters
+ shift altgr keycode 7 = fiveeighths
+ shift keycode 8 = slash
+ altgr keycode 8 = braceleft
+ shift altgr keycode 8 = seveneighths
+ shift keycode 9 = parenleft
+ altgr keycode 9 = bracketleft
+ shift altgr keycode 9 = trademark
+ shift keycode 10 = parenright
+ altgr keycode 10 = bracketright
+ shift altgr keycode 10 = plusminus
+ shift keycode 11 = equal
+ altgr keycode 11 = braceright
+keycode 12 = odiaeresis
+ shift keycode 12 = Odiaeresis
+ altgr keycode 12 = backslash
+ shift altgr keycode 12 = questiondown
+keycode 13 = minus
+ shift keycode 13 = underscore
+ altgr keycode 13 = dead_cedilla
+ shift altgr keycode 13 = dead_ogonek
+ altgr keycode 16 = at
+ shift altgr keycode 16 = Greek_OMEGA
+ altgr keycode 18 = EuroSign
+ altgr keycode 19 = paragraph
+ shift altgr keycode 19 = registered
+ altgr keycode 20 = tslash
+ shift altgr keycode 20 = Tslash
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = downarrow
+ shift altgr keycode 22 = uparrow
+ altgr keycode 23 = rightarrow
+ shift altgr keycode 23 = idotless
+ altgr keycode 24 = oslash
+ shift altgr keycode 24 = Ooblique
+keycode 26 = eth
+ shift keycode 26 = ETH
+keycode 27 = apostrophe
+ shift keycode 27 = question
+ altgr keycode 27 = asciitilde
+ altgr keycode 33 = dstroke
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = eng
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = kra
+keycode 39 = ae
+ shift keycode 39 = AE
+ altgr keycode 39 = dead_doubleacute
+keycode 40 = dead_acute
+keycode 43 = plus
+ shift keycode 43 = asterisk
+ altgr keycode 43 = grave
+ altgr keycode 44 = guillemotleft
+ altgr keycode 45 = guillemotright
+ altgr keycode 46 = cent
+ shift altgr keycode 46 = copyright
+ altgr keycode 47 = leftdoublequotemark
+ altgr keycode 48 = rightdoublequotemark
+ altgr keycode 50 = mu
+ shift altgr keycode 50 = masculine
+keycode 51 = comma
+ shift keycode 51 = semicolon
+ altgr keycode 51 = horizconnector
+ shift altgr keycode 51 = multiply
+keycode 52 = period
+ shift keycode 52 = colon
+ altgr keycode 52 = periodcentered
+ shift altgr keycode 52 = division
+keycode 53 = thorn
+ shift keycode 53 = THORN
+ altgr keycode 53 = dead_belowdot
+ shift altgr keycode 53 = dead_abovedot
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = onesuperior
+ shift altgr keycode 2 = exclamdown
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = twosuperior
+ shift altgr keycode 3 = oneeighth
+ shift keycode 4 = sterling
+ altgr keycode 4 = threesuperior
+ shift keycode 5 = dollar
+ altgr keycode 5 = onequarter
+ shift keycode 6 = percent
+ altgr keycode 6 = onehalf
+ shift altgr keycode 6 = threeeighths
+ shift keycode 7 = ampersand
+ altgr keycode 7 = threequarters
+ shift altgr keycode 7 = fiveeighths
+ shift keycode 8 = slash
+ altgr keycode 8 = braceleft
+ shift altgr keycode 8 = seveneighths
+ shift keycode 9 = parenleft
+ shift altgr keycode 9 = trademark
+ shift keycode 10 = parenright
+ shift altgr keycode 10 = plusminus
+ shift keycode 11 = equal
+ altgr keycode 11 = braceright
+ shift altgr keycode 11 = degree
+keycode 12 = apostrophe
+ shift keycode 12 = question
+ altgr keycode 12 = grave
+ shift altgr keycode 12 = questiondown
+keycode 13 = igrave
+ shift keycode 13 = asciicircum
+ altgr keycode 13 = asciitilde
+ shift altgr keycode 13 = dead_ogonek
+ altgr keycode 16 = at
+ shift altgr keycode 16 = Greek_OMEGA
+ altgr keycode 17 = lstroke
+ shift altgr keycode 17 = Lstroke
+ altgr keycode 18 = EuroSign
+ shift altgr keycode 18 = cent
+ altgr keycode 19 = paragraph
+ shift altgr keycode 19 = registered
+ altgr keycode 20 = tslash
+ shift altgr keycode 20 = Tslash
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = downarrow
+ shift altgr keycode 22 = uparrow
+ altgr keycode 23 = rightarrow
+ shift altgr keycode 23 = idotless
+ altgr keycode 24 = oslash
+ shift altgr keycode 24 = Ooblique
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = egrave
+ shift keycode 26 = eacute
+ altgr keycode 26 = bracketleft
+ shift altgr keycode 26 = dead_abovering
+keycode 27 = plus
+ shift keycode 27 = asterisk
+ altgr keycode 27 = bracketright
+ shift altgr keycode 27 = dead_macron
+ altgr keycode 30 = ae
+ shift altgr keycode 30 = AE
+ altgr keycode 31 = ssharp
+ shift altgr keycode 31 = section
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = dstroke
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = eng
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = kra
+ altgr keycode 38 = lstroke
+ shift altgr keycode 38 = Lstroke
+keycode 39 = ograve
+ shift keycode 39 = ccedilla
+ altgr keycode 39 = at
+ shift altgr keycode 39 = dead_doubleacute
+keycode 40 = agrave
+ shift keycode 40 = degree
+ altgr keycode 40 = numbersign
+keycode 41 = backslash
+ shift keycode 41 = bar
+ altgr keycode 41 = notsign
+keycode 43 = ugrave
+ shift keycode 43 = section
+ altgr keycode 43 = dead_grave
+ shift altgr keycode 43 = dead_breve
+ altgr keycode 44 = guillemotleft
+ altgr keycode 45 = guillemotright
+ altgr keycode 46 = cent
+ shift altgr keycode 46 = copyright
+ altgr keycode 47 = leftdoublequotemark
+ shift altgr keycode 47 = grave
+ altgr keycode 48 = rightdoublequotemark
+ altgr keycode 50 = mu
+ shift altgr keycode 50 = masculine
+keycode 51 = comma
+ shift keycode 51 = semicolon
+ altgr keycode 51 = horizconnector
+ shift altgr keycode 51 = multiply
+keycode 52 = period
+ shift keycode 52 = colon
+ altgr keycode 52 = periodcentered
+ shift altgr keycode 52 = division
+keycode 53 = minus
+ shift keycode 53 = underscore
+ altgr keycode 53 = dead_belowdot
+ shift altgr keycode 53 = dead_abovedot
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = kana_NU
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = kana_FU
+ shift keycode 4 = numbersign
+ altgr keycode 4 = kana_A
+ shift altgr keycode 4 = kana_a
+ shift keycode 5 = dollar
+ altgr keycode 5 = kana_U
+ shift altgr keycode 5 = kana_u
+ shift keycode 6 = percent
+ altgr keycode 6 = kana_E
+ shift altgr keycode 6 = kana_e
+ shift keycode 7 = ampersand
+ altgr keycode 7 = kana_O
+ shift altgr keycode 7 = kana_o
+ shift keycode 8 = apostrophe
+ altgr keycode 8 = kana_YA
+ shift altgr keycode 8 = kana_ya
+ shift keycode 9 = parenleft
+ altgr keycode 9 = kana_YU
+ shift altgr keycode 9 = kana_yu
+ shift keycode 10 = parenright
+ altgr keycode 10 = kana_YO
+ shift altgr keycode 10 = kana_yo
+ shift keycode 11 = asciitilde
+ altgr keycode 11 = kana_WA
+ shift altgr keycode 11 = kana_WO
+keycode 12 = minus
+ shift keycode 12 = equal
+ altgr keycode 12 = kana_HO
+keycode 13 = asciicircum
+ shift keycode 13 = asciitilde
+ altgr keycode 13 = kana_HE
+ altgr keycode 16 = kana_TA
+ altgr keycode 17 = kana_TE
+ altgr keycode 18 = kana_I
+ shift altgr keycode 18 = kana_i
+ altgr keycode 19 = kana_SU
+ altgr keycode 20 = kana_KA
+ altgr keycode 21 = kana_N
+ altgr keycode 22 = kana_NA
+ altgr keycode 23 = kana_NI
+ altgr keycode 24 = kana_RA
+ altgr keycode 25 = kana_SE
+keycode 26 = at
+ shift keycode 26 = grave
+ altgr keycode 26 = voicedsound
+keycode 27 = bracketleft
+ shift keycode 27 = braceleft
+ altgr keycode 27 = semivoicedsound
+ shift altgr keycode 27 = kana_openingbracket
+ altgr keycode 30 = kana_CHI
+ altgr keycode 31 = kana_TO
+ altgr keycode 32 = kana_SHI
+ altgr keycode 33 = kana_HA
+ altgr keycode 34 = kana_KI
+ altgr keycode 35 = kana_KU
+ altgr keycode 36 = kana_MA
+ altgr keycode 37 = kana_NO
+ altgr keycode 38 = kana_RI
+keycode 39 = semicolon
+ shift keycode 39 = plus
+ altgr keycode 39 = kana_RE
+keycode 40 = colon
+ shift keycode 40 = asterisk
+ altgr keycode 40 = kana_KE
+keycode 41 = Zenkaku_Hankaku
+keycode 43 = bracketright
+ shift keycode 43 = braceright
+ altgr keycode 43 = kana_MU
+ shift altgr keycode 43 = kana_closingbracket
+ altgr keycode 44 = kana_TSU
+ shift altgr keycode 44 = kana_tsu
+ altgr keycode 45 = kana_SA
+ altgr keycode 46 = kana_SO
+ altgr keycode 47 = kana_HI
+ altgr keycode 48 = kana_KO
+ altgr keycode 49 = kana_MI
+ altgr keycode 50 = kana_MO
+keycode 51 = comma
+ shift keycode 51 = less
+ altgr keycode 51 = kana_NE
+ shift altgr keycode 51 = kana_comma
+keycode 52 = period
+ shift keycode 52 = greater
+ altgr keycode 52 = kana_RU
+ shift altgr keycode 52 = kana_fullstop
+keycode 53 = slash
+ shift keycode 53 = question
+ altgr keycode 53 = kana_ME
+ shift altgr keycode 53 = kana_conjunctive
+ shift keycode 58 = Eisu_toggle
+ shift keycode 84 = Execute
+keycode 112 = Katakana
+keycode 115 = backslash
+ shift keycode 115 = underscore
+keycode 121 = Henkan_Mode
+keycode 123 = Muhenkan
+keycode 125 = yen
+ shift keycode 125 = bar
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = aogonek
+ shift altgr keycode 2 = Aogonek
+ shift keycode 3 = at
+ altgr keycode 3 = ccaron
+ shift altgr keycode 3 = Ccaron
+ shift keycode 4 = numbersign
+ altgr keycode 4 = eogonek
+ shift altgr keycode 4 = Eogonek
+ shift keycode 5 = dollar
+ altgr keycode 5 = eabovedot
+ shift altgr keycode 5 = Eabovedot
+ shift keycode 6 = percent
+ altgr keycode 6 = iogonek
+ shift altgr keycode 6 = Iogonek
+ shift keycode 7 = asciicircum
+ altgr keycode 7 = scaron
+ shift altgr keycode 7 = Scaron
+ shift keycode 8 = ampersand
+ altgr keycode 8 = uogonek
+ shift altgr keycode 8 = Uogonek
+ shift keycode 9 = asterisk
+ altgr keycode 9 = umacron
+ shift altgr keycode 9 = Umacron
+ shift keycode 10 = parenleft
+ altgr keycode 10 = doublelowquotemark
+ shift keycode 11 = parenright
+ altgr keycode 11 = leftdoublequotemark
+keycode 12 = minus
+ shift keycode 12 = underscore
+keycode 13 = equal
+ shift keycode 13 = plus
+ altgr keycode 13 = zcaron
+ shift altgr keycode 13 = Zcaron
+keycode 26 = bracketleft
+ shift keycode 26 = braceleft
+keycode 27 = bracketright
+ shift keycode 27 = braceright
+keycode 39 = semicolon
+ shift keycode 39 = colon
+keycode 40 = apostrophe
+ shift keycode 40 = quotedbl
+keycode 41 = grave
+ shift keycode 41 = asciitilde
+keycode 43 = backslash
+ shift keycode 43 = bar
+keycode 51 = comma
+ shift keycode 51 = less
+keycode 52 = period
+ shift keycode 52 = greater
+keycode 53 = slash
+ shift keycode 53 = question
+keycode 86 = endash
+ shift keycode 86 = EuroSign
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = onesuperior
+ shift altgr keycode 2 = exclamdown
+ shift keycode 3 = at
+ altgr keycode 3 = twosuperior
+ shift altgr keycode 3 = oneeighth
+ shift keycode 4 = numbersign
+ altgr keycode 4 = threesuperior
+ shift altgr keycode 4 = sterling
+ shift keycode 5 = dollar
+ altgr keycode 5 = EuroSign
+ shift altgr keycode 5 = cent
+ shift keycode 6 = percent
+ altgr keycode 6 = onehalf
+ shift altgr keycode 6 = threeeighths
+ shift keycode 7 = asciicircum
+ altgr keycode 7 = threequarters
+ shift altgr keycode 7 = fiveeighths
+ shift keycode 8 = ampersand
+ altgr keycode 8 = braceleft
+ shift altgr keycode 8 = seveneighths
+ shift keycode 9 = asterisk
+ altgr keycode 9 = bracketleft
+ shift altgr keycode 9 = trademark
+ shift keycode 10 = parenleft
+ altgr keycode 10 = bracketright
+ shift altgr keycode 10 = plusminus
+ shift keycode 11 = parenright
+ altgr keycode 11 = braceright
+ shift altgr keycode 11 = degree
+keycode 12 = minus
+ shift keycode 12 = underscore
+ altgr keycode 12 = backslash
+ shift altgr keycode 12 = questiondown
+keycode 13 = equal
+ shift keycode 13 = plus
+ altgr keycode 13 = dead_cedilla
+ shift altgr keycode 13 = dead_ogonek
+ altgr keycode 16 = at
+ shift altgr keycode 16 = Greek_OMEGA
+ altgr keycode 17 = lstroke
+ shift altgr keycode 17 = Lstroke
+ altgr keycode 18 = emacron
+ shift altgr keycode 18 = Emacron
+ altgr keycode 19 = rcedilla
+ shift altgr keycode 19 = Rcedilla
+ altgr keycode 20 = tslash
+ shift altgr keycode 20 = Tslash
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = umacron
+ shift altgr keycode 22 = Umacron
+ altgr keycode 23 = imacron
+ shift altgr keycode 23 = Imacron
+ altgr keycode 24 = omacron
+ shift altgr keycode 24 = Omacron
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = bracketleft
+ shift keycode 26 = braceleft
+ altgr keycode 26 = dead_diaeresis
+ shift altgr keycode 26 = dead_abovering
+keycode 27 = bracketright
+ shift keycode 27 = braceright
+ altgr keycode 27 = dead_tilde
+ shift altgr keycode 27 = dead_macron
+ shift keycode 28 = ISO_Next_Group
+ altgr keycode 30 = amacron
+ shift altgr keycode 30 = Amacron
+ altgr keycode 31 = scaron
+ shift altgr keycode 31 = Scaron
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = dstroke
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = gcedilla
+ shift altgr keycode 34 = Gcedilla
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = kcedilla
+ shift altgr keycode 37 = Kcedilla
+ altgr keycode 38 = lcedilla
+ shift altgr keycode 38 = Lcedilla
+keycode 39 = semicolon
+ shift keycode 39 = colon
+ altgr keycode 39 = dead_acute
+ shift altgr keycode 39 = dead_doubleacute
+keycode 40 = apostrophe
+ shift keycode 40 = quotedbl
+ altgr keycode 40 = leftdoublequotemark
+ shift altgr keycode 40 = doublelowquotemark
+keycode 41 = grave
+ shift keycode 41 = asciitilde
+ altgr keycode 41 = notsign
+keycode 43 = backslash
+ shift keycode 43 = bar
+ altgr keycode 43 = dead_grave
+ shift altgr keycode 43 = dead_breve
+ altgr keycode 44 = zcaron
+ shift altgr keycode 44 = Zcaron
+ altgr keycode 45 = guillemotright
+ shift altgr keycode 45 = greater
+ altgr keycode 46 = ccaron
+ shift altgr keycode 46 = Ccaron
+ altgr keycode 47 = leftdoublequotemark
+ shift altgr keycode 47 = grave
+ altgr keycode 48 = rightdoublequotemark
+ shift altgr keycode 48 = apostrophe
+ altgr keycode 49 = ncedilla
+ shift altgr keycode 49 = Ncedilla
+ altgr keycode 50 = mu
+ shift altgr keycode 50 = masculine
+keycode 51 = comma
+ shift keycode 51 = less
+ altgr keycode 51 = horizconnector
+ shift altgr keycode 51 = multiply
+keycode 52 = period
+ shift keycode 52 = greater
+ altgr keycode 52 = periodcentered
+ shift altgr keycode 52 = division
+keycode 53 = slash
+ shift keycode 53 = question
+ altgr keycode 53 = dead_belowdot
+ shift altgr keycode 53 = dead_abovedot
+ altgr keycode 57 = nobreakspace
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ shift keycode 3 = at
+ shift altgr keycode 3 = doublelowquotemark
+ shift keycode 4 = numbersign
+ shift altgr keycode 4 = leftdoublequotemark
+ shift keycode 5 = dollar
+ shift keycode 6 = percent
+ shift keycode 7 = asciicircum
+ shift keycode 8 = ampersand
+ shift keycode 9 = asterisk
+ shift keycode 10 = parenleft
+ shift keycode 11 = parenright
+keycode 12 = minus
+ shift keycode 12 = underscore
+keycode 13 = equal
+ shift keycode 13 = plus
+ altgr keycode 16 = Cyrillic_lje
+ shift altgr keycode 16 = Cyrillic_LJE
+ altgr keycode 17 = Cyrillic_nje
+ shift altgr keycode 17 = Cyrillic_NJE
+ altgr keycode 18 = Cyrillic_ie
+ shift altgr keycode 18 = Cyrillic_IE
+ altgr keycode 19 = Cyrillic_er
+ shift altgr keycode 19 = Cyrillic_ER
+ altgr keycode 20 = Cyrillic_te
+ shift altgr keycode 20 = Cyrillic_TE
+ altgr keycode 21 = Macedonia_dse
+ shift altgr keycode 21 = Macedonia_DSE
+ altgr keycode 22 = Cyrillic_u
+ shift altgr keycode 22 = Cyrillic_U
+ altgr keycode 23 = Cyrillic_i
+ shift altgr keycode 23 = Cyrillic_I
+ altgr keycode 24 = Cyrillic_o
+ shift altgr keycode 24 = Cyrillic_O
+ altgr keycode 25 = Cyrillic_pe
+ shift altgr keycode 25 = Cyrillic_PE
+keycode 26 = bracketleft
+ shift keycode 26 = braceleft
+ altgr keycode 26 = Cyrillic_sha
+ shift altgr keycode 26 = Cyrillic_SHA
+keycode 27 = bracketright
+ shift keycode 27 = braceright
+ altgr keycode 27 = Macedonia_gje
+ shift altgr keycode 27 = Macedonia_GJE
+ altgr keycode 30 = Cyrillic_a
+ shift altgr keycode 30 = Cyrillic_A
+ altgr keycode 31 = Cyrillic_es
+ shift altgr keycode 31 = Cyrillic_ES
+ altgr keycode 32 = Cyrillic_de
+ shift altgr keycode 32 = Cyrillic_DE
+ altgr keycode 33 = Cyrillic_ef
+ shift altgr keycode 33 = Cyrillic_EF
+ altgr keycode 34 = Cyrillic_ghe
+ shift altgr keycode 34 = Cyrillic_GHE
+ altgr keycode 35 = Cyrillic_ha
+ shift altgr keycode 35 = Cyrillic_HA
+ altgr keycode 36 = Cyrillic_je
+ shift altgr keycode 36 = Cyrillic_JE
+ altgr keycode 37 = Cyrillic_ka
+ shift altgr keycode 37 = Cyrillic_KA
+ altgr keycode 38 = Cyrillic_el
+ shift altgr keycode 38 = Cyrillic_EL
+keycode 39 = semicolon
+ shift keycode 39 = colon
+ altgr keycode 39 = Cyrillic_che
+ shift altgr keycode 39 = Cyrillic_CHE
+keycode 40 = apostrophe
+ shift keycode 40 = quotedbl
+ altgr keycode 40 = Macedonia_kje
+ shift altgr keycode 40 = Macedonia_KJE
+keycode 41 = grave
+ shift keycode 41 = asciitilde
+keycode 43 = backslash
+ shift keycode 43 = bar
+ altgr keycode 43 = Cyrillic_zhe
+ shift altgr keycode 43 = Cyrillic_ZHE
+ altgr keycode 44 = Cyrillic_ze
+ shift altgr keycode 44 = Cyrillic_ZE
+ altgr keycode 45 = Cyrillic_dzhe
+ shift altgr keycode 45 = Cyrillic_DZHE
+ altgr keycode 46 = Cyrillic_tse
+ shift altgr keycode 46 = Cyrillic_TSE
+ altgr keycode 47 = Cyrillic_ve
+ shift altgr keycode 47 = Cyrillic_VE
+ altgr keycode 48 = Cyrillic_be
+ shift altgr keycode 48 = Cyrillic_BE
+ altgr keycode 49 = Cyrillic_en
+ shift altgr keycode 49 = Cyrillic_EN
+ altgr keycode 50 = Cyrillic_em
+ shift altgr keycode 50 = Cyrillic_EM
+keycode 51 = comma
+ shift keycode 51 = less
+ shift altgr keycode 51 = semicolon
+keycode 52 = period
+ shift keycode 52 = greater
+ shift altgr keycode 52 = colon
+keycode 53 = slash
+ shift keycode 53 = question
--- /dev/null
+keycode 29 = Control_L
+keycode 42 = Shift_L
+keycode 54 = Shift_R
+keycode 56 = Alt_L
+keycode 157 = Control_R
+keycode 184 = ISO_Level3_Shift
+keycode 219 = Super_L
+keycode 220 = Super_R
+keycode 221 = Menu
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = onesuperior
+# shift keycode 3 = quotebl
+ altgr keycode 3 = twosuperior
+ shift keycode 4 = numbersign
+ altgr keycode 4 = threesuperior
+ shift keycode 5 = dollar
+ altgr keycode 5 = onequarter
+ shift keycode 6 = percent
+ altgr keycode 6 = onehalf
+ shift keycode 7 = ampersand
+ altgr keycode 7 = threequarters
+ shift keycode 8 = underscore
+ altgr keycode 8 = sterling
+ shift keycode 9 = parenleft
+ altgr keycode 9 = braceleft
+ shift keycode 10 = parenright
+ altgr keycode 10 = braceright
+ shift keycode 11 = apostrophe
+keycode 12 = slash
+ shift keycode 12 = question
+ altgr keycode 12 = backslash
+keycode 13 = degree
+ shift keycode 13 = dead_tilde
+ altgr keycode 13 = dead_cedilla
+ altgr keycode 18 = EuroSign
+ altgr keycode 19 = paragraph
+keycode 26 = dead_diaeresis
+ shift keycode 26 = dead_circumflex
+keycode 27 = asterisk
+ shift keycode 27 = bar
+ altgr keycode 31 = ssharp
+keycode 39 = plus
+ shift keycode 39 = plusminus
+keycode 40 = dead_acute
+ shift keycode 40 = dead_grave
+keycode 41 = at
+ shift keycode 41 = section
+ altgr keycode 41 = notsign
+keycode 43 = less
+ shift keycode 43 = greater
+ altgr keycode 44 = guillemotleft
+ altgr keycode 45 = guillemotright
+ altgr keycode 46 = copyright
+ altgr keycode 50 = mu
+keycode 51 = comma
+ shift keycode 51 = semicolon
+keycode 52 = period
+ shift keycode 52 = colon
+ altgr keycode 52 = periodcentered
+keycode 53 = hyphen
+ shift keycode 53 = equal
+keycode 86 = bracketright
+ shift keycode 86 = bracketleft
+ altgr keycode 86 = brokenbar
--- /dev/null
+include common
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = exclamdown
+ shift altgr keycode 2 = onesuperior
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = at
+ shift altgr keycode 3 = twosuperior
+ shift keycode 4 = numbersign
+ altgr keycode 4 = sterling
+ shift altgr keycode 4 = threesuperior
+ shift keycode 5 = currency
+ altgr keycode 5 = dollar
+ shift altgr keycode 5 = onequarter
+ shift keycode 6 = percent
+ altgr keycode 6 = onehalf
+ shift altgr keycode 6 = cent
+ shift keycode 7 = ampersand
+ altgr keycode 7 = yen
+ shift altgr keycode 7 = fiveeighths
+ shift keycode 8 = slash
+ altgr keycode 8 = braceleft
+ shift altgr keycode 8 = division
+ shift keycode 9 = parenleft
+ altgr keycode 9 = bracketleft
+ shift altgr keycode 9 = guillemotleft
+ shift keycode 10 = parenright
+ altgr keycode 10 = bracketright
+ shift altgr keycode 10 = guillemotright
+ shift keycode 11 = equal
+ altgr keycode 11 = braceright
+ shift altgr keycode 11 = degree
+keycode 12 = plus
+ shift keycode 12 = question
+ altgr keycode 12 = plusminus
+ shift altgr keycode 12 = questiondown
+keycode 13 = backslash
+ shift keycode 13 = dead_grave
+ altgr keycode 13 = dead_acute
+ shift altgr keycode 13 = notsign
+ shift altgr keycode 16 = Greek_OMEGA
+ altgr keycode 17 = lstroke
+ shift altgr keycode 17 = Lstroke
+ altgr keycode 18 = EuroSign
+ shift altgr keycode 18 = cent
+ altgr keycode 19 = registered
+ altgr keycode 20 = thorn
+ shift altgr keycode 20 = THORN
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = downarrow
+ shift altgr keycode 22 = uparrow
+ altgr keycode 23 = rightarrow
+ shift altgr keycode 23 = idotless
+ altgr keycode 24 = oe
+ shift altgr keycode 24 = OE
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = aring
+ shift keycode 26 = Aring
+ altgr keycode 26 = dead_diaeresis
+ shift altgr keycode 26 = dead_abovering
+keycode 27 = dead_diaeresis
+ shift keycode 27 = asciicircum
+ altgr keycode 27 = asciitilde
+ shift altgr keycode 27 = dead_caron
+ altgr keycode 30 = ordfeminine
+ shift altgr keycode 30 = masculine
+ altgr keycode 31 = ssharp
+ shift altgr keycode 31 = section
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = dstroke
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = eng
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = kra
+ altgr keycode 38 = lstroke
+ shift altgr keycode 38 = Lstroke
+keycode 39 = oslash
+ shift keycode 39 = Ooblique
+ shift altgr keycode 39 = dead_doubleacute
+keycode 40 = ae
+ shift keycode 40 = AE
+ shift altgr keycode 40 = dead_caron
+keycode 41 = bar
+ shift keycode 41 = section
+ altgr keycode 41 = brokenbar
+ shift altgr keycode 41 = paragraph
+keycode 43 = apostrophe
+ shift keycode 43 = asterisk
+ shift altgr keycode 43 = multiply
+ altgr keycode 44 = guillemotleft
+ altgr keycode 45 = guillemotright
+ altgr keycode 46 = copyright
+ altgr keycode 47 = leftdoublequotemark
+ altgr keycode 48 = rightdoublequotemark
+ altgr keycode 50 = mu
+ shift altgr keycode 50 = masculine
+keycode 51 = comma
+ shift keycode 51 = semicolon
+ altgr keycode 51 = dead_cedilla
+ shift altgr keycode 51 = dead_ogonek
+keycode 52 = period
+ shift keycode 52 = colon
+ altgr keycode 52 = periodcentered
+ shift altgr keycode 52 = dead_abovedot
+keycode 53 = minus
+ shift keycode 53 = underscore
+ altgr keycode 53 = hyphen
+ shift altgr keycode 53 = macron
+ altgr keycode 57 = nobreakspace
+ altgr keycode 86 = onehalf
+ shift altgr keycode 86 = threequarters
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = onesuperior
+ shift altgr keycode 2 = exclamdown
+ shift keycode 3 = at
+ altgr keycode 3 = twosuperior
+ shift altgr keycode 3 = oneeighth
+ shift keycode 4 = numbersign
+ altgr keycode 4 = threesuperior
+ shift altgr keycode 4 = sterling
+ shift keycode 5 = dollar
+ altgr keycode 5 = onequarter
+ shift keycode 6 = percent
+ altgr keycode 6 = onehalf
+ shift altgr keycode 6 = threeeighths
+ shift keycode 7 = asciicircum
+ altgr keycode 7 = threequarters
+ shift altgr keycode 7 = fiveeighths
+ shift keycode 8 = ampersand
+ altgr keycode 8 = braceleft
+ shift altgr keycode 8 = seveneighths
+ shift keycode 9 = asterisk
+ altgr keycode 9 = bracketleft
+ shift altgr keycode 9 = trademark
+ shift keycode 10 = parenleft
+ altgr keycode 10 = bracketright
+ shift altgr keycode 10 = plusminus
+ shift keycode 11 = parenright
+ altgr keycode 11 = braceright
+ shift altgr keycode 11 = degree
+keycode 12 = minus
+ shift keycode 12 = underscore
+ altgr keycode 12 = backslash
+ shift altgr keycode 12 = questiondown
+keycode 13 = equal
+ shift keycode 13 = plus
+ altgr keycode 13 = dead_cedilla
+ shift altgr keycode 13 = dead_ogonek
+ shift altgr keycode 16 = Greek_OMEGA
+ altgr keycode 17 = lstroke
+ shift altgr keycode 17 = Lstroke
+ altgr keycode 18 = eogonek
+ shift altgr keycode 18 = Eogonek
+ altgr keycode 19 = paragraph
+ shift altgr keycode 19 = registered
+ altgr keycode 20 = tslash
+ shift altgr keycode 20 = Tslash
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = EuroSign
+ shift altgr keycode 22 = uparrow
+ altgr keycode 23 = rightarrow
+ shift altgr keycode 23 = idotless
+ altgr keycode 24 = oacute
+ shift altgr keycode 24 = Oacute
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = bracketleft
+ shift keycode 26 = braceleft
+ altgr keycode 26 = dead_diaeresis
+ shift altgr keycode 26 = dead_abovering
+keycode 27 = bracketright
+ shift keycode 27 = braceright
+ altgr keycode 27 = dead_tilde
+ shift altgr keycode 27 = dead_macron
+ altgr keycode 30 = aogonek
+ shift altgr keycode 30 = Aogonek
+ altgr keycode 31 = sacute
+ shift altgr keycode 31 = Sacute
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = dstroke
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = eng
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = kra
+ altgr keycode 38 = lstroke
+ shift altgr keycode 38 = Lstroke
+keycode 39 = semicolon
+ shift keycode 39 = colon
+ altgr keycode 39 = dead_acute
+ shift altgr keycode 39 = dead_doubleacute
+keycode 40 = apostrophe
+ shift keycode 40 = quotedbl
+ altgr keycode 40 = dead_circumflex
+ shift altgr keycode 40 = dead_caron
+keycode 41 = grave
+ shift keycode 41 = asciitilde
+ altgr keycode 41 = notsign
+keycode 43 = backslash
+ shift keycode 43 = bar
+ altgr keycode 43 = dead_grave
+ shift altgr keycode 43 = dead_breve
+ altgr keycode 44 = zabovedot
+ shift altgr keycode 44 = Zabovedot
+ altgr keycode 45 = zacute
+ shift altgr keycode 45 = Zacute
+ altgr keycode 46 = cacute
+ shift altgr keycode 46 = Cacute
+ altgr keycode 47 = leftdoublequotemark
+ shift altgr keycode 47 = grave
+ altgr keycode 48 = rightdoublequotemark
+ altgr keycode 49 = nacute
+ shift altgr keycode 49 = Nacute
+ altgr keycode 50 = mu
+ shift altgr keycode 50 = masculine
+keycode 51 = comma
+ shift keycode 51 = less
+ altgr keycode 51 = horizconnector
+ shift altgr keycode 51 = multiply
+keycode 52 = period
+ shift keycode 52 = greater
+ altgr keycode 52 = periodcentered
+ shift altgr keycode 52 = division
+keycode 53 = slash
+ shift keycode 53 = question
+ altgr keycode 53 = dead_belowdot
+ shift altgr keycode 53 = dead_abovedot
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = onesuperior
+ shift altgr keycode 2 = exclamdown
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = at
+ shift altgr keycode 3 = oneeighth
+ shift keycode 4 = numbersign
+ altgr keycode 4 = sterling
+ shift keycode 5 = dollar
+ altgr keycode 5 = section
+ shift keycode 6 = percent
+ altgr keycode 6 = onehalf
+ shift altgr keycode 6 = threeeighths
+ shift keycode 7 = ampersand
+ altgr keycode 7 = threequarters
+ shift altgr keycode 7 = fiveeighths
+ shift keycode 8 = slash
+ altgr keycode 8 = braceleft
+ shift altgr keycode 8 = seveneighths
+ shift keycode 9 = parenleft
+ altgr keycode 9 = bracketleft
+ shift altgr keycode 9 = trademark
+ shift keycode 10 = parenright
+ altgr keycode 10 = bracketright
+ shift altgr keycode 10 = plusminus
+ shift keycode 11 = equal
+ altgr keycode 11 = braceright
+ shift altgr keycode 11 = degree
+keycode 12 = apostrophe
+ shift keycode 12 = question
+ altgr keycode 12 = backslash
+ shift altgr keycode 12 = questiondown
+keycode 13 = guillemotleft
+ shift keycode 13 = guillemotright
+ altgr keycode 13 = dead_cedilla
+ shift altgr keycode 13 = dead_ogonek
+ shift altgr keycode 16 = Greek_OMEGA
+ altgr keycode 17 = lstroke
+ shift altgr keycode 17 = Lstroke
+ altgr keycode 18 = EuroSign
+ shift altgr keycode 18 = cent
+ altgr keycode 19 = paragraph
+ shift altgr keycode 19 = registered
+ altgr keycode 20 = tslash
+ shift altgr keycode 20 = Tslash
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = downarrow
+ shift altgr keycode 22 = uparrow
+ altgr keycode 23 = rightarrow
+ shift altgr keycode 23 = idotless
+ altgr keycode 24 = oslash
+ shift altgr keycode 24 = Ooblique
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = plus
+ shift keycode 26 = asterisk
+ altgr keycode 26 = dead_diaeresis
+ shift altgr keycode 26 = dead_abovering
+keycode 27 = dead_acute
+ shift keycode 27 = dead_grave
+ altgr keycode 27 = dead_tilde
+ shift altgr keycode 27 = dead_macron
+ altgr keycode 30 = ae
+ shift altgr keycode 30 = AE
+ altgr keycode 31 = ssharp
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = dstroke
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = eng
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = kra
+ altgr keycode 38 = lstroke
+ shift altgr keycode 38 = Lstroke
+keycode 39 = ccedilla
+ shift keycode 39 = Ccedilla
+ shift altgr keycode 39 = dead_doubleacute
+keycode 40 = masculine
+ shift keycode 40 = ordfeminine
+ altgr keycode 40 = dead_circumflex
+ shift altgr keycode 40 = dead_caron
+keycode 41 = backslash
+ shift keycode 41 = bar
+ altgr keycode 41 = notsign
+keycode 43 = dead_tilde
+ shift keycode 43 = dead_circumflex
+ shift altgr keycode 43 = dead_breve
+ altgr keycode 46 = cent
+ shift altgr keycode 46 = copyright
+ altgr keycode 47 = leftdoublequotemark
+ shift altgr keycode 47 = grave
+ altgr keycode 48 = rightdoublequotemark
+ altgr keycode 50 = mu
+keycode 51 = comma
+ shift keycode 51 = semicolon
+ altgr keycode 51 = horizconnector
+ shift altgr keycode 51 = multiply
+keycode 52 = period
+ shift keycode 52 = colon
+ altgr keycode 52 = periodcentered
+ shift altgr keycode 52 = division
+keycode 53 = minus
+ shift keycode 53 = underscore
+ altgr keycode 53 = dead_belowdot
+ shift altgr keycode 53 = dead_abovedot
+keycode 86 = less
+ shift keycode 86 = greater
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = onesuperior
+ shift altgr keycode 2 = exclamdown
+ shift keycode 3 = at
+ altgr keycode 3 = twosuperior
+ shift altgr keycode 3 = onehalf
+ shift keycode 4 = numbersign
+ altgr keycode 4 = threesuperior
+ shift altgr keycode 4 = threequarters
+ shift keycode 5 = dollar
+ altgr keycode 5 = sterling
+ shift altgr keycode 5 = onequarter
+ shift keycode 6 = percent
+ altgr keycode 6 = cent
+ shift keycode 7 = dead_diaeresis
+ altgr keycode 7 = notsign
+ shift altgr keycode 7 = diaeresis
+ shift keycode 8 = ampersand
+ altgr keycode 8 = braceleft
+ shift keycode 9 = asterisk
+ altgr keycode 9 = bracketleft
+ shift keycode 10 = parenleft
+ altgr keycode 10 = bracketright
+ shift keycode 11 = parenright
+ altgr keycode 11 = braceright
+keycode 12 = minus
+ shift keycode 12 = underscore
+ altgr keycode 12 = backslash
+keycode 13 = equal
+ shift keycode 13 = plus
+ altgr keycode 13 = section
+ altgr keycode 18 = EuroSign
+ altgr keycode 19 = registered
+keycode 26 = dead_acute
+ shift keycode 26 = dead_grave
+ altgr keycode 26 = acute
+ shift altgr keycode 26 = grave
+keycode 27 = bracketleft
+ shift keycode 27 = braceleft
+ altgr keycode 27 = ordfeminine
+keycode 39 = ccedilla
+ shift keycode 39 = Ccedilla
+keycode 40 = dead_tilde
+ shift keycode 40 = dead_circumflex
+ altgr keycode 40 = asciitilde
+ shift altgr keycode 40 = asciicircum
+keycode 41 = apostrophe
+ shift keycode 41 = quotedbl
+keycode 43 = bracketright
+ shift keycode 43 = braceright
+ altgr keycode 43 = masculine
+ altgr keycode 46 = copyright
+ altgr keycode 50 = mu
+keycode 51 = comma
+ shift keycode 51 = less
+keycode 52 = KP_Decimal
+ shift keycode 52 = greater
+keycode 53 = semicolon
+ shift keycode 53 = colon
+ numlock keycode 83 = comma
+keycode 86 = backslash
+ shift keycode 86 = bar
+keycode 115 = slash
+ shift keycode 115 = question
+ altgr keycode 115 = degree
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ shift keycode 3 = at
+ shift altgr keycode 3 = quotedbl
+ shift keycode 4 = numbersign
+ shift keycode 5 = dollar
+ shift altgr keycode 5 = asterisk
+ shift keycode 6 = percent
+ shift altgr keycode 6 = colon
+ shift keycode 7 = asciicircum
+ shift altgr keycode 7 = comma
+ shift keycode 8 = ampersand
+ shift altgr keycode 8 = period
+ shift keycode 9 = asterisk
+ shift altgr keycode 9 = semicolon
+ shift keycode 10 = parenleft
+ shift keycode 11 = parenright
+keycode 12 = minus
+ shift keycode 12 = underscore
+keycode 13 = equal
+ shift keycode 13 = plus
+ altgr keycode 16 = Cyrillic_shorti
+ shift altgr keycode 16 = Cyrillic_SHORTI
+ altgr keycode 17 = Cyrillic_tse
+ shift altgr keycode 17 = Cyrillic_TSE
+ altgr keycode 18 = Cyrillic_u
+ shift altgr keycode 18 = Cyrillic_U
+ altgr keycode 19 = Cyrillic_ka
+ shift altgr keycode 19 = Cyrillic_KA
+ altgr keycode 20 = Cyrillic_ie
+ shift altgr keycode 20 = Cyrillic_IE
+ altgr keycode 21 = Cyrillic_en
+ shift altgr keycode 21 = Cyrillic_EN
+ altgr keycode 22 = Cyrillic_ghe
+ shift altgr keycode 22 = Cyrillic_GHE
+ altgr keycode 23 = Cyrillic_sha
+ shift altgr keycode 23 = Cyrillic_SHA
+ altgr keycode 24 = Cyrillic_shcha
+ shift altgr keycode 24 = Cyrillic_SHCHA
+ altgr keycode 25 = Cyrillic_ze
+ shift altgr keycode 25 = Cyrillic_ZE
+keycode 26 = bracketleft
+ shift keycode 26 = braceleft
+ altgr keycode 26 = Cyrillic_ha
+ shift altgr keycode 26 = Cyrillic_HA
+keycode 27 = bracketright
+ shift keycode 27 = braceright
+ altgr keycode 27 = Cyrillic_hardsign
+ shift altgr keycode 27 = Cyrillic_HARDSIGN
+ altgr keycode 30 = Cyrillic_ef
+ shift altgr keycode 30 = Cyrillic_EF
+ altgr keycode 31 = Cyrillic_yeru
+ shift altgr keycode 31 = Cyrillic_YERU
+ altgr keycode 32 = Cyrillic_ve
+ shift altgr keycode 32 = Cyrillic_VE
+ altgr keycode 33 = Cyrillic_a
+ shift altgr keycode 33 = Cyrillic_A
+ altgr keycode 34 = Cyrillic_pe
+ shift altgr keycode 34 = Cyrillic_PE
+ altgr keycode 35 = Cyrillic_er
+ shift altgr keycode 35 = Cyrillic_ER
+ altgr keycode 36 = Cyrillic_o
+ shift altgr keycode 36 = Cyrillic_O
+ altgr keycode 37 = Cyrillic_el
+ shift altgr keycode 37 = Cyrillic_EL
+ altgr keycode 38 = Cyrillic_de
+ shift altgr keycode 38 = Cyrillic_DE
+keycode 39 = semicolon
+ shift keycode 39 = colon
+ altgr keycode 39 = Cyrillic_zhe
+ shift altgr keycode 39 = Cyrillic_ZHE
+keycode 40 = apostrophe
+ shift keycode 40 = quotedbl
+ altgr keycode 40 = Cyrillic_e
+ shift altgr keycode 40 = Cyrillic_E
+keycode 41 = grave
+ shift keycode 41 = asciitilde
+ altgr keycode 41 = Cyrillic_io
+ shift altgr keycode 41 = Cyrillic_IO
+keycode 43 = backslash
+ shift keycode 43 = bar
+ altgr keycode 44 = Cyrillic_ya
+ shift altgr keycode 44 = Cyrillic_YA
+ altgr keycode 45 = Cyrillic_che
+ shift altgr keycode 45 = Cyrillic_CHE
+ altgr keycode 46 = Cyrillic_es
+ shift altgr keycode 46 = Cyrillic_ES
+ altgr keycode 47 = Cyrillic_em
+ shift altgr keycode 47 = Cyrillic_EM
+ altgr keycode 48 = Cyrillic_i
+ shift altgr keycode 48 = Cyrillic_I
+ altgr keycode 49 = Cyrillic_te
+ shift altgr keycode 49 = Cyrillic_TE
+ altgr keycode 50 = Cyrillic_softsign
+ shift altgr keycode 50 = Cyrillic_SOFTSIGN
+keycode 51 = comma
+ shift keycode 51 = less
+ altgr keycode 51 = Cyrillic_be
+ shift altgr keycode 51 = Cyrillic_BE
+keycode 52 = period
+ shift keycode 52 = greater
+ altgr keycode 52 = Cyrillic_yu
+ shift altgr keycode 52 = Cyrillic_YU
+keycode 53 = slash
+ shift keycode 53 = question
+ altgr keycode 86 = slash
+ shift altgr keycode 86 = bar
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = asciitilde
+ shift altgr keycode 2 = dead_tilde
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = dead_caron
+ shift altgr keycode 3 = caron
+ shift keycode 4 = numbersign
+ altgr keycode 4 = asciicircum
+ shift altgr keycode 4 = dead_circumflex
+ shift keycode 5 = dollar
+ altgr keycode 5 = dead_breve
+ shift altgr keycode 5 = breve
+ shift keycode 6 = percent
+ altgr keycode 6 = degree
+ shift altgr keycode 6 = dead_abovering
+ shift keycode 7 = ampersand
+ altgr keycode 7 = dead_ogonek
+ shift altgr keycode 7 = ogonek
+ shift keycode 8 = slash
+ altgr keycode 8 = grave
+ shift altgr keycode 8 = dead_grave
+ shift keycode 9 = parenleft
+ altgr keycode 9 = dead_abovedot
+ shift altgr keycode 9 = abovedot
+ shift keycode 10 = parenright
+ altgr keycode 10 = dead_acute
+ shift keycode 11 = equal
+ altgr keycode 11 = dead_doubleacute
+ shift altgr keycode 11 = doubleacute
+keycode 12 = apostrophe
+ shift keycode 12 = question
+ altgr keycode 12 = dead_diaeresis
+ shift altgr keycode 12 = diaeresis
+keycode 13 = plus
+ shift keycode 13 = asterisk
+ altgr keycode 13 = dead_cedilla
+ shift altgr keycode 13 = cedilla
+ altgr keycode 16 = backslash
+ shift altgr keycode 16 = Greek_OMEGA
+ altgr keycode 17 = bar
+ shift altgr keycode 17 = Lstroke
+ altgr keycode 18 = EuroSign
+ altgr keycode 19 = paragraph
+ shift altgr keycode 19 = registered
+ altgr keycode 20 = tslash
+ shift altgr keycode 20 = Tslash
+keycode 21 = z
+ shift keycode 21 = Z
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = downarrow
+ shift altgr keycode 22 = uparrow
+ altgr keycode 23 = rightarrow
+ shift altgr keycode 23 = idotless
+ altgr keycode 24 = oslash
+ shift altgr keycode 24 = Ooblique
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = scaron
+ shift keycode 26 = Scaron
+ altgr keycode 26 = division
+keycode 27 = dstroke
+ shift keycode 27 = Dstroke
+ altgr keycode 27 = multiply
+ shift altgr keycode 27 = dead_macron
+ altgr keycode 30 = ae
+ shift altgr keycode 30 = AE
+ altgr keycode 31 = ssharp
+ shift altgr keycode 31 = section
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = bracketleft
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = bracketright
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = lstroke
+ altgr keycode 38 = Lstroke
+keycode 39 = ccaron
+ shift keycode 39 = Ccaron
+keycode 40 = cacute
+ shift keycode 40 = Cacute
+ altgr keycode 40 = ssharp
+keycode 41 = dead_cedilla
+ altgr keycode 41 = notsign
+keycode 43 = zcaron
+ shift keycode 43 = Zcaron
+ altgr keycode 43 = currency
+keycode 44 = y
+ shift keycode 44 = Y
+ altgr keycode 44 = guillemotleft
+ altgr keycode 45 = guillemotright
+ altgr keycode 46 = cent
+ shift altgr keycode 46 = copyright
+ altgr keycode 47 = at
+ altgr keycode 48 = braceleft
+ altgr keycode 49 = braceright
+ altgr keycode 50 = section
+ shift altgr keycode 50 = masculine
+keycode 51 = comma
+ shift keycode 51 = semicolon
+ altgr keycode 51 = horizconnector
+keycode 52 = period
+ shift keycode 52 = colon
+ altgr keycode 52 = periodcentered
+keycode 53 = minus
+ shift keycode 53 = underscore
+ altgr keycode 53 = dead_belowdot
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ shift keycode 3 = quotedbl
+ altgr keycode 3 = at
+ shift keycode 4 = numbersign
+ altgr keycode 4 = sterling
+ shift keycode 5 = currency
+ altgr keycode 5 = dollar
+ shift keycode 6 = percent
+ shift keycode 7 = ampersand
+ shift keycode 8 = slash
+ altgr keycode 8 = braceleft
+ shift keycode 9 = parenleft
+ altgr keycode 9 = bracketleft
+ shift keycode 10 = parenright
+ altgr keycode 10 = bracketright
+ shift keycode 11 = equal
+ altgr keycode 11 = braceright
+keycode 12 = plus
+ shift keycode 12 = question
+ altgr keycode 12 = backslash
+keycode 13 = dead_acute
+ shift keycode 13 = dead_grave
+ altgr keycode 18 = EuroSign
+keycode 26 = aring
+ shift keycode 26 = Aring
+keycode 27 = dead_diaeresis
+ shift keycode 27 = dead_circumflex
+ altgr keycode 27 = dead_tilde
+keycode 39 = odiaeresis
+ shift keycode 39 = Odiaeresis
+keycode 40 = adiaeresis
+ shift keycode 40 = Adiaeresis
+keycode 41 = section
+ shift keycode 41 = onehalf
+keycode 43 = apostrophe
+ shift keycode 43 = asterisk
+ altgr keycode 50 = mu
+keycode 51 = comma
+ shift keycode 51 = semicolon
+keycode 52 = period
+ shift keycode 52 = colon
+keycode 53 = minus
+ shift keycode 53 = underscore
+keycode 86 = less
+ shift keycode 86 = greater
+ altgr keycode 86 = bar
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = Thai_lakkhangyao
+ shift altgr keycode 2 = plus
+ shift keycode 3 = at
+ altgr keycode 3 = slash
+ shift altgr keycode 3 = Thai_leknung
+ shift keycode 4 = numbersign
+ altgr keycode 4 = minus
+ shift altgr keycode 4 = Thai_leksong
+ shift keycode 5 = dollar
+ altgr keycode 5 = Thai_phosamphao
+ shift altgr keycode 5 = Thai_leksam
+ shift keycode 6 = percent
+ altgr keycode 6 = Thai_thothung
+ shift altgr keycode 6 = Thai_leksi
+ shift keycode 7 = asciicircum
+ altgr keycode 7 = Thai_sarau
+ shift altgr keycode 7 = Thai_sarauu
+ shift keycode 8 = ampersand
+ altgr keycode 8 = Thai_saraue
+ shift altgr keycode 8 = Thai_baht
+ shift keycode 9 = asterisk
+ altgr keycode 9 = Thai_khokhwai
+ shift altgr keycode 9 = Thai_lekha
+ shift keycode 10 = parenleft
+ altgr keycode 10 = Thai_totao
+ shift altgr keycode 10 = Thai_lekhok
+ shift keycode 11 = parenright
+ altgr keycode 11 = Thai_chochan
+ shift altgr keycode 11 = Thai_lekchet
+keycode 12 = minus
+ shift keycode 12 = underscore
+ altgr keycode 12 = Thai_khokhai
+ shift altgr keycode 12 = Thai_lekpaet
+keycode 13 = equal
+ shift keycode 13 = plus
+ altgr keycode 13 = Thai_chochang
+ shift altgr keycode 13 = Thai_lekkao
+ altgr keycode 16 = Thai_maiyamok
+ shift altgr keycode 16 = Thai_leksun
+ altgr keycode 17 = Thai_saraaimaimalai
+ shift altgr keycode 17 = quotedbl
+ altgr keycode 18 = Thai_saraam
+ shift altgr keycode 18 = Thai_dochada
+ altgr keycode 19 = Thai_phophan
+ shift altgr keycode 19 = Thai_thonangmontho
+ altgr keycode 20 = Thai_saraa
+ shift altgr keycode 20 = Thai_thothong
+ altgr keycode 21 = Thai_maihanakat
+ shift altgr keycode 21 = Thai_nikhahit
+ altgr keycode 22 = Thai_saraii
+ shift altgr keycode 22 = Thai_maitri
+ altgr keycode 23 = Thai_rorua
+ shift altgr keycode 23 = Thai_nonen
+ altgr keycode 24 = Thai_nonu
+ shift altgr keycode 24 = Thai_paiyannoi
+ altgr keycode 25 = Thai_yoyak
+ shift altgr keycode 25 = Thai_yoying
+keycode 26 = bracketleft
+ shift keycode 26 = braceleft
+ altgr keycode 26 = Thai_bobaimai
+ shift altgr keycode 26 = Thai_thothan
+keycode 27 = bracketright
+ shift keycode 27 = braceright
+ altgr keycode 27 = Thai_loling
+ shift altgr keycode 27 = comma
+ altgr keycode 30 = Thai_fofan
+ shift altgr keycode 30 = Thai_ru
+ altgr keycode 31 = Thai_hohip
+ shift altgr keycode 31 = Thai_khorakhang
+ altgr keycode 32 = Thai_kokai
+ shift altgr keycode 32 = Thai_topatak
+ altgr keycode 33 = Thai_dodek
+ shift altgr keycode 33 = Thai_sarao
+ altgr keycode 34 = Thai_sarae
+ shift altgr keycode 34 = Thai_chochoe
+ altgr keycode 35 = Thai_maitho
+ shift altgr keycode 35 = Thai_maitaikhu
+ altgr keycode 36 = Thai_maiek
+ shift altgr keycode 36 = Thai_maichattawa
+ altgr keycode 37 = Thai_saraaa
+ shift altgr keycode 37 = Thai_sorusi
+ altgr keycode 38 = Thai_sosua
+ shift altgr keycode 38 = Thai_sosala
+keycode 39 = semicolon
+ shift keycode 39 = colon
+ altgr keycode 39 = Thai_wowaen
+ shift altgr keycode 39 = Thai_soso
+keycode 40 = apostrophe
+ shift keycode 40 = quotedbl
+ altgr keycode 40 = Thai_ngongu
+ shift altgr keycode 40 = period
+keycode 41 = grave
+ shift keycode 41 = asciitilde
+ altgr keycode 41 = underscore
+ shift altgr keycode 41 = percent
+ shift keycode 42 = ISO_First_Group
+keycode 43 = backslash
+ shift keycode 43 = bar
+ altgr keycode 43 = Thai_khokhuat
+ shift altgr keycode 43 = Thai_khokhon
+ altgr keycode 44 = Thai_phophung
+ shift altgr keycode 44 = parenleft
+ altgr keycode 45 = Thai_popla
+ shift altgr keycode 45 = parenright
+ altgr keycode 46 = Thai_saraae
+ shift altgr keycode 46 = Thai_choching
+ altgr keycode 47 = Thai_oang
+ shift altgr keycode 47 = Thai_honokhuk
+ altgr keycode 48 = Thai_sarai
+ shift altgr keycode 48 = Thai_phinthu
+ altgr keycode 49 = Thai_sarauee
+ shift altgr keycode 49 = Thai_thanthakhat
+ altgr keycode 50 = Thai_thothahan
+ shift altgr keycode 50 = question
+keycode 51 = comma
+ shift keycode 51 = less
+ altgr keycode 51 = Thai_moma
+ shift altgr keycode 51 = Thai_thophuthao
+keycode 52 = period
+ shift keycode 52 = greater
+ altgr keycode 52 = Thai_saraaimaimuan
+ shift altgr keycode 52 = Thai_lochula
+keycode 53 = slash
+ shift keycode 53 = question
+ altgr keycode 53 = Thai_fofa
+ shift altgr keycode 53 = Thai_lu
+ shift keycode 54 = ISO_Last_Group
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ altgr keycode 2 = onesuperior
+ shift altgr keycode 2 = exclamdown
+ shift keycode 3 = apostrophe
+ altgr keycode 3 = at
+ shift altgr keycode 3 = oneeighth
+ shift keycode 4 = dead_circumflex
+ altgr keycode 4 = numbersign
+ shift altgr keycode 4 = sterling
+ shift keycode 5 = plus
+ altgr keycode 5 = dollar
+ shift keycode 6 = percent
+ altgr keycode 6 = onehalf
+ shift altgr keycode 6 = threeeighths
+ shift keycode 7 = ampersand
+ altgr keycode 7 = asciicircum
+ shift altgr keycode 7 = fiveeighths
+ shift keycode 8 = slash
+ altgr keycode 8 = braceleft
+ shift altgr keycode 8 = seveneighths
+ shift keycode 9 = parenleft
+ altgr keycode 9 = bracketleft
+ shift altgr keycode 9 = trademark
+ shift keycode 10 = parenright
+ altgr keycode 10 = bracketright
+ shift altgr keycode 10 = plusminus
+ shift keycode 11 = equal
+ altgr keycode 11 = braceright
+ shift altgr keycode 11 = degree
+keycode 12 = asterisk
+ shift keycode 12 = question
+ altgr keycode 12 = backslash
+ shift altgr keycode 12 = questiondown
+keycode 13 = minus
+ shift keycode 13 = underscore
+ altgr keycode 13 = dead_cedilla
+ shift altgr keycode 13 = dead_ogonek
+ altgr keycode 16 = at
+ shift altgr keycode 16 = Greek_OMEGA
+ altgr keycode 17 = lstroke
+ shift altgr keycode 17 = Lstroke
+ altgr keycode 18 = EuroSign
+ altgr keycode 19 = paragraph
+ shift altgr keycode 19 = registered
+ altgr keycode 20 = tslash
+ shift altgr keycode 20 = Tslash
+ altgr keycode 21 = leftarrow
+ shift altgr keycode 21 = yen
+ altgr keycode 22 = downarrow
+ shift altgr keycode 22 = uparrow
+keycode 23 = idotless
+ shift keycode 23 = I
+ altgr keycode 23 = rightarrow
+ altgr keycode 24 = oslash
+ shift altgr keycode 24 = Ooblique
+ altgr keycode 25 = thorn
+ shift altgr keycode 25 = THORN
+keycode 26 = gbreve
+ shift keycode 26 = Gbreve
+ altgr keycode 26 = dead_diaeresis
+ shift altgr keycode 26 = dead_abovering
+keycode 27 = udiaeresis
+ shift keycode 27 = Udiaeresis
+ altgr keycode 27 = asciitilde
+ shift altgr keycode 27 = dead_macron
+ altgr keycode 30 = ae
+ shift altgr keycode 30 = AE
+ altgr keycode 31 = ssharp
+ shift altgr keycode 31 = section
+ altgr keycode 32 = eth
+ shift altgr keycode 32 = ETH
+ altgr keycode 33 = dstroke
+ shift altgr keycode 33 = ordfeminine
+ altgr keycode 34 = eng
+ shift altgr keycode 34 = ENG
+ altgr keycode 35 = hstroke
+ shift altgr keycode 35 = Hstroke
+ altgr keycode 37 = kra
+ shift altgr keycode 37 = ampersand
+ altgr keycode 38 = lstroke
+ shift altgr keycode 38 = Lstroke
+keycode 39 = scedilla
+ shift keycode 39 = Scedilla
+ altgr keycode 39 = dead_acute
+ shift altgr keycode 39 = dead_doubleacute
+keycode 40 = i
+ shift keycode 40 = Iabovedot
+ altgr keycode 40 = dead_circumflex
+ shift altgr keycode 40 = dead_caron
+keycode 41 = backslash
+ shift keycode 41 = quotedbl
+ altgr keycode 41 = asciitilde
+keycode 43 = comma
+ shift keycode 43 = semicolon
+ altgr keycode 43 = bar
+ shift altgr keycode 43 = dead_breve
+ altgr keycode 44 = guillemotleft
+ shift altgr keycode 44 = less
+ altgr keycode 45 = guillemotright
+ shift altgr keycode 45 = greater
+ altgr keycode 46 = cent
+ shift altgr keycode 46 = copyright
+ altgr keycode 47 = leftdoublequotemark
+ shift altgr keycode 47 = grave
+ altgr keycode 48 = rightdoublequotemark
+ shift altgr keycode 48 = apostrophe
+ altgr keycode 50 = mu
+ shift altgr keycode 50 = masculine
+keycode 51 = odiaeresis
+ shift keycode 51 = Odiaeresis
+ altgr keycode 51 = less
+ shift altgr keycode 51 = multiply
+keycode 52 = ccedilla
+ shift keycode 52 = Ccedilla
+ altgr keycode 52 = greater
+ shift altgr keycode 52 = division
+keycode 53 = period
+ shift keycode 53 = colon
+ altgr keycode 53 = dead_belowdot
+ shift altgr keycode 53 = dead_abovedot
--- /dev/null
+include common
+ shift keycode 2 = exclam
+ shift keycode 3 = at
+ shift keycode 4 = numbersign
+ shift keycode 5 = dollar
+ shift keycode 6 = percent
+ shift keycode 7 = asciicircum
+ shift keycode 8 = ampersand
+ shift keycode 9 = asterisk
+ shift keycode 10 = parenleft
+ shift keycode 11 = parenright
+keycode 12 = minus
+ shift keycode 12 = underscore
+keycode 13 = equal
+ shift keycode 13 = plus
+keycode 26 = bracketleft
+ shift keycode 26 = braceleft
+keycode 27 = bracketright
+ shift keycode 27 = braceright
+keycode 39 = semicolon
+ shift keycode 39 = colon
+keycode 40 = apostrophe
+ shift keycode 40 = quotedbl
+keycode 41 = grave
+ shift keycode 41 = asciitilde
+keycode 43 = backslash
+ shift keycode 43 = bar
+keycode 51 = comma
+ shift keycode 51 = less
+keycode 52 = period
+ shift keycode 52 = greater
+keycode 53 = slash
+ shift keycode 53 = question
super(EngineBase, self).__init__()
self.__proxy = EngineProxy (self, bus.get_dbusconn(), object_path)
- def process_key_event(self, keyval, state):
+ def process_key_event(self, keyval, keycode, state):
return False
def focus_in(self):
super(EngineProxy, self).__init__(conn, object_path)
self.__engine = engine
- def ProcessKeyEvent(self, keyval, state):
- return self.__engine.process_key_event(keyval, state)
+ def ProcessKeyEvent(self, keyval, keycode, state):
+ return self.__engine.process_key_event(keyval, keycode, state)
def FocusIn(self):
return self.__engine.focus_in()
visible = args[1]
self.emit("update-lookup-table", table, visible)
- def process_key_event(self, keyval, modifiers):
+ def process_key_event(self, keyval, keycode, modifiers):
keyval = dbus.UInt32(keyval)
+ keycode = dbus.UInt32(keycode)
modifiers = dbus.UInt32(modifiers)
- return self.__context.ProcessKeyEvent(keyval, modifiers)
+ return self.__context.ProcessKeyEvent(keyval, keycode, modifiers)
def set_cursor_location(self, x, y, w, h):
x = dbus.Int32(x)
async_callbacks=("reply_cb", "error_cb"), \
**args)
- @method(in_signature="uu", out_signature="b")
- def ProcessKeyEvent(self, keyval, state):
+ @method(in_signature="uuu", out_signature="b")
+ def ProcessKeyEvent(self, keyval, keycode, state):
pass
@method(in_signature="iiii")
ibusfactory.h \
ibusengine.h \
ibustext.h \
+ ibuskeymap.h \
ibusattribute.h \
ibusproperty.h \
ibuslookuptable.h \
ibusfactory.c \
ibusengine.c \
ibustext.c \
+ ibuskeymap.c \
ibusattribute.c \
ibusproperty.c \
ibuslookuptable.c \
@GIO2_CFLAGS@ \
@DBUS_CFLAGS@ \
-DG_LOG_DOMAIN=\"IBUS\" \
+ -DIBUS_DATA_DIR=\"$(pkgdatadir)\" \
$(NULL)
libibus_la_LDFLAGS = \
@X11_LIBS@ \
TESTS = \
test-text \
+ test-keymap \
test-keynames \
test-attribute \
test-lookuptable \
$(NULL)
noinst_PROGRAMS = $(TESTS)
test_text_DEPENDENCIES = $(DEPS)
+test_keymap_DEPENDENCIES = $(DEPS)
test_keynames_DEPENDENCIES = $(DEPS)
test_attribute_DEPENDENCIES = $(DEPS)
test_lookuptable_DEPENDENCIES = $(DEPS)
#include <ibuslookuptable.h>
#include <ibusbus.h>
#include <ibuskeysyms.h>
+#include <ibuskeymap.h>
#include <ibusmessage.h>
#include <ibuspendingcall.h>
#include <ibuserror.h>
static gboolean ibus_engine_process_key_event
(IBusEngine *engine,
guint keyval,
+ guint keycode,
guint state);
static void ibus_engine_focus_in (IBusEngine *engine);
static void ibus_engine_focus_out (IBusEngine *engine);
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (IBusEngineClass, process_key_event),
NULL, NULL,
- ibus_marshal_BOOL__UINT_UINT,
+ ibus_marshal_BOOL__UINT_UINT_UINT,
G_TYPE_BOOLEAN,
- 2,
+ 3,
+ G_TYPE_UINT,
G_TYPE_UINT,
G_TYPE_UINT);
}
if (ibus_message_is_method_call (message, IBUS_INTERFACE_ENGINE, "ProcessKeyEvent")) {
- guint keyval, state;
+ guint keyval, keycode, state;
gboolean retval;
IBusError *error = NULL;
retval = ibus_message_get_args (message,
&error,
G_TYPE_UINT, &keyval,
+ G_TYPE_UINT, &keycode,
G_TYPE_UINT, &state,
G_TYPE_INVALID);
if (!retval)
- goto _keypress_fail;
+ goto _keypress2_fail;
retval = FALSE;
g_signal_emit (engine,
engine_signals[PROCESS_KEY_EVENT],
0,
keyval,
+ keycode,
state,
&retval);
ibus_message_unref (return_message);
return TRUE;
- _keypress_fail:
+ _keypress2_fail:
error_message = ibus_message_new_error_printf (message,
DBUS_ERROR_INVALID_ARGS,
- "%s.%s: Can not match signature (uu) of method",
- IBUS_INTERFACE_ENGINE, "ProcessKeyEvent");
+ "%s.%s: Can not match signature (ubu) of method",
+ IBUS_INTERFACE_ENGINE, "ProcessKeyEvent2");
ibus_connection_send (connection, error_message);
ibus_message_unref (error_message);
return TRUE;
}
+
else if (ibus_message_is_method_call (message, IBUS_INTERFACE_ENGINE, "CandidateClicked")) {
guint index, button, state;
gboolean retval;
static gboolean
ibus_engine_process_key_event (IBusEngine *engine,
guint keyval,
+ guint keycode,
guint state)
{
- // g_debug ("process-key-event (%d, %d)", keyval, state);
return FALSE;
}
gboolean (* process_key_event)
(IBusEngine *engine,
guint keyval,
+ guint keycode,
guint state);
void (* focus_in) (IBusEngine *engine);
void (* focus_out) (IBusEngine *engine);
guint button,
guint state);
-
-
/*< private >*/
/* padding */
gpointer pdummy[8];
return FALSE;
}
+
gboolean
ibus_input_context_process_key_event (IBusInputContext *context,
guint32 keyval,
+ guint32 keycode,
guint32 state)
{
g_assert (IBUS_IS_INPUT_CONTEXT (context));
-1,
&error,
G_TYPE_UINT, &keyval,
+ G_TYPE_UINT, &keycode,
G_TYPE_UINT, &state,
G_TYPE_INVALID);
if (!retval) {
gboolean ibus_input_context_process_key_event
(IBusInputContext *context,
guint32 keyval,
+ guint32 keycode,
guint32 state);
void ibus_input_context_set_cursor_location
(IBusInputContext *context,
--- /dev/null
+/* vim:set et sts=4: */
+/* IBus - The Input Bus
+ * Copyright (C) 2008-2009 Huang Peng <shawn.p.huang@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#include <errno.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <glib/gstdio.h>
+#include "ibusshare.h"
+#include "ibuskeysyms.h"
+#include "ibuskeymap.h"
+
+/* functions prototype */
+static void ibus_keymap_class_init (IBusKeymapClass *klass);
+static void ibus_keymap_init (IBusKeymap *keymap);
+static void ibus_keymap_destroy (IBusKeymap *keymap);
+static gboolean ibus_keymap_load (const gchar *name,
+ KEYMAP keymap);
+static IBusObjectClass *parent_class = NULL;
+static GHashTable *keymaps = NULL;
+
+GType
+ibus_keymap_get_type (void)
+{
+ static GType type = 0;
+
+ static const GTypeInfo type_info = {
+ sizeof (IBusKeymapClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) ibus_keymap_class_init,
+ NULL, /* class finialize */
+ NULL, /* class data */
+ sizeof (IBusKeymap),
+ 0,
+ (GInstanceInitFunc) ibus_keymap_init,
+ };
+
+ if (type == 0) {
+ type = g_type_register_static (IBUS_TYPE_OBJECT,
+ "IBusKeymap",
+ &type_info,
+ 0);
+ }
+
+ return type;
+}
+
+static void
+ibus_keymap_class_init (IBusKeymapClass *klass)
+{
+ IBusObjectClass *object_class = IBUS_OBJECT_CLASS (klass);
+
+ parent_class = (IBusObjectClass *) g_type_class_peek_parent (klass);
+
+ object_class->destroy = (IBusObjectDestroyFunc) ibus_keymap_destroy;
+}
+
+static void
+ibus_keymap_init (IBusKeymap *keymap)
+{
+ keymap->name = NULL;
+ memset (keymap->keymap, 0, sizeof (keymap->keymap));
+}
+
+static void
+ibus_keymap_destroy (IBusKeymap *keymap)
+{
+ if (keymap->name != NULL) {
+ g_free (keymap->name);
+ keymap->name = NULL;
+ }
+ IBUS_OBJECT_CLASS (parent_class)->destroy ((IBusObject *)keymap);
+}
+
+#define SKIP_SPACE(p) \
+ while (*p == ' ') p++;
+
+static gboolean
+ibus_keymap_parse_line (gchar *str,
+ KEYMAP keymap)
+{
+ gchar *p1, *p2;
+ gint i;
+ guint keycode;
+ guint keysym;
+
+ const struct {
+ const gchar *prefix;
+ const gint len;
+ } prefix [] = {
+ { "keycode ", sizeof ("keycode ") - 1 },
+ { "shift keycode ", sizeof ("shift keycode ") - 1 },
+ { "altgr keycode ", sizeof ("altgr keycode ") - 1},
+ { "shift altgr keycode ", sizeof ("shift altgr keycode ") - 1},
+ { "numlock keycode ", sizeof ("numlock keycode ") - 1},
+ };
+
+ p1 = str;
+
+ SKIP_SPACE(p1);
+
+ if (*p1 == '#')
+ return TRUE;
+
+ if (strncmp (p1, "include ", sizeof ("include ") - 1) == 0) {
+ p1 += sizeof ("include ") - 1;
+ for (p2 = p1; *p2 != '\n'; p2++);
+ *p2 = '\0';
+ return ibus_keymap_load (p1, keymap);
+ }
+
+ for (i = 0; i < sizeof (prefix) / sizeof (prefix[0]); i++) {
+ if (strncmp (p1, prefix[i].prefix, prefix[i].len) == 0) {
+ p1 += prefix[i].len;
+ break;
+ }
+ }
+
+ if (i >= sizeof (prefix) / sizeof (prefix[0]))
+ return FALSE;
+
+ keycode = (guint) strtoul (p1, &p2, 10);
+
+ if (keycode == 0 && p1 == p2)
+ return FALSE;
+
+ if (keycode < 0 || keycode > 255)
+ return FALSE;
+
+ p1 = p2;
+
+ if (*p1++ != ' ')
+ return FALSE;
+ if (*p1++ != '=')
+ return FALSE;
+ if (*p1++ != ' ')
+ return FALSE;
+
+ for (p2 = p1; *p2 != '\n'; p2++);
+ *p2 = '\0';
+
+ keysym = ibus_keyval_from_name (p1);
+
+ if (keysym == IBUS_VoidSymbol)
+ return FALSE;
+
+ keymap[keycode][i] = keysym;
+
+ return TRUE;
+}
+
+static gboolean
+ibus_keymap_load (const gchar *name,
+ KEYMAP keymap)
+{
+ gchar *fname;
+ FILE *pf;
+ gchar buf[256];
+ gint lineno;
+
+
+ fname = g_build_filename (IBUS_DATA_DIR, "keymaps", name, NULL);
+
+ if (fname == NULL) {
+ return FALSE;
+ }
+ pf = g_fopen (fname, "r");
+ g_free (fname);
+
+ if (pf == NULL) {
+ return FALSE;
+ }
+
+ lineno = 0;
+ while (fgets (buf, sizeof (buf), pf) != NULL) {
+ lineno ++;
+ if (!ibus_keymap_parse_line (buf, keymap)) {
+ g_warning ("parse %s failed on %d line", name, lineno);
+ lineno = -1;
+ break;
+ }
+ }
+
+ fclose (pf);
+
+ if (lineno == -1) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void
+ibus_keymap_fill (KEYMAP keymap)
+{
+ gint i;
+ for (i = 0; i < 256; i++) {
+ if (keymap[i][1] == 0)
+ keymap[i][1] = keymap[i][0];
+ if (keymap[i][2] == 0)
+ keymap[i][2] = keymap[i][0];
+ if (keymap[i][3] == 0)
+ keymap[i][3] = keymap[i][2];
+ }
+}
+
+static void
+_keymap_destroy_cb (IBusKeymap *keymap,
+ gpointer user_data)
+{
+ g_hash_table_remove (keymaps, keymap->name);
+}
+
+IBusKeymap *
+ibus_keymap_new (const gchar *name)
+{
+ g_assert (name != NULL);
+
+ IBusKeymap *keymap;
+
+ if (keymaps == NULL) {
+ keymaps = g_hash_table_new_full (g_str_hash,
+ g_str_equal,
+ (GDestroyNotify) g_free,
+ (GDestroyNotify) g_object_unref);
+ }
+
+ keymap = (IBusKeymap *) g_hash_table_lookup (keymaps, name);
+ if (keymap != NULL) {
+ g_object_ref (keymap);
+ return keymap;
+ }
+
+ keymap = g_object_new (IBUS_TYPE_KEYMAP, NULL);
+ if (!ibus_keymap_load (name, keymap->keymap)) {
+ g_object_unref (keymap);
+ return NULL;
+ }
+
+ ibus_keymap_fill (keymap->keymap);
+ keymap->name = g_strdup (name);
+ g_hash_table_insert (keymaps, g_strdup (keymap->name), g_object_ref (keymap));
+
+ g_signal_connect (keymap, "destroy", G_CALLBACK (_keymap_destroy_cb), NULL);
+
+ return keymap;
+}
+
+
+guint32
+ibus_keymap_lookup_keysym (IBusKeymap *keymap,
+ guint16 keycode,
+ guint32 state)
+{
+ g_assert (IBUS_IS_KEYMAP (keymap));
+
+ guint32 keysym;
+
+ keysym = IBUS_VoidSymbol;
+
+ if (keycode < 256) {
+ gboolean is_upper;
+ is_upper = (((state & IBUS_SHIFT_MASK) == IBUS_SHIFT_MASK) ^ ((state & IBUS_LOCK_MASK) == IBUS_LOCK_MASK)) != 0;
+
+ if ((state & IBUS_MOD2_MASK) && (keymap->keymap[keycode][4] != 0)) {
+ keysym = keymap->keymap[keycode][4];
+ }
+ else if (state & IBUS_MOD5_MASK) {
+ keysym = keymap->keymap[keycode][is_upper ? 3: 2];
+ }
+ else {
+ keysym = keymap->keymap[keycode][is_upper ? 1: 0];
+ }
+ }
+
+ return keysym;
+}
--- /dev/null
+/* vim:set et sts=4: */
+/* IBus - The Input Bus
+ * Copyright (C) 2008-2009 Huang Peng <shawn.p.huang@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+/**
+ * SECTION: ibuskeymap
+ * @short_description: Keymap with decorating information.
+ *
+ */
+
+#ifndef __IBUS_KEYMAP_H_
+#define __IBUS_KEYMAP_H_
+
+#include "ibusobject.h"
+
+/*
+ * Type macros.
+ */
+/* define IBusKeymap macros */
+#define IBUS_TYPE_KEYMAP \
+ (ibus_keymap_get_type ())
+#define IBUS_KEYMAP(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), IBUS_TYPE_KEYMAP, IBusKeymap))
+#define IBUS_KEYMAP_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), IBUS_TYPE_KEYMAP, IBusKeymapClass))
+#define IBUS_IS_KEYMAP(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), IBUS_TYPE_KEYMAP))
+#define IBUS_IS_KEYMAP_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), IBUS_TYPE_KEYMAP))
+#define IBUS_KEYMAP_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), IBUS_TYPE_KEYMAP, IBusKeymapClass))
+
+G_BEGIN_DECLS
+
+typedef struct _IBusKeymap IBusKeymap;
+typedef struct _IBusKeymapClass IBusKeymapClass;
+typedef guint KEYMAP[256][5];
+
+/**
+ * IBusKeymap:
+ * A keymap object in IBus.
+ */
+struct _IBusKeymap {
+ IBusObject parent;
+
+ /* members */
+ /*< public >*/
+ gchar *name;
+ KEYMAP keymap;
+};
+
+struct _IBusKeymapClass {
+ IBusObjectClass parent;
+};
+
+GType ibus_keymap_get_type (void);
+
+/**
+ * ibus_keymap_new:
+ * @name: keymap name.
+ * @returns: A newly allocated IBusKeymap.
+ *
+ * New an IBusKeymap.
+ */
+IBusKeymap *ibus_keymap_new (const gchar *name);
+guint ibus_keymap_lookup_keysym (IBusKeymap *keymap,
+ guint16 keycode,
+ guint32 state);
+
+G_END_DECLS
+#endif
+
BOOL:POINTER
BOOL:POINTER,POINTER
BOOL:UINT,UINT
+BOOL:UINT,UINT,UINT
BOOL:ULONG
VOID:INT,INT,INT,INT
VOID:UINT,UINT
--- /dev/null
+#include <linux/input.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include "ibus.h"
+
+#define KEYBOARDPATH "/dev/input/event4"
+
+int main (int argc, char **argv)
+{
+ gint fd;
+ struct input_event e;
+
+ g_type_init ();
+
+ IBusKeymap *keymap = ibus_keymap_new (argc > 1 ? argv[1] : "us");
+
+ g_object_unref (keymap);
+ return 0;
+
+ fd = open (KEYBOARDPATH, O_RDONLY);
+
+
+ while (fd >= 0 && read (fd, &e, sizeof (e)) == sizeof (e)) {
+ if (e.type != EV_KEY)
+ continue;
+ if (e.value != 0)
+ continue;
+
+ g_debug ("=========================================================================");
+ g_debug ("keycode = %d, %s %s %s %s %s", e.code,
+ ibus_keyval_name (ibus_keymap_lookup_keysym (keymap, e.code, 0)),
+ ibus_keyval_name (ibus_keymap_lookup_keysym (keymap, e.code, IBUS_SHIFT_MASK)),
+ ibus_keyval_name (ibus_keymap_lookup_keysym (keymap, e.code, IBUS_MOD5_MASK)),
+ ibus_keyval_name (ibus_keymap_lookup_keysym (keymap, e.code, IBUS_MOD5_MASK | IBUS_SHIFT_MASK)),
+ ibus_keyval_name (ibus_keymap_lookup_keysym (keymap, e.code, IBUS_MOD2_MASK))
+ );
+ }
+
+ g_object_unref (keymap);
+ return 0;
+
+}