summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linux/console/README17
-rw-r--r--linux/console/neo.map1384
2 files changed, 912 insertions, 489 deletions
diff --git a/linux/console/README b/linux/console/README
index 872d5ba..5dec3cc 100644
--- a/linux/console/README
+++ b/linux/console/README
@@ -28,15 +28,6 @@ Dennoch kann man mit »loadkeys -d« zur Standardbelegung wechseln, da diese als
defkeymap.map laut manpage unter /usr/share/keymaps oder
/usr/src/linux/drivers/char, bei mir aber unter /etc liegt.
-Falls das Keypad nicht korrekt funktioniert, dann liegt dies am falschen Status
-von »Num_Lock« (den es unter Neo nicht mehr gibt). Um Num_Lock dennoch
-nachträglich einschalten zu können, muss die Menü-Taste (in der untersten Reihe)
-betätigt werden.
-
-Diese Keymap ist für ein MS Natural Keyboard Elite erstellt worden. Sollten
-andere Tastaturen andere keycodes verwenden (z.B. Laptoptastaturen), sollte dies
-auf der Mailingliste der Neo-Tastaturbelegung gemeldet werden.
-
Ergänzung: die keymaps liegen in folgenden Verzeichnissen:
OpenSuSe: /usr/share/kbd/keymaps/i386/
@@ -51,11 +42,5 @@ Was schon geht:
• Die Konsolen-Compose-Kombinationen sind möglich.
Was (noch) nicht geht:
-• Einige Zeichen unterstützt die Konsole überhaupt nicht – z.B. den dead_stroke.
-• Einige Zeichen werden noch nicht automatisch durch Unicode-Nummern ersetzt
- (das ist aber leicht zu beheben).
-• Bisher funktioniert keiner der Modifier_Lock.
-• Die große Menge an Compose-Kombinationen, die unter X möglich sind, werden
- längst nicht alle unterstützt.
-• Auch die Compose-Erweiterungen von Neo sind noch nicht verfügbar.
+• Siehe im Quellcode der neo.map
diff --git a/linux/console/neo.map b/linux/console/neo.map
index ce79798..6868a9d 100644
--- a/linux/console/neo.map
+++ b/linux/console/neo.map
@@ -1,473 +1,911 @@
-! neo.map - german NEO keyboard layout
-! 2010 Pascal Hauck, <neo@pascalhauck.de>
-!
-! Diese Keymap wird über einige Skripte automatisch aus der neo_de.xmodmap
-! erzeugt.
-!
-
-keymaps 0-18
-strings as usual
-compose as usual
-alt_is_meta
-! --------------------------------------------------------------------------
-! Modifier definitions
-! --------------------------------------------------------------------------
- keycode 42 = Shift
-# shift keycode 42 = Caps_Lock
- keycode 54 = Shift
-# shift keycode 54 = Caps_Lock
- keycode 58 = AltGr
-# altgr keycode 58 = AltGr_Lock
- keycode 43 = AltGr
-# altgr keycode 43 = AltGr_Lock
- keycode 86 = ShiftL
-# shiftl keycode 86 = ShiftL_Lock
- keycode 100 = ShiftL
-# shiftl keycode 100 = ShiftL_Lock
-
- keycode 1 = Escape
- shift altgr keycode 1 = Meta_Escape
-
-! --------------------------------------------------------------------------
-! function keys
-! --------------------------------------------------------------------------
-! ----Backspace-------------------------------------------------------------
- keycode 14 = Delete
-! ----Return Enter----------------------------------------------------------
- keycode 28 = Return
- alt keycode 28 = Meta_Control_m
- keycode 96 = KP_Enter
- altgr keycode 96 = Hex_F
-! ----Tab-------------------------------------------------------------------
- keycode 15 = Tab Meta_Tab
- altgr keycode 15 = Compose
-! ----Control Alt-----------------------------------------------------------
- keycode 29 = Control
- keycode 97 = Control
- keycode 56 = Alt
-! ----Prt SclLk Pause-------------------------------------------------------
- keycode 99 =
- control keycode 99 = Control_backslash
- alt keycode 99 = Control_backslash
- control alt keycode 99 = Meta_Control_backslash
- keycode 70 = Scroll_Lock Show_Memory Show_Registers Show_State
- alt keycode 70 = Scroll_Lock
- keycode 119 = Pause
-! ----Home block------------------------------------------------------------
- keycode 102 = Find
- keycode 104 = Prior
- shift keycode 104 = Scroll_Backward
- keycode 107 = Select
- keycode 109 = Next
- shift keycode 109 = Scroll_Forward
- keycode 111 = Remove
- altgr control keycode 111 = Boot
- control alt keycode 111 = Boot
- keycode 110 = Insert
-! ----Navigation block------------------------------------------------------
- keycode 103 = Up
- alt keycode 103 = KeyboardSignal
- keycode 105 = Left
- alt keycode 105 = Decr_Console
- keycode 106 = Right
- alt keycode 106 = Incr_Console
- keycode 108 = Down
-! ----Win keys--------------------------------------------------------------
- keycode 125 = Decr_Console Last_Console Incr_Console
- keycode 126 = Incr_Console Last_Console Decr_Console
-! ----menue key-------------------------------------------------------------
- keycode 127 = Compose F100
-! ----F-keys----------------------------------------------------------------
- keycode 59 = F1 F13 Console_13 F25
- alt keycode 59 = Console_1
- control alt keycode 59 = Console_1
- keycode 60 = F2 F14 Console_14 F26
- alt keycode 60 = Console_2
- control alt keycode 60 = Console_2
- keycode 61 = F3 F15 Console_15 F27
- alt keycode 61 = Console_3
- control alt keycode 61 = Console_3
- keycode 62 = F4 F16 Console_16 F28
- alt keycode 62 = Console_4
- control alt keycode 62 = Console_4
- keycode 63 = F5 F17 Console_17 F29
- alt keycode 63 = Console_5
- control alt keycode 63 = Console_5
- keycode 64 = F6 F18 Console_18 F30
- alt keycode 64 = Console_6
- control alt keycode 64 = Console_6
- keycode 65 = F7 F19 Console_19 F31
- alt keycode 65 = Console_7
- control alt keycode 65 = Console_7
- keycode 66 = F8 F20 Console_20 F32
- alt keycode 66 = Console_8
- control alt keycode 66 = Console_8
- keycode 67 = F9 F21 Console_21 F33
- alt keycode 67 = Console_9
- control alt keycode 67 = Console_9
- keycode 68 = F10 F22 Console_22 F34
- alt keycode 68 = Console_10
- control alt keycode 68 = Console_10
- keycode 87 = F11 F23 Console_23 F35
- alt keycode 87 = Console_11
- control alt keycode 87 = Console_11
- keycode 88 = F12 F24 Console_24 F36
- alt keycode 88 = Console_12
- control alt keycode 88 = Console_12
-! ----unknown keys from defkeymap.map---------------------------------------
- keycode 84 = Last_Console
- keycode 89 =
- keycode 90 =
- keycode 91 =
- keycode 92 =
- keycode 93 =
- keycode 94 =
- keycode 95 =
- keycode 101 = Break
- keycode 112 = Macro
- altgr control keycode 112 = VoidSymbol
- shift alt keycode 112 = VoidSymbol
- altgr alt keycode 112 = VoidSymbol
- keycode 113 = F13
- altgr control keycode 113 = VoidSymbol
- shift alt keycode 113 = VoidSymbol
- altgr alt keycode 113 = VoidSymbol
- keycode 114 = F14
- altgr control keycode 114 = VoidSymbol
- shift alt keycode 114 = VoidSymbol
- altgr alt keycode 114 = VoidSymbol
- keycode 115 = Help
- altgr control keycode 115 = VoidSymbol
- shift alt keycode 115 = VoidSymbol
- altgr alt keycode 115 = VoidSymbol
- keycode 116 = Do
- altgr control keycode 116 = VoidSymbol
- shift alt keycode 116 = VoidSymbol
- altgr alt keycode 116 = VoidSymbol
- keycode 117 = F17
- altgr control keycode 117 = VoidSymbol
- shift alt keycode 117 = VoidSymbol
- altgr alt keycode 117 = VoidSymbol
- keycode 118 = KP_MinPlus
- altgr control keycode 118 = VoidSymbol
- shift alt keycode 118 = VoidSymbol
- altgr alt keycode 118 = VoidSymbol
- keycode 119 = Pause
- keycode 120 =
- keycode 121 =
- keycode 122 =
- keycode 123 =
- keycode 124 =
-
-
-! ----Space key-------------------------------------------------------------
- keycode 57 = space space space nobreakspace
- shiftl keycode 57 = KP_0
- shift shiftl keycode 57 = KP_0
- altgr shiftl keycode 57 = U+202F
-
-! ----dead keys-------------------------------------------------------------
- keycode 41 = dead_circumflex dead_caron U+21BB U+02DE
- shiftl keycode 41 = U+0307
- keycode 13 = dead_grave dead_cedilla U+030a VoidSymbol
- shiftl keycode 13 = dead_diaeresis
- altgr shiftl keycode 13 = U+0304
- keycode 27 = dead_acute dead_tilde VoidSymbol VoidSymbol
- shiftl keycode 27 = dead_doubleacute
- altgr shiftl keycode 27 = dead_breve
-
-! --------------------------------------------------------------------------
-! Row 1 (number row)
-! --------------------------------------------------------------------------
- keycode 2 = one degree onesuperior VoidSymbol
- shiftl keycode 2 = ordfeminine
- altgr shiftl keycode 2 = notsign
- keycode 3 = two section twosuperior VoidSymbol
- shiftl keycode 3 = masculine
- altgr shiftl keycode 3 = U+2228
- keycode 4 = three U+2113 threesuperior VoidSymbol
- shiftl keycode 4 = U+2116
- altgr shiftl keycode 4 = U+2227
- keycode 5 = four guillemotright U+203A U+2640
- altgr shiftl keycode 5 = U+22A5
- keycode 6 = five guillemotleft U+2039 U+2642
- shiftl keycode 6 = periodcentered
- altgr shiftl keycode 6 = U+2221
- keycode 7 = six dollar cent U+26A5
- shiftl keycode 7 = sterling
- altgr shiftl keycode 7 = U+2225
- keycode 8 = seven U+20ac yen U+03F0
- shiftl keycode 8 = currency
- altgr shiftl keycode 8 = U+2192
- keycode 9 = eight U+201e U+201a U+2329
- shiftl keycode 9 = Tab
- altgr shiftl keycode 9 = U+221e
- keycode 10 = nine U+201c U+2018 U+232a
- shiftl keycode 10 = KP_Divide
- shift shiftl keycode 10 = KP_Divide
- altgr shiftl keycode 10 = U+221d
- keycode 11 = zero U+201d U+2019 VoidSymbol
- shiftl keycode 11 = KP_Multiply
- shift shiftl keycode 11 = KP_Multiply
- keycode 12 = minus U+2014 VoidSymbol U+2011
- shiftl keycode 12 = KP_Subtract
- shift shiftl keycode 12 = KP_Subtract
- altgr shiftl keycode 12 = hyphen
-
-! --------------------------------------------------------------------------
-! Row 2 (upper row)
-! --------------------------------------------------------------------------
- keycode 16 = x
- altgr keycode 16 = U+2026
- shift altgr keycode 16 = U+03be
- shiftl keycode 16 = Prior
- shift shiftl keycode 16 = Prior
- altgr shiftl keycode 16 = U+039e
- keycode 17 = v
- altgr keycode 17 = underscore
- shiftl keycode 17 = BackSpace
- shift shiftl keycode 17 = BackSpace
- altgr shiftl keycode 17 = U+221a
- keycode 18 = l
- altgr keycode 18 = bracketleft
- shift altgr keycode 18 = U+03bb
- shiftl keycode 18 = Up
- shift shiftl keycode 18 = Up
- altgr shiftl keycode 18 = U+039b
- keycode 19 = c
- altgr keycode 19 = bracketright
- shift altgr keycode 19 = U+03c7
- shiftl keycode 19 = Remove
- shift shiftl keycode 19 = Remove
- altgr shiftl keycode 19 = U+2102
- keycode 20 = w
- altgr keycode 20 = asciicircum
- shift altgr keycode 20 = U+03c9
- shiftl keycode 20 = Next
- shift shiftl keycode 20 = Next
- altgr shiftl keycode 20 = U+03a9
- keycode 21 = k
- altgr keycode 21 = exclam
- shift altgr keycode 21 = U+03ba
- shiftl keycode 21 = exclamdown
- altgr shiftl keycode 21 = multiply
- keycode 22 = h
- altgr keycode 22 = less
- shift altgr keycode 22 = U+03c8
- shiftl keycode 22 = KP_7
- shift shiftl keycode 22 = KP_7
- altgr shiftl keycode 22 = U+03a8
- keycode 23 = g
- altgr keycode 23 = greater
- shift altgr keycode 23 = U+03b3
- shiftl keycode 23 = KP_8
- shift shiftl keycode 23 = KP_8
- altgr shiftl keycode 23 = U+0393
- keycode 24 = f
- altgr keycode 24 = equal
- shift altgr keycode 24 = U+03c6
- shiftl keycode 24 = KP_9
- shift shiftl keycode 24 = KP_9
- altgr shiftl keycode 24 = U+03a6
- keycode 25 = q
- altgr keycode 25 = ampersand
- shift altgr keycode 25 = U+03D5
- shiftl keycode 25 = KP_Add
- shift shiftl keycode 25 = KP_Add
- altgr shiftl keycode 25 = U+211A
- keycode 26 = ssharp U+1E9E U+017F U+03c2
- shiftl keycode 26 = U+2212
- altgr shiftl keycode 26 = U+2218
-
-! --------------------------------------------------------------------------
-! Row 3 (home row, middle row)
-! --------------------------------------------------------------------------
- keycode 30 = u
- altgr keycode 30 = backslash
- shiftl keycode 30 = Home
- shift shiftl keycode 30 = Home
- altgr shiftl keycode 30 = U+2282
- keycode 31 = i
- altgr keycode 31 = slash
- shift altgr keycode 31 = U+03b9
- shiftl keycode 31 = Left
- shift shiftl keycode 31 = Left
- altgr shiftl keycode 31 = U+222b
- keycode 32 = a
- altgr keycode 32 = braceleft
- shift altgr keycode 32 = U+03b1
- shiftl keycode 32 = Down
- shift shiftl keycode 32 = Down
- altgr shiftl keycode 32 = U+2200
- keycode 33 = e
- altgr keycode 33 = braceright
- shift altgr keycode 33 = U+03b5
- shiftl keycode 33 = Right
- shift shiftl keycode 33 = Right
- altgr shiftl keycode 33 = U+2203
- keycode 34 = o
- altgr keycode 34 = asterisk
- shift altgr keycode 34 = U+03bf
- shiftl keycode 34 = End
- shift shiftl keycode 34 = End
- keycode 35 = s
- altgr keycode 35 = question
- shift altgr keycode 35 = U+03c3
- shiftl keycode 35 = questiondown
- altgr shiftl keycode 35 = U+03a3
- keycode 36 = n
- altgr keycode 36 = parenleft
- shift altgr keycode 36 = U+03bd
- shiftl keycode 36 = KP_4
- shift shiftl keycode 36 = KP_4
- altgr shiftl keycode 36 = U+2115
- keycode 37 = r
- altgr keycode 37 = parenright
- shift altgr keycode 37 = U+03c1
- shiftl keycode 37 = KP_5
- shift shiftl keycode 37 = KP_5
- altgr shiftl keycode 37 = U+211D
- keycode 38 = t
- altgr keycode 38 = minus
- shift altgr keycode 38 = U+03c4
- shiftl keycode 38 = KP_6
- shift shiftl keycode 38 = KP_6
- altgr shiftl keycode 38 = U+2202
- keycode 39 = d
- altgr keycode 39 = colon
- shift altgr keycode 39 = U+03b4
- shiftl keycode 39 = U+002c
- shift shiftl keycode 39 = comma
- altgr shiftl keycode 39 = U+0394
- keycode 40 = y
- altgr keycode 40 = at
- shift altgr keycode 40 = U+03c5
- shiftl keycode 40 = period
- shift shiftl keycode 40 = U+002e
- altgr shiftl keycode 40 = U+2207
-
-! --------------------------------------------------------------------------
-! Row 4 (lower row)
-! --------------------------------------------------------------------------
- keycode 44 = udiaeresis Udiaeresis numbersign VoidSymbol
- shiftl keycode 44 = Escape
- shift shiftl keycode 44 = Escape
- altgr shiftl keycode 44 = U+222a
- keycode 45 = odiaeresis Odiaeresis dollar U+03F5
- shiftl keycode 45 = Tab
- altgr shiftl keycode 45 = U+2229
- keycode 46 = adiaeresis Adiaeresis bar U+03b7
- shiftl keycode 46 = Insert
- shift shiftl keycode 46 = Insert
- altgr shiftl keycode 46 = U+2135
- keycode 47 = p
- altgr keycode 47 = asciitilde
- shift altgr keycode 47 = U+03c0
- shiftl keycode 47 = Return
- shift shiftl keycode 47 = Return
- altgr shiftl keycode 47 = U+03a0
- keycode 48 = z
- altgr keycode 48 = grave
- shift altgr keycode 48 = U+03b6
- altgr shiftl keycode 48 = U+2124
- keycode 49 = b
- altgr keycode 49 = plus
- shift altgr keycode 49 = U+03b2
- shiftl keycode 49 = colon
- altgr shiftl keycode 49 = U+21D0
- keycode 50 = m
- altgr keycode 50 = percent
- shift altgr keycode 50 = U+03bc
- shiftl keycode 50 = KP_1
- shift shiftl keycode 50 = KP_1
- altgr shiftl keycode 50 = U+21d4
- keycode 51 = comma U+2013 quotedbl U+03F1
- shiftl keycode 51 = KP_2
- shift shiftl keycode 51 = KP_2
- altgr shiftl keycode 51 = U+21D2
- keycode 52 = period U+2022 apostrophe U+03D1
- shiftl keycode 52 = KP_3
- shift shiftl keycode 52 = KP_3
- altgr shiftl keycode 52 = U+21A6
- keycode 53 = j
- altgr keycode 53 = semicolon
- shift altgr keycode 53 = U+03b8
- shiftl keycode 53 = semicolon
- altgr shiftl keycode 53 = U+0398
-
-! --------------------------------------------------------------------------
-! Keypad Row 1 (uppest row)
-! --------------------------------------------------------------------------
- keycode 69 = Tab VoidSymbol equal VoidSymbol
- shiftl keycode 69 = U+2260
- altgr shiftl keycode 69 = U+2261
- keycode 98 = KP_Divide KP_Divide division U+2300
- shiftl keycode 98 = U+2044
- altgr shiftl keycode 98 = U+2223
- keycode 55 = KP_Multiply KP_Multiply U+22C5 U+2299
- shiftl keycode 55 = multiply
- altgr shiftl keycode 55 = U+2297
- keycode 74 = KP_Subtract KP_Subtract U+2212 U+2296
- shiftl keycode 74 = U+2216
- altgr shiftl keycode 74 = U+2238
-
-! --------------------------------------------------------------------------
-! Keypad Row 2 (upper row)
-! --------------------------------------------------------------------------
- keycode 71 = KP_7 U+2714 U+2195 U+226A
- altgr shiftl keycode 71 = U+2308
- keycode 72 = KP_8 U+2718 U+2191 U+2229
- altgr shiftl keycode 72 = U+22C2
- keycode 73 = KP_9 U+2020 U+20D7 U+226B
- altgr shiftl keycode 73 = U+2309
- keycode 78 = KP_Add KP_Add plusminus U+2295
- shiftl keycode 78 = U+2213
- altgr shiftl keycode 78 = U+2214
-
-! --------------------------------------------------------------------------
-! Keypad Row 3 (home row, middle row)
-! --------------------------------------------------------------------------
- keycode 75 = KP_4 U+2663 U+2190 U+2282
- altgr shiftl keycode 75 = U+2286
- keycode 76 = KP_5 U+20ac colon U+22B6
- altgr shiftl keycode 76 = U+22B7
- keycode 77 = KP_6 U+2023 U+2192 U+2283
- altgr shiftl keycode 77 = U+2287
-
-! --------------------------------------------------------------------------
-! Keypad Row 4 (lower row)
-! --------------------------------------------------------------------------
- keycode 79 = KP_1 U+2666 U+2194 U+2264
- altgr shiftl keycode 79 = U+230a
- keycode 80 = KP_2 U+2665 U+2193 U+222a
- altgr shiftl keycode 80 = U+22C3
- keycode 81 = KP_3 U+2660 U+21CC U+2265
- altgr shiftl keycode 81 = U+230B
-
-! --------------------------------------------------------------------------
-! Keypad Row 5 (lowest row)
-! --------------------------------------------------------------------------
- keycode 82 = KP_0 U+2423 percent U+2030
- altgr shiftl keycode 82 = U+25A1
- keycode 83 = U+002c period comma U+2032
- shiftl keycode 83 = Remove
- shift shiftl keycode 83 = Remove
- altgr shiftl keycode 83 = U+2033
-
-
-! --------------------------------------------------------------------------
-! additional Keys with control function (has to be edited manually!!!!)
-! --------------------------------------------------------------------------
- control keycode 57 = nul
-# for some obscure reason, this is required even when we set alt_is_meta
- alt control keycode 57 = Meta_nul
- control altgr keycode 30 = Control_backslash
- control altgr keycode 19 = Control_bracketright
- control altgr keycode 17 = Control_underscore
- control altgr keycode 20 = Control_asciicircum
-
-
-! --------------------------------------------------------------------------
-! Strings and Compose
-! --------------------------------------------------------------------------
-# string F100 = "setleds +num\n"
+#==========================================================================
+# README
+#==========================================================================
+# Neo2 Console Keymap
+#
+# Notes:
+# • Not using KP_-keysyms on fourth level as NumLock is not controllable
+# (i.e. can't be forced to on whenever the keymap is loaded).
+# On console there is little need for KP_-keysyms.
+# • Mod4-Lock is not implemented (technical difficulties, not enough levels)
+# • Dead keys only when there exists a corresponding dead keysym on console
+# (i.e circumflex, gravis, cedille, trema, akut and tilde) otherwise the
+# undead character is produced.
+# • Using default compose as for now. Maximum number allowed compose
+# sequences seems to be 256, not enough for the standard Neo2 sequences.
+# • Wrong Caps_Lock behaviour with ssharp (not returning to lower case when
+# using Caps_Lock and Shift)
+# See: https://bugzilla.kernel.org/show_bug.cgi?id=7063
+
+#==========================================================================
+# Statements and defaults
+#==========================================================================
+
+keymaps 0-127 # We define these levels
+compose as usual # Use default compose
+strings as usual # Use default strings
+
+include "linux-keys-bare" # Some standard key mappings
+
+#==========================================================================
+# Modifier
+#==========================================================================
+
+ keycode 42 = ShiftL # Enable Shift
+ shiftr keycode 42 = Caps_Lock # Enable Caps_Lock
+ keycode 54 = ShiftR # Enable Shift
+ shiftl keycode 54 = Caps_Lock # Enable Caps_Lock
+
+ keycode 58 = AltGr # Mod3 Left
+ keycode 43 = AltGr # Mod3 Right
+
+ keycode 86 = CtrlL # Mod4 Left
+ keycode 100 = CtrlL # Mod4 Right
+
+#==========================================================================
+# Compose
+#==========================================================================
+
+# TODO: add most important compose definitions
+
+ altgr keycode 15 = Compose # Mod3+Tab: Compose
+
+#==========================================================================
+# Characters (autogenerated)
+#==========================================================================
+
+ keycode 41 = U+02c6 # ˆ [U+02C6] MODIFIER LETTER CIRCUMFLEX ACCENT
+ shiftl keycode 41 = U+02c7 # ˇ [U+02C7] CARON
+ shiftr keycode 41 = U+02c7 # ˇ [U+02C7] CARON
+ altgr keycode 41 = U+21bb # ↻ [U+21BB] CLOCKWISE OPEN CIRCLE ARROW
+ ctrll keycode 41 = U+02d9 # ˙ [U+02D9] DOT ABOVE
+shiftl ctrll keycode 41 = U+02d9 # ˙ [U+02D9] DOT ABOVE
+shiftr ctrll keycode 41 = U+02d9 # ˙ [U+02D9] DOT ABOVE
+shiftl altgr keycode 41 = U+02de # ˞ [U+02DE] MODIFIER LETTER RHOTIC HOOK
+shiftr altgr keycode 41 = U+02de # ˞ [U+02DE] MODIFIER LETTER RHOTIC HOOK
+ctrll altgr keycode 41 = period # . [U+002E] FULL STOP
+
+ keycode 2 = one # 1 [U+0031] DIGIT ONE
+ shiftl keycode 2 = degree # ° [U+00B0] DEGREE SIGN
+ shiftr keycode 2 = degree # ° [U+00B0] DEGREE SIGN
+ altgr keycode 2 = onesuperior # ¹ [U+00B9] SUPERSCRIPT ONE
+ ctrll keycode 2 = ordfeminine # ª [U+00AA] FEMININE ORDINAL INDICATOR
+shiftl ctrll keycode 2 = ordfeminine # ª [U+00AA] FEMININE ORDINAL INDICATOR
+shiftr ctrll keycode 2 = ordfeminine # ª [U+00AA] FEMININE ORDINAL INDICATOR
+shiftl altgr keycode 2 = U+2081 # ₁ [U+2081] SUBSCRIPT ONE
+shiftr altgr keycode 2 = U+2081 # ₁ [U+2081] SUBSCRIPT ONE
+ctrll altgr keycode 2 = notsign # ¬ [U+00AC] NOT SIGN
+
+ keycode 3 = two # 2 [U+0032] DIGIT TWO
+ shiftl keycode 3 = section # § [U+00A7] SECTION SIGN
+ shiftr keycode 3 = section # § [U+00A7] SECTION SIGN
+ altgr keycode 3 = twosuperior # ² [U+00B2] SUPERSCRIPT TWO
+ ctrll keycode 3 = masculine # º [U+00BA] MASCULINE ORDINAL INDICATOR
+shiftl ctrll keycode 3 = masculine # º [U+00BA] MASCULINE ORDINAL INDICATOR
+shiftr ctrll keycode 3 = masculine # º [U+00BA] MASCULINE ORDINAL INDICATOR
+shiftl altgr keycode 3 = U+2082 # ₂ [U+2082] SUBSCRIPT TWO
+shiftr altgr keycode 3 = U+2082 # ₂ [U+2082] SUBSCRIPT TWO
+ctrll altgr keycode 3 = U+2228 # ∨ [U+2228] LOGICAL OR
+
+ keycode 4 = three # 3 [U+0033] DIGIT THREE
+ shiftl keycode 4 = U+2113 # ℓ [U+2113] SCRIPT SMALL L
+ shiftr keycode 4 = U+2113 # ℓ [U+2113] SCRIPT SMALL L
+ altgr keycode 4 = threesuperior # ³ [U+00B3] SUPERSCRIPT THREE
+ ctrll keycode 4 = U+2116 # № [U+2116] NUMERO SIGN
+shiftl ctrll keycode 4 = U+2116 # № [U+2116] NUMERO SIGN
+shiftr ctrll keycode 4 = U+2116 # № [U+2116] NUMERO SIGN
+shiftl altgr keycode 4 = U+2083 # ₃ [U+2083] SUBSCRIPT THREE
+shiftr altgr keycode 4 = U+2083 # ₃ [U+2083] SUBSCRIPT THREE
+ctrll altgr keycode 4 = U+2227 # ∧ [U+2227] LOGICAL AND
+
+ keycode 5 = four # 4 [U+0034] DIGIT FOUR
+ shiftl keycode 5 = guillemotright # » [U+00BB] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ shiftr keycode 5 = guillemotright # » [U+00BB] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ altgr keycode 5 = U+203a # › [U+203A] SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ ctrll keycode 5 = space # [U+0020] SPACE
+shiftl ctrll keycode 5 = space # [U+0020] SPACE
+shiftr ctrll keycode 5 = space # [U+0020] SPACE
+shiftl altgr keycode 5 = U+2640 # ♀ [U+2640] FEMALE SIGN
+shiftr altgr keycode 5 = U+2640 # ♀ [U+2640] FEMALE SIGN
+ctrll altgr keycode 5 = U+22a5 # ⊥ [U+22A5] UP TACK
+
+ keycode 6 = five # 5 [U+0035] DIGIT FIVE
+ shiftl keycode 6 = guillemotleft # « [U+00AB] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ shiftr keycode 6 = guillemotleft # « [U+00AB] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ altgr keycode 6 = U+2039 # ‹ [U+2039] SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ ctrll keycode 6 = periodcentered # · [U+00B7] MIDDLE DOT
+shiftl ctrll keycode 6 = periodcentered # · [U+00B7] MIDDLE DOT
+shiftr ctrll keycode 6 = periodcentered # · [U+00B7] MIDDLE DOT
+shiftl altgr keycode 6 = U+2642 # ♂ [U+2642] MALE SIGN
+shiftr altgr keycode 6 = U+2642 # ♂ [U+2642] MALE SIGN
+ctrll altgr keycode 6 = U+2221 # ∡ [U+2221] MEASURED ANGLE
+
+ keycode 7 = six # 6 [U+0036] DIGIT SIX
+ shiftl keycode 7 = dollar # $ [U+0024] DOLLAR SIGN
+ shiftr keycode 7 = dollar # $ [U+0024] DOLLAR SIGN
+ altgr keycode 7 = cent # ¢ [U+00A2] CENT SIGN
+ ctrll keycode 7 = sterling # £ [U+00A3] POUND SIGN
+shiftl ctrll keycode 7 = sterling # £ [U+00A3] POUND SIGN
+shiftr ctrll keycode 7 = sterling # £ [U+00A3] POUND SIGN
+shiftl altgr keycode 7 = U+26a5 # ⚥ [U+26A5] MALE AND FEMALE SIGN
+shiftr altgr keycode 7 = U+26a5 # ⚥ [U+26A5] MALE AND FEMALE SIGN
+ctrll altgr keycode 7 = U+2225 # ∥ [U+2225] PARALLEL TO
+
+ keycode 8 = seven # 7 [U+0037] DIGIT SEVEN
+ shiftl keycode 8 = U+20ac # € [U+20AC] EURO SIGN
+ shiftr keycode 8 = U+20ac # € [U+20AC] EURO SIGN
+ altgr keycode 8 = yen # ¥ [U+00A5] YEN SIGN
+ ctrll keycode 8 = currency # ¤ [U+00A4] CURRENCY SIGN
+shiftl ctrll keycode 8 = currency # ¤ [U+00A4] CURRENCY SIGN
+shiftr ctrll keycode 8 = currency # ¤ [U+00A4] CURRENCY SIGN
+shiftl altgr keycode 8 = U+03f0 # ϰ [U+03F0] GREEK KAPPA SYMBOL
+shiftr altgr keycode 8 = U+03f0 # ϰ [U+03F0] GREEK KAPPA SYMBOL
+ctrll altgr keycode 8 = U+2192 # → [U+2192] RIGHTWARDS ARROW
+
+ keycode 9 = eight # 8 [U+0038] DIGIT EIGHT
+ shiftl keycode 9 = U+201e # „ [U+201E] DOUBLE LOW-9 QUOTATION MARK
+ shiftr keycode 9 = U+201e # „ [U+201E] DOUBLE LOW-9 QUOTATION MARK
+ altgr keycode 9 = U+201a # ‚ [U+201A] SINGLE LOW-9 QUOTATION MARK
+ ctrll keycode 9 = U+21e5 # ⇥ [U+21E5] RIGHTWARDS ARROW TO BAR
+shiftl ctrll keycode 9 = U+21e5 # ⇥ [U+21E5] RIGHTWARDS ARROW TO BAR
+shiftr ctrll keycode 9 = U+21e5 # ⇥ [U+21E5] RIGHTWARDS ARROW TO BAR
+shiftl altgr keycode 9 = U+27e8 # ⟨ [U+27E8] MATHEMATICAL LEFT ANGLE BRACKET
+shiftr altgr keycode 9 = U+27e8 # ⟨ [U+27E8] MATHEMATICAL LEFT ANGLE BRACKET
+ctrll altgr keycode 9 = U+221e # ∞ [U+221E] INFINITY
+
+ keycode 10 = nine # 9 [U+0039] DIGIT NINE
+ shiftl keycode 10 = U+201c # “ [U+201C] LEFT DOUBLE QUOTATION MARK
+ shiftr keycode 10 = U+201c # “ [U+201C] LEFT DOUBLE QUOTATION MARK
+ altgr keycode 10 = U+2018 # ‘ [U+2018] LEFT SINGLE QUOTATION MARK
+ ctrll keycode 10 = slash # / [U+002F] SOLIDUS
+shiftl ctrll keycode 10 = slash # / [U+002F] SOLIDUS
+shiftr ctrll keycode 10 = slash # / [U+002F] SOLIDUS
+shiftl altgr keycode 10 = U+27e9 # ⟩ [U+27E9] MATHEMATICAL RIGHT ANGLE BRACKET
+shiftr altgr keycode 10 = U+27e9 # ⟩ [U+27E9] MATHEMATICAL RIGHT ANGLE BRACKET
+ctrll altgr keycode 10 = U+221d # ∝ [U+221D] PROPORTIONAL TO
+
+ keycode 11 = zero # 0 [U+0030] DIGIT ZERO
+ shiftl keycode 11 = U+201d # ” [U+201D] RIGHT DOUBLE QUOTATION MARK
+ shiftr keycode 11 = U+201d # ” [U+201D] RIGHT DOUBLE QUOTATION MARK
+ altgr keycode 11 = U+2019 # ’ [U+2019] RIGHT SINGLE QUOTATION MARK
+ ctrll keycode 11 = asterisk # * [U+002A] ASTERISK
+shiftl ctrll keycode 11 = asterisk # * [U+002A] ASTERISK
+shiftr ctrll keycode 11 = asterisk # * [U+002A] ASTERISK
+shiftl altgr keycode 11 = U+2080 # ₀ [U+2080] SUBSCRIPT ZERO
+shiftr altgr keycode 11 = U+2080 # ₀ [U+2080] SUBSCRIPT ZERO
+ctrll altgr keycode 11 = U+2205 # ∅ [U+2205] EMPTY SET
+
+ keycode 12 = minus # - [U+002D] HYPHEN-MINUS
+ shiftl keycode 12 = U+2014 # — [U+2014] EM DASH
+ shiftr keycode 12 = U+2014 # — [U+2014] EM DASH
+ altgr keycode 12 = space # [U+0020] SPACE
+ ctrll keycode 12 = minus # - [U+002D] HYPHEN-MINUS
+shiftl ctrll keycode 12 = minus # - [U+002D] HYPHEN-MINUS
+shiftr ctrll keycode 12 = minus # - [U+002D] HYPHEN-MINUS
+shiftl altgr keycode 12 = U+2011 # ‑ [U+2011] NON-BREAKING HYPHEN
+shiftr altgr keycode 12 = U+2011 # ‑ [U+2011] NON-BREAKING HYPHEN
+ctrll altgr keycode 12 = U+254c # ╌ [U+254C] BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL
+
+ keycode 13 = grave # ` [U+0060] GRAVE ACCENT
+ shiftl keycode 13 = cedilla # ¸ [U+00B8] CEDILLA
+ shiftr keycode 13 = cedilla # ¸ [U+00B8] CEDILLA
+ altgr keycode 13 = U+02da # ˚ [U+02DA] RING ABOVE
+ ctrll keycode 13 = diaeresis # ¨ [U+00A8] DIAERESIS
+shiftl ctrll keycode 13 = diaeresis # ¨ [U+00A8] DIAERESIS
+shiftr ctrll keycode 13 = diaeresis # ¨ [U+00A8] DIAERESIS
+shiftl altgr keycode 13 = U+1ffe # ῾ [U+1FFE] GREEK DASIA
+shiftr altgr keycode 13 = U+1ffe # ῾ [U+1FFE] GREEK DASIA
+ctrll altgr keycode 13 = macron # ¯ [U+00AF] MACRON
+
+ keycode 16 = x # x [U+0078] LATIN SMALL LETTER X
+shift shiftl keycode 16 = x # x [U+0078] LATIN SMALL LETTER X
+shift shiftr keycode 16 = x # x [U+0078] LATIN SMALL LETTER X
+ shiftl keycode 16 = +X # X [U+0058] LATIN CAPITAL LETTER X
+ shiftr keycode 16 = +X # X [U+0058] LATIN CAPITAL LETTER X
+ altgr keycode 16 = U+2026 # … [U+2026] HORIZONTAL ELLIPSIS
+ ctrll keycode 16 = U+21de # ⇞ [U+21DE] UPWARDS ARROW WITH DOUBLE STROKE
+shiftl ctrll keycode 16 = U+21de # ⇞ [U+21DE] UPWARDS ARROW WITH DOUBLE STROKE
+shiftr ctrll keycode 16 = U+21de # ⇞ [U+21DE] UPWARDS ARROW WITH DOUBLE STROKE
+shiftl altgr keycode 16 = U+03be # ξ [U+03BE] GREEK SMALL LETTER XI
+shiftr altgr keycode 16 = U+03be # ξ [U+03BE] GREEK SMALL LETTER XI
+ctrll altgr keycode 16 = U+039e # Ξ [U+039E] GREEK CAPITAL LETTER XI
+
+ keycode 17 = v # v [U+0076] LATIN SMALL LETTER V
+shift shiftl keycode 17 = v # v [U+0076] LATIN SMALL LETTER V
+shift shiftr keycode 17 = v # v [U+0076] LATIN SMALL LETTER V
+ shiftl keycode 17 = +V # V [U+0056] LATIN CAPITAL LETTER V
+ shiftr keycode 17 = +V # V [U+0056] LATIN CAPITAL LETTER V
+ altgr keycode 17 = underscore # _ [U+005F] LOW LINE
+ ctrll keycode 17 = U+232b # ⌫ [U+232B] ERASE TO THE LEFT
+shiftl ctrll keycode 17 = U+232b # ⌫ [U+232B] ERASE TO THE LEFT
+shiftr ctrll keycode 17 = U+232b # ⌫ [U+232B] ERASE TO THE LEFT
+shiftl altgr keycode 17 = space # [U+0020] SPACE
+shiftr altgr keycode 17 = space # [U+0020] SPACE
+ctrll altgr keycode 17 = U+221a # √ [U+221A] SQUARE ROOT
+
+ keycode 18 = l # l [U+006C] LATIN SMALL LETTER L
+shift shiftl keycode 18 = l # l [U+006C] LATIN SMALL LETTER L
+shift shiftr keycode 18 = l # l [U+006C] LATIN SMALL LETTER L
+ shiftl keycode 18 = +L # L [U+004C] LATIN CAPITAL LETTER L
+ shiftr keycode 18 = +L # L [U+004C] LATIN CAPITAL LETTER L
+ altgr keycode 18 = bracketleft # [ [U+005B] LEFT SQUARE BRACKET
+ ctrll keycode 18 = U+21e1 # ⇡ [U+21E1] UPWARDS DASHED ARROW
+shiftl ctrll keycode 18 = U+21e1 # ⇡ [U+21E1] UPWARDS DASHED ARROW
+shiftr ctrll keycode 18 = U+21e1 # ⇡ [U+21E1] UPWARDS DASHED ARROW
+shiftl altgr keycode 18 = U+03bb # λ [U+03BB] GREEK SMALL LETTER LAMDA
+shiftr altgr keycode 18 = U+03bb # λ [U+03BB] GREEK SMALL LETTER LAMDA
+ctrll altgr keycode 18 = U+039b # Λ [U+039B] GREEK CAPITAL LETTER LAMDA
+
+ keycode 19 = c # c [U+0063] LATIN SMALL LETTER C
+shift shiftl keycode 19 = c # c [U+0063] LATIN SMALL LETTER C
+shift shiftr keycode 19 = c # c [U+0063] LATIN SMALL LETTER C
+ shiftl keycode 19 = +C # C [U+0043] LATIN CAPITAL LETTER C
+ shiftr keycode 19 = +C # C [U+0043] LATIN CAPITAL LETTER C
+ altgr keycode 19 = bracketright # ] [U+005D] RIGHT SQUARE BRACKET
+ ctrll keycode 19 = U+2326 # ⌦ [U+2326] ERASE TO THE RIGHT
+shiftl ctrll keycode 19 = U+2326 # ⌦ [U+2326] ERASE TO THE RIGHT
+shiftr ctrll keycode 19 = U+2326 # ⌦ [U+2326] ERASE TO THE RIGHT
+shiftl altgr keycode 19 = U+03c7 # χ [U+03C7] GREEK SMALL LETTER CHI
+shiftr altgr keycode 19 = U+03c7 # χ [U+03C7] GREEK SMALL LETTER CHI
+ctrll altgr keycode 19 = U+2102 # ℂ [U+2102] DOUBLE-STRUCK CAPITAL C
+
+ keycode 20 = w # w [U+0077] LATIN SMALL LETTER W
+shift shiftl keycode 20 = w # w [U+0077] LATIN SMALL LETTER W
+shift shiftr keycode 20 = w # w [U+0077] LATIN SMALL LETTER W
+ shiftl keycode 20 = +W # W [U+0057] LATIN CAPITAL LETTER W
+ shiftr keycode 20 = +W # W [U+0057] LATIN CAPITAL LETTER W
+ altgr keycode 20 = asciicircum # ^ [U+005E] CIRCUMFLEX ACCENT
+ ctrll keycode 20 = U+21df # ⇟ [U+21DF] DOWNWARDS ARROW WITH DOUBLE STROKE
+shiftl ctrll keycode 20 = U+21df # ⇟ [U+21DF] DOWNWARDS ARROW WITH DOUBLE STROKE
+shiftr ctrll keycode 20 = U+21df # ⇟ [U+21DF] DOWNWARDS ARROW WITH DOUBLE STROKE
+shiftl altgr keycode 20 = U+03c9 # ω [U+03C9] GREEK SMALL LETTER OMEGA
+shiftr altgr keycode 20 = U+03c9 # ω [U+03C9] GREEK SMALL LETTER OMEGA
+ctrll altgr keycode 20 = U+03a9 # Ω [U+03A9] GREEK CAPITAL LETTER OMEGA
+
+ keycode 21 = k # k [U+006B] LATIN SMALL LETTER K
+shift shiftl keycode 21 = k # k [U+006B] LATIN SMALL LETTER K
+shift shiftr keycode 21 = k # k [U+006B] LATIN SMALL LETTER K
+ shiftl keycode 21 = +K # K [U+004B] LATIN CAPITAL LETTER K
+ shiftr keycode 21 = +K # K [U+004B] LATIN CAPITAL LETTER K
+ altgr keycode 21 = exclam # ! [U+0021] EXCLAMATION MARK
+ ctrll keycode 21 = exclamdown # ¡ [U+00A1] INVERTED EXCLAMATION MARK
+shiftl ctrll keycode 21 = exclamdown # ¡ [U+00A1] INVERTED EXCLAMATION MARK
+shiftr ctrll keycode 21 = exclamdown # ¡ [U+00A1] INVERTED EXCLAMATION MARK
+shiftl altgr keycode 21 = U+03ba # κ [U+03BA] GREEK SMALL LETTER KAPPA
+shiftr altgr keycode 21 = U+03ba # κ [U+03BA] GREEK SMALL LETTER KAPPA
+ctrll altgr keycode 21 = multiply # × [U+00D7] MULTIPLICATION SIGN
+
+ keycode 22 = h # h [U+0068] LATIN SMALL LETTER H
+shift shiftl keycode 22 = h # h [U+0068] LATIN SMALL LETTER H
+shift shiftr keycode 22 = h # h [U+0068] LATIN SMALL LETTER H
+ shiftl keycode 22 = +H # H [U+0048] LATIN CAPITAL LETTER H
+ shiftr keycode 22 = +H # H [U+0048] LATIN CAPITAL LETTER H
+ altgr keycode 22 = less # < [U+003C] LESS-THAN SIGN
+ ctrll keycode 22 = seven # 7 [U+0037] DIGIT SEVEN
+shiftl ctrll keycode 22 = seven # 7 [U+0037] DIGIT SEVEN
+shiftr ctrll keycode 22 = seven # 7 [U+0037] DIGIT SEVEN
+shiftl altgr keycode 22 = U+03c8 # ψ [U+03C8] GREEK SMALL LETTER PSI
+shiftr altgr keycode 22 = U+03c8 # ψ [U+03C8] GREEK SMALL LETTER PSI
+ctrll altgr keycode 22 = U+03a8 # Ψ [U+03A8] GREEK CAPITAL LETTER PSI
+
+ keycode 23 = g # g [U+0067] LATIN SMALL LETTER G
+shift shiftl keycode 23 = g # g [U+0067] LATIN SMALL LETTER G
+shift shiftr keycode 23 = g # g [U+0067] LATIN SMALL LETTER G
+ shiftl keycode 23 = +G # G [U+0047] LATIN CAPITAL LETTER G
+ shiftr keycode 23 = +G # G [U+0047] LATIN CAPITAL LETTER G
+ altgr keycode 23 = greater # > [U+003E] GREATER-THAN SIGN
+ ctrll keycode 23 = eight # 8 [U+0038] DIGIT EIGHT
+shiftl ctrll keycode 23 = eight # 8 [U+0038] DIGIT EIGHT
+shiftr ctrll keycode 23 = eight # 8 [U+0038] DIGIT EIGHT
+shiftl altgr keycode 23 = U+03b3 # γ [U+03B3] GREEK SMALL LETTER GAMMA
+shiftr altgr keycode 23 = U+03b3 # γ [U+03B3] GREEK SMALL LETTER GAMMA
+ctrll altgr keycode 23 = U+0393 # Γ [U+0393] GREEK CAPITAL LETTER GAMMA
+
+ keycode 24 = f # f [U+0066] LATIN SMALL LETTER F
+shift shiftl keycode 24 = f # f [U+0066] LATIN SMALL LETTER F
+shift shiftr keycode 24 = f # f [U+0066] LATIN SMALL LETTER F
+ shiftl keycode 24 = +F # F [U+0046] LATIN CAPITAL LETTER F
+ shiftr keycode 24 = +F # F [U+0046] LATIN CAPITAL LETTER F
+ altgr keycode 24 = equal # = [U+003D] EQUALS SIGN
+ ctrll keycode 24 = nine # 9 [U+0039] DIGIT NINE
+shiftl ctrll keycode 24 = nine # 9 [U+0039] DIGIT NINE
+shiftr ctrll keycode 24 = nine # 9 [U+0039] DIGIT NINE
+shiftl altgr keycode 24 = U+03c6 # φ [U+03C6] GREEK SMALL LETTER PHI
+shiftr altgr keycode 24 = U+03c6 # φ [U+03C6] GREEK SMALL LETTER PHI
+ctrll altgr keycode 24 = U+03a6 # Φ [U+03A6] GREEK CAPITAL LETTER PHI
+
+ keycode 25 = q # q [U+0071] LATIN SMALL LETTER Q
+shift shiftl keycode 25 = q # q [U+0071] LATIN SMALL LETTER Q
+shift shiftr keycode 25 = q # q [U+0071] LATIN SMALL LETTER Q
+ shiftl keycode 25 = +Q # Q [U+0051] LATIN CAPITAL LETTER Q
+ shiftr keycode 25 = +Q # Q [U+0051] LATIN CAPITAL LETTER Q
+ altgr keycode 25 = ampersand # & [U+0026] AMPERSAND
+ ctrll keycode 25 = plus # + [U+002B] PLUS SIGN
+shiftl ctrll keycode 25 = plus # + [U+002B] PLUS SIGN
+shiftr ctrll keycode 25 = plus # + [U+002B] PLUS SIGN
+shiftl altgr keycode 25 = U+03d5 # ϕ [U+03D5] GREEK PHI SYMBOL
+shiftr altgr keycode 25 = U+03d5 # ϕ [U+03D5] GREEK PHI SYMBOL
+ctrll altgr keycode 25 = U+211a # ℚ [U+211A] DOUBLE-STRUCK CAPITAL Q
+
+ keycode 26 = ssharp # ß [U+00DF] LATIN SMALL LETTER SHARP S
+shift shiftl keycode 26 = ssharp # ß [U+00DF] LATIN SMALL LETTER SHARP S
+shift shiftr keycode 26 = ssharp # ß [U+00DF] LATIN SMALL LETTER SHARP S
+ shiftl keycode 26 = +U+1e9e # ẞ [U+1E9E] LATIN CAPITAL LETTER SHARP S
+ shiftr keycode 26 = +U+1e9e # ẞ [U+1E9E] LATIN CAPITAL LETTER SHARP S
+ altgr keycode 26 = U+017f # ſ [U+017F] LATIN SMALL LETTER LONG S
+ ctrll keycode 26 = U+2212 # − [U+2212] MINUS SIGN
+shiftl ctrll keycode 26 = U+2212 # − [U+2212] MINUS SIGN
+shiftr ctrll keycode 26 = U+2212 # − [U+2212] MINUS SIGN
+shiftl altgr keycode 26 = U+03c2 # ς [U+03C2] GREEK SMALL LETTER FINAL SIGMA
+shiftr altgr keycode 26 = U+03c2 # ς [U+03C2] GREEK SMALL LETTER FINAL SIGMA
+ctrll altgr keycode 26 = U+2218 # ∘ [U+2218] RING OPERATOR
+
+ keycode 27 = acute # ´ [U+00B4] ACUTE ACCENT
+ shiftl keycode 27 = U+02dc # ˜ [U+02DC] SMALL TILDE
+ shiftr keycode 27 = U+02dc # ˜ [U+02DC] SMALL TILDE
+ altgr keycode 27 = slash # / [U+002F] SOLIDUS
+ ctrll keycode 27 = U+02dd # ˝ [U+02DD] DOUBLE ACUTE ACCENT
+shiftl ctrll keycode 27 = U+02dd # ˝ [U+02DD] DOUBLE ACUTE ACCENT
+shiftr ctrll keycode 27 = U+02dd # ˝ [U+02DD] DOUBLE ACUTE ACCENT
+shiftl altgr keycode 27 = U+1fbf # ᾿ [U+1FBF] GREEK PSILI
+shiftr altgr keycode 27 = U+1fbf # ᾿ [U+1FBF] GREEK PSILI
+ctrll altgr keycode 27 = U+02d8 # ˘ [U+02D8] BREVE
+
+ keycode 30 = u # u [U+0075] LATIN SMALL LETTER U
+shift shiftl keycode 30 = u # u [U+0075] LATIN SMALL LETTER U
+shift shiftr keycode 30 = u # u [U+0075] LATIN SMALL LETTER U
+ shiftl keycode 30 = +U # U [U+0055] LATIN CAPITAL LETTER U
+ shiftr keycode 30 = +U # U [U+0055] LATIN CAPITAL LETTER U
+ altgr keycode 30 = backslash # \ [U+005C] REVERSE SOLIDUS
+ ctrll keycode 30 = U+21f1 # ⇱ [U+21F1] NORTH WEST ARROW TO CORNER
+shiftl ctrll keycode 30 = U+21f1 # ⇱ [U+21F1] NORTH WEST ARROW TO CORNER
+shiftr ctrll keycode 30 = U+21f1 # ⇱ [U+21F1] NORTH WEST ARROW TO CORNER
+shiftl altgr keycode 30 = space # [U+0020] SPACE
+shiftr altgr keycode 30 = space # [U+0020] SPACE
+ctrll altgr keycode 30 = U+2282 # ⊂ [U+2282] SUBSET OF
+
+ keycode 31 = i # i [U+0069] LATIN SMALL LETTER I
+shift shiftl keycode 31 = i # i [U+0069] LATIN SMALL LETTER I
+shift shiftr keycode 31 = i # i [U+0069] LATIN SMALL LETTER I
+ shiftl keycode 31 = +I # I [U+0049] LATIN CAPITAL LETTER I
+ shiftr keycode 31 = +I # I [U+0049] LATIN CAPITAL LETTER I
+ altgr keycode 31 = slash # / [U+002F] SOLIDUS
+ ctrll keycode 31 = U+21e0 # ⇠ [U+21E0] LEFTWARDS DASHED ARROW
+shiftl ctrll keycode 31 = U+21e0 # ⇠ [U+21E0] LEFTWARDS DASHED ARROW
+shiftr ctrll keycode 31 = U+21e0 # ⇠ [U+21E0] LEFTWARDS DASHED ARROW
+shiftl altgr keycode 31 = U+03b9 # ι [U+03B9] GREEK SMALL LETTER IOTA
+shiftr altgr keycode 31 = U+03b9 # ι [U+03B9] GREEK SMALL LETTER IOTA
+ctrll altgr keycode 31 = U+222b # ∫ [U+222B] INTEGRAL
+
+ keycode 32 = a # a [U+0061] LATIN SMALL LETTER A
+shift shiftl keycode 32 = a # a [U+0061] LATIN SMALL LETTER A
+shift shiftr keycode 32 = a # a [U+0061] LATIN SMALL LETTER A
+ shiftl keycode 32 = +A # A [U+0041] LATIN CAPITAL LETTER A
+ shiftr keycode 32 = +A # A [U+0041] LATIN CAPITAL LETTER A
+ altgr keycode 32 = braceleft # { [U+007B] LEFT CURLY BRACKET
+ ctrll keycode 32 = U+21e3 # ⇣ [U+21E3] DOWNWARDS DASHED ARROW
+shiftl ctrll keycode 32 = U+21e3 # ⇣ [U+21E3] DOWNWARDS DASHED ARROW
+shiftr ctrll keycode 32 = U+21e3 # ⇣ [U+21E3] DOWNWARDS DASHED ARROW
+shiftl altgr keycode 32 = U+03b1 # α [U+03B1] GREEK SMALL LETTER ALPHA
+shiftr altgr keycode 32 = U+03b1 # α [U+03B1] GREEK SMALL LETTER ALPHA
+ctrll altgr keycode 32 = U+2200 # ∀ [U+2200] FOR ALL
+
+ keycode 33 = e # e [U+0065] LATIN SMALL LETTER E
+shift shiftl keycode 33 = e # e [U+0065] LATIN SMALL LETTER E
+shift shiftr keycode 33 = e # e [U+0065] LATIN SMALL LETTER E
+ shiftl keycode 33 = +E # E [U+0045] LATIN CAPITAL LETTER E
+ shiftr keycode 33 = +E # E [U+0045] LATIN CAPITAL LETTER E
+ altgr keycode 33 = braceright # } [U+007D] RIGHT CURLY BRACKET
+ ctrll keycode 33 = U+21e2 # ⇢ [U+21E2] RIGHTWARDS DASHED ARROW
+shiftl ctrll keycode 33 = U+21e2 # ⇢ [U+21E2] RIGHTWARDS DASHED ARROW
+shiftr ctrll keycode 33 = U+21e2 # ⇢ [U+21E2] RIGHTWARDS DASHED ARROW
+shiftl altgr keycode 33 = U+03b5 # ε [U+03B5] GREEK SMALL LETTER EPSILON
+shiftr altgr keycode 33 = U+03b5 # ε [U+03B5] GREEK SMALL LETTER EPSILON
+ctrll altgr keycode 33 = U+2203 # ∃ [U+2203] THERE EXISTS
+
+ keycode 34 = o # o [U+006F] LATIN SMALL LETTER O
+shift shiftl keycode 34 = o # o [U+006F] LATIN SMALL LETTER O
+shift shiftr keycode 34 = o # o [U+006F] LATIN SMALL LETTER O
+ shiftl keycode 34 = +O # O [U+004F] LATIN CAPITAL LETTER O
+ shiftr keycode 34 = +O # O [U+004F] LATIN CAPITAL LETTER O
+ altgr keycode 34 = asterisk # * [U+002A] ASTERISK
+ ctrll keycode 34 = U+21f2 # ⇲ [U+21F2] SOUTH EAST ARROW TO CORNER
+shiftl ctrll keycode 34 = U+21f2 # ⇲ [U+21F2] SOUTH EAST ARROW TO CORNER
+shiftr ctrll keycode 34 = U+21f2 # ⇲ [U+21F2] SOUTH EAST ARROW TO CORNER
+shiftl altgr keycode 34 = U+03bf # ο [U+03BF] GREEK SMALL LETTER OMICRON
+shiftr altgr keycode 34 = U+03bf # ο [U+03BF] GREEK SMALL LETTER OMICRON
+ctrll altgr keycode 34 = U+2208 # ∈ [U+2208] ELEMENT OF
+
+ keycode 35 = s # s [U+0073] LATIN SMALL LETTER S
+shift shiftl keycode 35 = s # s [U+0073] LATIN SMALL LETTER S
+shift shiftr keycode 35 = s # s [U+0073] LATIN SMALL LETTER S
+ shiftl keycode 35 = +S # S [U+0053] LATIN CAPITAL LETTER S
+ shiftr keycode 35 = +S # S [U+0053] LATIN CAPITAL LETTER S
+ altgr keycode 35 = question # ? [U+003F] QUESTION MARK
+ ctrll keycode 35 = questiondown # ¿ [U+00BF] INVERTED QUESTION MARK
+shiftl ctrll keycode 35 = questiondown # ¿ [U+00BF] INVERTED QUESTION MARK
+shiftr ctrll keycode 35 = questiondown # ¿ [U+00BF] INVERTED QUESTION MARK
+shiftl altgr keycode 35 = U+03c3 # σ [U+03C3] GREEK SMALL LETTER SIGMA
+shiftr altgr keycode 35 = U+03c3 # σ [U+03C3] GREEK SMALL LETTER SIGMA
+ctrll altgr keycode 35 = U+03a3 # Σ [U+03A3] GREEK CAPITAL LETTER SIGMA
+
+ keycode 36 = n # n [U+006E] LATIN SMALL LETTER N
+shift shiftl keycode 36 = n # n [U+006E] LATIN SMALL LETTER N
+shift shiftr keycode 36 = n # n [U+006E] LATIN SMALL LETTER N
+ shiftl keycode 36 = +N # N [U+004E] LATIN CAPITAL LETTER N
+ shiftr keycode 36 = +N # N [U+004E] LATIN CAPITAL LETTER N
+ altgr keycode 36 = parenleft # ( [U+0028] LEFT PARENTHESIS
+ ctrll keycode 36 = four # 4 [U+0034] DIGIT FOUR
+shiftl ctrll keycode 36 = four # 4 [U+0034] DIGIT FOUR
+shiftr ctrll keycode 36 = four # 4 [U+0034] DIGIT FOUR
+shiftl altgr keycode 36 = U+03bd # ν [U+03BD] GREEK SMALL LETTER NU
+shiftr altgr keycode 36 = U+03bd # ν [U+03BD] GREEK SMALL LETTER NU
+ctrll altgr keycode 36 = U+2115 # ℕ [U+2115] DOUBLE-STRUCK CAPITAL N
+
+ keycode 37 = r # r [U+0072] LATIN SMALL LETTER R
+shift shiftl keycode 37 = r # r [U+0072] LATIN SMALL LETTER R
+shift shiftr keycode 37 = r # r [U+0072] LATIN SMALL LETTER R
+ shiftl keycode 37 = +R # R [U+0052] LATIN CAPITAL LETTER R
+ shiftr keycode 37 = +R # R [U+0052] LATIN CAPITAL LETTER R
+ altgr keycode 37 = parenright # ) [U+0029] RIGHT PARENTHESIS
+ ctrll keycode 37 = five # 5 [U+0035] DIGIT FIVE
+shiftl ctrll keycode 37 = five # 5 [U+0035] DIGIT FIVE
+shiftr ctrll keycode 37 = five # 5 [U+0035] DIGIT FIVE
+shiftl altgr keycode 37 = U+03c1 # ρ [U+03C1] GREEK SMALL LETTER RHO
+shiftr altgr keycode 37 = U+03c1 # ρ [U+03C1] GREEK SMALL LETTER RHO
+ctrll altgr keycode 37 = U+211d # ℝ [U+211D] DOUBLE-STRUCK CAPITAL R
+
+ keycode 38 = t # t [U+0074] LATIN SMALL LETTER T
+shift shiftl keycode 38 = t # t [U+0074] LATIN SMALL LETTER T
+shift shiftr keycode 38 = t # t [U+0074] LATIN SMALL LETTER T
+ shiftl keycode 38 = +T # T [U+0054] LATIN CAPITAL LETTER T
+ shiftr keycode 38 = +T # T [U+0054] LATIN CAPITAL LETTER T
+ altgr keycode 38 = minus # - [U+002D] HYPHEN-MINUS
+ ctrll keycode 38 = six # 6 [U+0036] DIGIT SIX
+shiftl ctrll keycode 38 = six # 6 [U+0036] DIGIT SIX
+shiftr ctrll keycode 38 = six # 6 [U+0036] DIGIT SIX
+shiftl altgr keycode 38 = U+03c4 # τ [U+03C4] GREEK SMALL LETTER TAU
+shiftr altgr keycode 38 = U+03c4 # τ [U+03C4] GREEK SMALL LETTER TAU
+ctrll altgr keycode 38 = U+2202 # ∂ [U+2202] PARTIAL DIFFERENTIAL
+
+ keycode 39 = d # d [U+0064] LATIN SMALL LETTER D
+shift shiftl keycode 39 = d # d [U+0064] LATIN SMALL LETTER D
+shift shiftr keycode 39 = d # d [U+0064] LATIN SMALL LETTER D
+ shiftl keycode 39 = +D # D [U+0044] LATIN CAPITAL LETTER D
+ shiftr keycode 39 = +D # D [U+0044] LATIN CAPITAL LETTER D
+ altgr keycode 39 = colon # : [U+003A] COLON
+ ctrll keycode 39 = comma # , [U+002C] COMMA
+shiftl ctrll keycode 39 = comma # , [U+002C] COMMA
+shiftr ctrll keycode 39 = comma # , [U+002C] COMMA
+shiftl altgr keycode 39 = U+03b4 # δ [U+03B4] GREEK SMALL LETTER DELTA
+shiftr altgr keycode 39 = U+03b4 # δ [U+03B4] GREEK SMALL LETTER DELTA
+ctrll altgr keycode 39 = U+0394 # Δ [U+0394] GREEK CAPITAL LETTER DELTA
+
+ keycode 40 = y # y [U+0079] LATIN SMALL LETTER Y
+shift shiftl keycode 40 = y # y [U+0079] LATIN SMALL LETTER Y
+shift shiftr keycode 40 = y # y [U+0079] LATIN SMALL LETTER Y
+ shiftl keycode 40 = +Y # Y [U+0059] LATIN CAPITAL LETTER Y
+ shiftr keycode 40 = +Y # Y [U+0059] LATIN CAPITAL LETTER Y
+ altgr keycode 40 = at # @ [U+0040] COMMERCIAL AT
+ ctrll keycode 40 = period # . [U+002E] FULL STOP
+shiftl ctrll keycode 40 = period # . [U+002E] FULL STOP
+shiftr ctrll keycode 40 = period # . [U+002E] FULL STOP
+shiftl altgr keycode 40 = U+03c5 # υ [U+03C5] GREEK SMALL LETTER UPSILON
+shiftr altgr keycode 40 = U+03c5 # υ [U+03C5] GREEK SMALL LETTER UPSILON
+ctrll altgr keycode 40 = U+2207 # ∇ [U+2207] NABLA
+
+ keycode 44 = udiaeresis # ü [U+00FC] LATIN SMALL LETTER U WITH DIAERESIS
+shift shiftl keycode 44 = udiaeresis # ü [U+00FC] LATIN SMALL LETTER U WITH DIAERESIS
+shift shiftr keycode 44 = udiaeresis # ü [U+00FC] LATIN SMALL LETTER U WITH DIAERESIS
+ shiftl keycode 44 = +Udiaeresis # Ü [U+00DC] LATIN CAPITAL LETTER U WITH DIAERESIS
+ shiftr keycode 44 = +Udiaeresis # Ü [U+00DC] LATIN CAPITAL LETTER U WITH DIAERESIS
+ altgr keycode 44 = numbersign # # [U+0023] NUMBER SIGN
+ ctrll keycode 44 = U+2327 # ⌧ [U+2327] X IN A RECTANGLE BOX
+shiftl ctrll keycode 44 = U+2327 # ⌧ [U+2327] X IN A RECTANGLE BOX
+shiftr ctrll keycode 44 = U+2327 # ⌧ [U+2327] X IN A RECTANGLE BOX
+shiftl altgr keycode 44 = space # [U+0020] SPACE
+shiftr altgr keycode 44 = space # [U+0020] SPACE
+ctrll altgr keycode 44 = U+222a # ∪ [U+222A] UNION
+
+ keycode 45 = odiaeresis # ö [U+00F6] LATIN SMALL LETTER O WITH DIAERESIS
+shift shiftl keycode 45 = odiaeresis # ö [U+00F6] LATIN SMALL LETTER O WITH DIAERESIS
+shift shiftr keycode 45 = odiaeresis # ö [U+00F6] LATIN SMALL LETTER O WITH DIAERESIS
+ shiftl keycode 45 = +Odiaeresis # Ö [U+00D6] LATIN CAPITAL LETTER O WITH DIAERESIS
+ shiftr keycode 45 = +Odiaeresis # Ö [U+00D6] LATIN CAPITAL LETTER O WITH DIAERESIS
+ altgr keycode 45 = dollar # $ [U+0024] DOLLAR SIGN
+ ctrll keycode 45 = U+21e5 # ⇥ [U+21E5] RIGHTWARDS ARROW TO BAR
+shiftl ctrll keycode 45 = U+21e5 # ⇥ [U+21E5] RIGHTWARDS ARROW TO BAR
+shiftr ctrll keycode 45 = U+21e5 # ⇥ [U+21E5] RIGHTWARDS ARROW TO BAR
+shiftl altgr keycode 45 = U+03f5 # ϵ [U+03F5] GREEK LUNATE EPSILON SYMBOL
+shiftr altgr keycode 45 = U+03f5 # ϵ [U+03F5] GREEK LUNATE EPSILON SYMBOL
+ctrll altgr keycode 45 = U+2229 # ∩ [U+2229] INTERSECTION
+
+ keycode 46 = adiaeresis # ä [U+00E4] LATIN SMALL LETTER A WITH DIAERESIS
+shift shiftl keycode 46 = adiaeresis # ä [U+00E4] LATIN SMALL LETTER A WITH DIAERESIS
+shift shiftr keycode 46 = adiaeresis # ä [U+00E4] LATIN SMALL LETTER A WITH DIAERESIS
+ shiftl keycode 46 = +Adiaeresis # Ä [U+00C4] LATIN CAPITAL LETTER A WITH DIAERESIS
+ shiftr keycode 46 = +Adiaeresis # Ä [U+00C4] LATIN CAPITAL LETTER A WITH DIAERESIS
+ altgr keycode 46 = bar # | [U+007C] VERTICAL LINE
+ ctrll keycode 46 = U+2380 # ⎀ [U+2380] INSERTION SYMBOL
+shiftl ctrll keycode 46 = U+2380 # ⎀ [U+2380] INSERTION SYMBOL
+shiftr ctrll keycode 46 = U+2380 # ⎀ [U+2380] INSERTION SYMBOL
+shiftl altgr keycode 46 = U+03b7 # η [U+03B7] GREEK SMALL LETTER ETA
+shiftr altgr keycode 46 = U+03b7 # η [U+03B7] GREEK SMALL LETTER ETA
+ctrll altgr keycode 46 = U+2135 # ℵ [U+2135] ALEF SYMBOL
+
+ keycode 47 = p # p [U+0070] LATIN SMALL LETTER P
+shift shiftl keycode 47 = p # p [U+0070] LATIN SMALL LETTER P
+shift shiftr keycode 47 = p # p [U+0070] LATIN SMALL LETTER P
+ shiftl keycode 47 = +P # P [U+0050] LATIN CAPITAL LETTER P
+ shiftr keycode 47 = +P # P [U+0050] LATIN CAPITAL LETTER P
+ altgr keycode 47 = asciitilde # ~ [U+007E] TILDE
+ ctrll keycode 47 = U+21b2 # ↲ [U+21B2] DOWNWARDS ARROW WITH TIP LEFTWARDS
+shiftl ctrll keycode 47 = U+21b2 # ↲ [U+21B2] DOWNWARDS ARROW WITH TIP LEFTWARDS
+shiftr ctrll keycode 47 = U+21b2 # ↲ [U+21B2] DOWNWARDS ARROW WITH TIP LEFTWARDS
+shiftl altgr keycode 47 = U+03c0 # π [U+03C0] GREEK SMALL LETTER PI
+shiftr altgr keycode 47 = U+03c0 # π [U+03C0] GREEK SMALL LETTER PI
+ctrll altgr keycode 47 = U+03a0 # Π [U+03A0] GREEK CAPITAL LETTER PI
+
+ keycode 48 = z # z [U+007A] LATIN SMALL LETTER Z
+shift shiftl keycode 48 = z # z [U+007A] LATIN SMALL LETTER Z
+shift shiftr keycode 48 = z # z [U+007A] LATIN SMALL LETTER Z
+ shiftl keycode 48 = +Z # Z [U+005A] LATIN CAPITAL LETTER Z
+ shiftr keycode 48 = +Z # Z [U+005A] LATIN CAPITAL LETTER Z
+ altgr keycode 48 = grave # ` [U+0060] GRAVE ACCENT
+ ctrll keycode 48 = U+21b6 # ↶ [U+21B6] ANTICLOCKWISE TOP SEMICIRCLE ARROW
+shiftl ctrll keycode 48 = U+21b6 # ↶ [U+21B6] ANTICLOCKWISE TOP SEMICIRCLE ARROW
+shiftr ctrll keycode 48 = U+21b6 # ↶ [U+21B6] ANTICLOCKWISE TOP SEMICIRCLE ARROW
+shiftl altgr keycode 48 = U+03b6 # ζ [U+03B6] GREEK SMALL LETTER ZETA
+shiftr altgr keycode 48 = U+03b6 # ζ [U+03B6] GREEK SMALL LETTER ZETA
+ctrll altgr keycode 48 = U+2124 # ℤ [U+2124] DOUBLE-STRUCK CAPITAL Z
+
+ keycode 49 = b # b [U+0062] LATIN SMALL LETTER B
+shift shiftl keycode 49 = b # b [U+0062] LATIN SMALL LETTER B
+shift shiftr keycode 49 = b # b [U+0062] LATIN SMALL LETTER B
+ shiftl keycode 49 = +B # B [U+0042] LATIN CAPITAL LETTER B
+ shiftr keycode 49 = +B # B [U+0042] LATIN CAPITAL LETTER B
+ altgr keycode 49 = plus # + [U+002B] PLUS SIGN
+ ctrll keycode 49 = colon # : [U+003A] COLON
+shiftl ctrll keycode 49 = colon # : [U+003A] COLON
+shiftr ctrll keycode 49 = colon # : [U+003A] COLON
+shiftl altgr keycode 49 = U+03b2 # β [U+03B2] GREEK SMALL LETTER BETA
+shiftr altgr keycode 49 = U+03b2 # β [U+03B2] GREEK SMALL LETTER BETA
+ctrll altgr keycode 49 = U+21d0 # ⇐ [U+21D0] LEFTWARDS DOUBLE ARROW
+
+ keycode 50 = m # m [U+006D] LATIN SMALL LETTER M
+shift shiftl keycode 50 = m # m [U+006D] LATIN SMALL LETTER M
+shift shiftr keycode 50 = m # m [U+006D] LATIN SMALL LETTER M
+ shiftl keycode 50 = +M # M [U+004D] LATIN CAPITAL LETTER M
+ shiftr keycode 50 = +M # M [U+004D] LATIN CAPITAL LETTER M
+ altgr keycode 50 = percent # % [U+0025] PERCENT SIGN
+ ctrll keycode 50 = one # 1 [U+0031] DIGIT ONE
+shiftl ctrll keycode 50 = one # 1 [U+0031] DIGIT ONE
+shiftr ctrll keycode 50 = one # 1 [U+0031] DIGIT ONE
+shiftl altgr keycode 50 = U+03bc # μ [U+03BC] GREEK SMALL LETTER MU
+shiftr altgr keycode 50 = U+03bc # μ [U+03BC] GREEK SMALL LETTER MU
+ctrll altgr keycode 50 = U+21d4 # ⇔ [U+21D4] LEFT RIGHT DOUBLE ARROW
+
+ keycode 51 = comma # , [U+002C] COMMA
+ shiftl keycode 51 = U+2013 # – [U+2013] EN DASH
+ shiftr keycode 51 = U+2013 # – [U+2013] EN DASH
+ altgr keycode 51 = quotedbl # " [U+0022] QUOTATION MARK
+ ctrll keycode 51 = two # 2 [U+0032] DIGIT TWO
+shiftl ctrll keycode 51 = two # 2 [U+0032] DIGIT TWO
+shiftr ctrll keycode 51 = two # 2 [U+0032] DIGIT TWO
+shiftl altgr keycode 51 = U+03f1 # ϱ [U+03F1] GREEK RHO SYMBOL
+shiftr altgr keycode 51 = U+03f1 # ϱ [U+03F1] GREEK RHO SYMBOL
+ctrll altgr keycode 51 = U+21d2 # ⇒ [U+21D2] RIGHTWARDS DOUBLE ARROW
+
+ keycode 52 = period # . [U+002E] FULL STOP
+ shiftl keycode 52 = U+2022 # • [U+2022] BULLET
+ shiftr keycode 52 = U+2022 # • [U+2022] BULLET
+ altgr keycode 52 = apostrophe # ' [U+0027] APOSTROPHE
+ ctrll keycode 52 = three # 3 [U+0033] DIGIT THREE
+shiftl ctrll keycode 52 = three # 3 [U+0033] DIGIT THREE
+shiftr ctrll keycode 52 = three # 3 [U+0033] DIGIT THREE
+shiftl altgr keycode 52 = U+03d1 # ϑ [U+03D1] GREEK THETA SYMBOL
+shiftr altgr keycode 52 = U+03d1 # ϑ [U+03D1] GREEK THETA SYMBOL
+ctrll altgr keycode 52 = U+21a6 # ↦ [U+21A6] RIGHTWARDS ARROW FROM BAR
+
+ keycode 53 = j # j [U+006A] LATIN SMALL LETTER J
+shift shiftl keycode 53 = j # j [U+006A] LATIN SMALL LETTER J
+shift shiftr keycode 53 = j # j [U+006A] LATIN SMALL LETTER J
+ shiftl keycode 53 = +J # J [U+004A] LATIN CAPITAL LETTER J
+ shiftr keycode 53 = +J # J [U+004A] LATIN CAPITAL LETTER J
+ altgr keycode 53 = semicolon # ; [U+003B] SEMICOLON
+ ctrll keycode 53 = semicolon # ; [U+003B] SEMICOLON
+shiftl ctrll keycode 53 = semicolon # ; [U+003B] SEMICOLON
+shiftr ctrll keycode 53 = semicolon # ; [U+003B] SEMICOLON
+shiftl altgr keycode 53 = U+03b8 # θ [U+03B8] GREEK SMALL LETTER THETA
+shiftr altgr keycode 53 = U+03b8 # θ [U+03B8] GREEK SMALL LETTER THETA
+ctrll altgr keycode 53 = U+0398 # Θ [U+0398] GREEK CAPITAL LETTER THETA
+
+#==========================================================================
+# Manual character definitions
+#==========================================================================
+
+# Die Leertaste definieren wir manuell
+ keycode 57 = space # [U+0020] SPACE
+ ctrll keycode 57 = zero # 0 [U+0030] DIGIT ZERO
+shiftl ctrll keycode 57 = zero # 0 [U+0030] DIGIT ZERO
+shiftr ctrll keycode 57 = zero # 0 [U+0030] DIGIT ZERO
+shiftl altgr keycode 57 = nobreakspace #   [U+02DE] NO-BREAK SPACE
+shiftr altgr keycode 57 = nobreakspace #   [U+02DE] NO-BREAK SPACE
+ctrll altgr keycode 57 = U+202F #   [U+202F] NARROW NO-BREAK SPACE
+
+# Wrong CapsLock behaviour with ssharp, see:
+# https://bugzilla.kernel.org/show_bug.cgi?id=7063
+ plain keycode 26 = +ssharp # ß [U+00DF] LATIN SMALL LETTER SHARP S
+ shift keycode 26 = U+1e9e # ẞ [U+1E9E] LATIN CAPITAL LETTER SHARP S
+
+#==========================================================================
+# Special keys (dead keys, non-character keys, exeptions for keys above)
+#==========================================================================
+
+ plain keycode 41 = dead_circumflex #
+
+ ctrll keycode 5 = VoidSymbol #
+shiftl ctrll keycode 5 = VoidSymbol #
+shiftr ctrll keycode 5 = VoidSymbol #
+
+ altgr keycode 12 = VoidSymbol #
+
+ plain keycode 13 = dead_grave #
+ shiftl keycode 13 = dead_cedilla #
+ shiftr keycode 13 = dead_cedilla #
+ altgr keycode 13 = degree #
+ ctrll keycode 13 = dead_diaeresis #
+shiftl ctrll keycode 13 = dead_diaeresis #
+shiftr ctrll keycode 13 = dead_diaeresis #
+
+ ctrll keycode 16 = Prior #
+shiftl ctrll keycode 16 = Prior #
+shiftr ctrll keycode 16 = Prior #
+
+ ctrll keycode 17 = BackSpace #
+shiftl ctrll keycode 17 = BackSpace #
+shiftr ctrll keycode 17 = BackSpace #
+shiftl altgr keycode 17 = VoidSymbol #
+shiftr altgr keycode 17 = VoidSymbol #
+
+ ctrll keycode 18 = Up #
+shiftl ctrll keycode 18 = Up #
+shiftr ctrll keycode 18 = Up #
+
+ ctrll keycode 19 = Remove #
+shiftl ctrll keycode 19 = Remove #
+shiftr ctrll keycode 19 = Remove #
+
+ ctrll keycode 20 = Next #
+shiftl ctrll keycode 20 = Next #
+shiftr ctrll keycode 20 = Next #
+
+ plain keycode 27 = dead_acute #
+ shiftl keycode 27 = dead_tilde #
+ shiftr keycode 27 = dead_tilde #
+
+ ctrll keycode 30 = Home #
+shiftl ctrll keycode 30 = Home #
+shiftr ctrll keycode 30 = Home #
+shiftl altgr keycode 30 = VoidSymbol #
+shiftr altgr keycode 30 = VoidSymbol #
+
+ ctrll keycode 31 = Left #
+shiftl ctrll keycode 31 = Left #
+shiftr ctrll keycode 31 = Left #
+
+ ctrll keycode 32 = Down #
+shiftl ctrll keycode 32 = Down #
+shiftr ctrll keycode 32 = Down #
+
+ ctrll keycode 33 = Right #
+shiftl ctrll keycode 33 = Right #
+shiftr ctrll keycode 33 = Right #
+
+ ctrll keycode 34 = End #
+shiftl ctrll keycode 34 = End #
+shiftr ctrll keycode 34 = End #
+
+ ctrll keycode 44 = Escape #
+shiftl ctrll keycode 44 = Escape #
+shiftr ctrll keycode 44 = Escape #
+shiftl altgr keycode 44 = VoidSymbol #
+shiftr altgr keycode 44 = VoidSymbol #
+
+ ctrll keycode 45 = Tab #
+shiftl ctrll keycode 45 = Tab #
+shiftr ctrll keycode 45 = Tab #
+
+ ctrll keycode 46 = Insert #
+shiftl ctrll keycode 46 = Insert #
+shiftr ctrll keycode 46 = Insert #
+
+ ctrll keycode 47 = Return #
+shiftl ctrll keycode 47 = Return #
+shiftr ctrll keycode 47 = Return #
+
+ ctrll keycode 48 = VoidSymbol #
+shiftl ctrll keycode 48 = VoidSymbol #
+shiftr ctrll keycode 48 = VoidSymbol #
+
+#==========================================================================
+# Keypad
+#==========================================================================
+
+ keycode 69 = Tab #
+ shiftl keycode 69 = Tab #
+ shiftr keycode 69 = Tab #
+ altgr keycode 69 = equal # = [U+003D] EQUALS SIGN
+ ctrll keycode 69 = U+2260 # ≠ [U+2260] NOT EQUAL TO
+shiftl ctrll keycode 69 = U+2260 # ≠ [U+2260] NOT EQUAL TO
+shiftr ctrll keycode 69 = U+2260 # ≠ [U+2260] NOT EQUAL TO
+shiftl altgr keycode 69 = U+2248 # ≈ [U+2248] ALMOST EQUAL TO
+shiftr altgr keycode 69 = U+2248 # ≈ [U+2248] ALMOST EQUAL TO
+ctrll altgr keycode 69 = U+2261 # ≡ [U+2261] IDENTICAL TO
+
+ keycode 98 = KP_Divide # / [U+002F] SOLIDUS
+ shiftl keycode 98 = KP_Divide # / [U+002F] SOLIDUS
+ shiftr keycode 98 = KP_Divide # / [U+002F] SOLIDUS
+ altgr keycode 98 = division # ÷ [U+00F7] DIVISION SIGN
+ ctrll keycode 98 = U+2044 # ⁄ [U+2044] FRACTION SLASH
+shiftl ctrll keycode 98 = U+2044 # ⁄ [U+2044] FRACTION SLASH
+shiftr ctrll keycode 98 = U+2044 # ⁄ [U+2044] FRACTION SLASH
+shiftl altgr keycode 98 = U+2300 # ⌀ [U+2300] DIAMETER SIGN
+shiftr altgr keycode 98 = U+2300 # ⌀ [U+2300] DIAMETER SIGN
+ctrll altgr keycode 98 = U+2223 # ∣ [U+2223] DIVIDES
+
+ keycode 55 = KP_Multiply # * [U+002A] ASTERISK
+ shiftl keycode 55 = KP_Multiply # * [U+002A] ASTERISK
+ shiftr keycode 55 = KP_Multiply # * [U+002A] ASTERISK
+ altgr keycode 55 = U+22c5 # ⋅ [U+22C5] DOT OPERATOR
+ ctrll keycode 55 = multiply # × [U+00D7] MULTIPLICATION SIGN
+shiftl ctrll keycode 55 = multiply # × [U+00D7] MULTIPLICATION SIGN
+shiftr ctrll keycode 55 = multiply # × [U+00D7] MULTIPLICATION SIGN
+shiftl altgr keycode 55 = U+2299 # ⊙ [U+2299] CIRCLED DOT OPERATOR
+shiftr altgr keycode 55 = U+2299 # ⊙ [U+2299] CIRCLED DOT OPERATOR
+ctrll altgr keycode 55 = U+2297 # ⊗ [U+2297] CIRCLED TIMES
+
+ keycode 74 = KP_Subtract # - [U+002D] HYPHEN-MINUS
+ shiftl keycode 74 = KP_Subtract # - [U+002D] HYPHEN-MINUS
+ shiftr keycode 74 = KP_Subtract # - [U+002D] HYPHEN-MINUS
+ altgr keycode 74 = U+2212 # − [U+2212] MINUS SIGN
+ ctrll keycode 74 = U+2216 # ∖ [U+2216] SET MINUS
+shiftl ctrll keycode 74 = U+2216 # ∖ [U+2216] SET MINUS
+shiftr ctrll keycode 74 = U+2216 # ∖ [U+2216] SET MINUS
+shiftl altgr keycode 74 = U+2296 # ⊖ [U+2296] CIRCLED MINUS
+shiftr altgr keycode 74 = U+2296 # ⊖ [U+2296] CIRCLED MINUS
+ctrll altgr keycode 74 = U+2238 # ∸ [U+2238] DOT MINUS
+
+ keycode 71 = KP_7 # 7 [U+0037] DIGIT SEVEN
+ shiftl keycode 71 = U+2714 # ✔ [U+2714] HEAVY CHECK MARK
+ shiftr keycode 71 = U+2714 # ✔ [U+2714] HEAVY CHECK MARK
+ altgr keycode 71 = U+2195 # ↕ [U+2195] UP DOWN ARROW
+ ctrll keycode 71 = Home #
+shiftl ctrll keycode 71 = Home #
+shiftr ctrll keycode 71 = Home #
+shiftl altgr keycode 71 = U+226a # ≪ [U+226A] MUCH LESS-THAN
+shiftr altgr keycode 71 = U+226a # ≪ [U+226A] MUCH LESS-THAN
+ctrll altgr keycode 71 = U+2308 # ⌈ [U+2308] LEFT CEILING
+
+ keycode 72 = KP_8 # 8 [U+0038] DIGIT EIGHT
+ shiftl keycode 72 = U+2718 # ✘ [U+2718] HEAVY BALLOT X
+ shiftr keycode 72 = U+2718 # ✘ [U+2718] HEAVY BALLOT X
+ altgr keycode 72 = U+2191 # ↑ [U+2191] UPWARDS ARROW
+ ctrll keycode 72 = Up #
+shiftl ctrll keycode 72 = Up #
+shiftr ctrll keycode 72 = Up #
+shiftl altgr keycode 72 = U+2229 # ∩ [U+2229] INTERSECTION
+shiftr altgr keycode 72 = U+2229 # ∩ [U+2229] INTERSECTION
+ctrll altgr keycode 72 = U+22c2 # ⋂ [U+22C2] N-ARY INTERSECTION
+
+ keycode 73 = KP_9 # 9 [U+0039] DIGIT NINE
+ shiftl keycode 73 = U+2020 # † [U+2020] DAGGER
+ shiftr keycode 73 = U+2020 # † [U+2020] DAGGER
+ altgr keycode 73 = VoidSymbol #
+ ctrll keycode 73 = Prior #
+shiftl ctrll keycode 73 = Prior #
+shiftr ctrll keycode 73 = Prior #
+shiftl altgr keycode 73 = U+226b # ≫ [U+226B] MUCH GREATER-THAN
+shiftr altgr keycode 73 = U+226b # ≫ [U+226B] MUCH GREATER-THAN
+ctrll altgr keycode 73 = U+2309 # ⌉ [U+2309] RIGHT CEILING
+
+ keycode 75 = KP_4 # 4 [U+0034] DIGIT FOUR
+ shiftl keycode 75 = U+2663 # ♣ [U+2663] BLACK CLUB SUIT
+ shiftr keycode 75 = U+2663 # ♣ [U+2663] BLACK CLUB SUIT
+ altgr keycode 75 = U+2190 # ← [U+2190] LEFTWARDS ARROW
+ ctrll keycode 75 = Left #
+shiftl ctrll keycode 75 = Left #
+shiftr ctrll keycode 75 = Left #
+shiftl altgr keycode 75 = U+2282 # ⊂ [U+2282] SUBSET OF
+shiftr altgr keycode 75 = U+2282 # ⊂ [U+2282] SUBSET OF
+ctrll altgr keycode 75 = U+2286 # ⊆ [U+2286] SUBSET OF OR EQUAL TO
+
+ keycode 76 = KP_5 # 5 [U+0035] DIGIT FIVE
+ shiftl keycode 76 = U+20ac # € [U+20AC] EURO SIGN
+ shiftr keycode 76 = U+20ac # € [U+20AC] EURO SIGN
+ altgr keycode 76 = colon # : [U+003A] COLON
+ ctrll keycode 76 = VoidSymbol #
+shiftl ctrll keycode 76 = VoidSymbol #
+shiftr ctrll keycode 76 = VoidSymbol #
+shiftl altgr keycode 76 = U+22b6 # ⊶ [U+22B6] ORIGINAL OF
+shiftr altgr keycode 76 = U+22b6 # ⊶ [U+22B6] ORIGINAL OF
+ctrll altgr keycode 76 = U+22b7 # ⊷ [U+22B7] IMAGE OF
+
+ keycode 77 = KP_6 # 6 [U+0036] DIGIT SIX
+ shiftl keycode 77 = U+2023 # ‣ [U+2023] TRIANGULAR BULLET
+ shiftr keycode 77 = U+2023 # ‣ [U+2023] TRIANGULAR BULLET
+ altgr keycode 77 = U+2192 # → [U+2192] RIGHTWARDS ARROW
+ ctrll keycode 77 = Right #
+shiftl ctrll keycode 77 = Right #
+shiftr ctrll keycode 77 = Right #
+shiftl altgr keycode 77 = U+2283 # ⊃ [U+2283] SUPERSET OF
+shiftr altgr keycode 77 = U+2283 # ⊃ [U+2283] SUPERSET OF
+ctrll altgr keycode 77 = U+2287 # ⊇ [U+2287] SUPERSET OF OR EQUAL TO
+
+ keycode 78 = KP_Add # + [U+002B] PLUS SIGN
+ shiftl keycode 78 = KP_Add # + [U+002B] PLUS SIGN
+ shiftr keycode 78 = KP_Add # + [U+002B] PLUS SIGN
+ altgr keycode 78 = plusminus # ± [U+00B1] PLUS-MINUS SIGN
+ ctrll keycode 78 = U+2213 # ∓ [U+2213] MINUS-OR-PLUS SIGN
+shiftl ctrll keycode 78 = U+2213 # ∓ [U+2213] MINUS-OR-PLUS SIGN
+shiftr ctrll keycode 78 = U+2213 # ∓ [U+2213] MINUS-OR-PLUS SIGN
+shiftl altgr keycode 78 = U+2295 # ⊕ [U+2295] CIRCLED PLUS
+shiftr altgr keycode 78 = U+2295 # ⊕ [U+2295] CIRCLED PLUS
+ctrll altgr keycode 78 = U+2214 # ∔ [U+2214] DOT PLUS
+
+ keycode 79 = KP_1 # 1 [U+0031] DIGIT ONE
+ shiftl keycode 79 = U+2666 # ♦ [U+2666] BLACK DIAMOND SUIT
+ shiftr keycode 79 = U+2666 # ♦ [U+2666] BLACK DIAMOND SUIT
+ altgr keycode 79 = U+2194 # ↔ [U+2194] LEFT RIGHT ARROW
+ ctrll keycode 79 = End #
+shiftl ctrll keycode 79 = End #
+shiftr ctrll keycode 79 = End #
+shiftl altgr keycode 79 = U+2264 # ≤ [U+2264] LESS-THAN OR EQUAL TO
+shiftr altgr keycode 79 = U+2264 # ≤ [U+2264] LESS-THAN OR EQUAL TO
+ctrll altgr keycode 79 = U+230a # ⌊ [U+230A] LEFT FLOOR
+
+ keycode 80 = KP_2 # 2 [U+0032] DIGIT TWO
+ shiftl keycode 80 = U+2665 # ♥ [U+2665] BLACK HEART SUIT
+ shiftr keycode 80 = U+2665 # ♥ [U+2665] BLACK HEART SUIT
+ altgr keycode 80 = U+2193 # ↓ [U+2193] DOWNWARDS ARROW
+ ctrll keycode 80 = Down #
+shiftl ctrll keycode 80 = Down #
+shiftr ctrll keycode 80 = Down #
+shiftl altgr keycode 80 = U+222a # ∪ [U+222A] UNION
+shiftr altgr keycode 80 = U+222a # ∪ [U+222A] UNION
+ctrll altgr keycode 80 = U+22c3 # ⋃ [U+22C3] N-ARY UNION
+
+ keycode 81 = KP_3 # 3 [U+0033] DIGIT THREE
+ shiftl keycode 81 = U+2660 # ♠ [U+2660] BLACK SPADE SUIT
+ shiftr keycode 81 = U+2660 # ♠ [U+2660] BLACK SPADE SUIT
+ altgr keycode 81 = U+21cc # ⇌ [U+21CC] RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON
+ ctrll keycode 81 = Next #
+shiftl ctrll keycode 81 = Next #
+shiftr ctrll keycode 81 = Next #
+shiftl altgr keycode 81 = U+2265 # ≥ [U+2265] GREATER-THAN OR EQUAL TO
+shiftr altgr keycode 81 = U+2265 # ≥ [U+2265] GREATER-THAN OR EQUAL TO
+ctrll altgr keycode 81 = U+230b # ⌋ [U+230B] RIGHT FLOOR
+
+ keycode 82 = KP_0 # 0 [U+0030] DIGIT ZERO
+ shiftl keycode 82 = U+2423 # ␣ [U+2423] OPEN BOX
+ shiftr keycode 82 = U+2423 # ␣ [U+2423] OPEN BOX
+ altgr keycode 82 = percent # % [U+0025] PERCENT SIGN
+ ctrll keycode 82 = Insert #
+shiftl ctrll keycode 82 = Insert #
+shiftr ctrll keycode 82 = Insert #
+shiftl altgr keycode 82 = U+2030 # ‰ [U+2030] PER MILLE SIGN
+shiftr altgr keycode 82 = U+2030 # ‰ [U+2030] PER MILLE SIGN
+ctrll altgr keycode 82 = U+25a1 # □ [U+25A1] WHITE SQUARE
+
+ keycode 83 = KP_Comma # , [U+002C] COMMA
+ shiftl keycode 83 = period # . [U+002E] FULL STOP
+ shiftr keycode 83 = period # . [U+002E] FULL STOP
+ altgr keycode 83 = comma # , [U+002C] COMMA
+ ctrll keycode 83 = Remove #
+shiftl ctrll keycode 83 = Remove #
+shiftr ctrll keycode 83 = Remove #
+shiftl altgr keycode 83 = U+2032 # ′ [U+2032] PRIME
+shiftr altgr keycode 83 = U+2032 # ′ [U+2032] PRIME
+ctrll altgr keycode 83 = U+2033 # ″ [U+2033] DOUBLE PRIME
+
+ keycode 96 = KP_Enter #