x11_client 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -3,3 +3,4 @@ source "http://rubygems.org"
3
3
  gemspec
4
4
 
5
5
  gem "rspec"
6
+ gem "rake-compiler"
data/README.md CHANGED
@@ -30,6 +30,9 @@ It can be handy if you want to controll some programs running in Xvfb.
30
30
  * X11Client#mousedown(button) - down mouse buton
31
31
  * X11Client#mouseup(buton) - up mouse button
32
32
  * X11Client#mouseclick(button) - mousedown and mouseup
33
+ * X11Client#keydown(key) - press a key
34
+ * X11Client#keyup(key) - release a key
35
+ * X11Client#key(key) - press and release a key
33
36
 
34
37
  ## Mouse buttons
35
38
 
@@ -39,6 +42,29 @@ It can be handy if you want to controll some programs running in Xvfb.
39
42
  * 4 - wheel up
40
43
  * 5 - wheel down
41
44
 
45
+ ## Key names
46
+
47
+ * XK_Return
48
+ * XK_Escape
49
+ * XK_Left
50
+ * XK_Up
51
+ * XK_Page_Up
52
+ * XK_F1
53
+ * XK_Shift_L
54
+ * XK_Control_R
55
+ * XK_Meta_L
56
+ * XK_Alt_R
57
+ * XK_Super_L
58
+ * XK_Hyper_R
59
+ * XK_space
60
+ * XK_A
61
+ * XK_z
62
+ * ...
63
+
64
+ See [X11 keysym list](https://github.com/ayanko/x11_client/tree/master/lib/x11_client/keysym.rb)
65
+
66
+ Keysym list is generated from `/usr/include/X11` sources with `rake update_keysym`
67
+
42
68
  ## X11 Window attributes
43
69
 
44
70
  * id - window id
@@ -135,3 +161,4 @@ Supported events:
135
161
  ## References
136
162
 
137
163
  * [The Xlib Programming Manual](http://tronche.com/gui/x/xlib/)
164
+ * [x11_client rubydocs](http://rubydoc.info/github/ayanko/x11_client/master/file/README.md)
data/Rakefile CHANGED
@@ -2,3 +2,35 @@ require "bundler/gem_tasks"
2
2
  require 'rake/extensiontask'
3
3
 
4
4
  Rake::ExtensionTask.new('x11_client_ext')
5
+
6
+ desc "Update lib/x11_client/keysym.rb"
7
+ task :update_keysym, [:source_dir] do |task, args|
8
+ source_dir = args[:source_dir] || "/usr/include/X11"
9
+ target = "lib/x11_client/keysym.rb"
10
+
11
+ source_files = Dir[File.join(source_dir, '*sym*.h')]
12
+ abort("No keysym files found") if source_files.empty?
13
+
14
+ puts "Updating #{target} from #{source_dir} directory"
15
+
16
+ File.open(target, "w") do |target_file|
17
+
18
+ target_file << "class X11Client\n"
19
+ target_file << " KEYSYM = {\n"
20
+
21
+ source_files.each do |source_file|
22
+ puts "Processing #{source_file}"
23
+
24
+ target_file << "\n"
25
+ target_file << " # #{source_file}\n"
26
+ File.open(source_file).each_line do |line|
27
+ if line =~ /^#define[\s\t]+([\w_]+)[\s\t]+(0x[0-9a-f]+)/
28
+ target_file << " %-40s => %s,\n" % ["'#{$1}'", $2]
29
+ end
30
+ end
31
+ end
32
+
33
+ target_file << " }\n"
34
+ target_file << "end\n"
35
+ end
36
+ end
@@ -0,0 +1,15 @@
1
+ #ifndef STRING_PTR
2
+ #define STRING_PTR(v) (RSTRING(v)->ptr)
3
+ #endif
4
+
5
+ #ifndef RFLOAT_VALUE
6
+ #define RFLOAT_VALUE(v) (RFLOAT(v)->value)
7
+ #endif
8
+
9
+ #ifndef RARRAY_LEN
10
+ #define RARRAY_LEN(v) (RARRAY(v)->len)
11
+ #endif
12
+
13
+ #ifndef RARRAY_PTR
14
+ #define RARRAY_PTR(v) (RARRAY(v)->ptr)
15
+ #endif
@@ -2,6 +2,7 @@
2
2
  #define X11_CLIENT_H
3
3
 
4
4
  #include "ruby.h"
5
+ #include <ruby18_compat.h>
5
6
  #include <X11/Xlib.h>
6
7
 
7
8
  typedef struct {
@@ -2,19 +2,21 @@
2
2
  #include "x11_client_event.h"
3
3
 
4
4
  VALUE X11Client_start(VALUE self) {
5
+ X11Client *client;
6
+ VALUE event;
7
+ XEvent any_event;
8
+
5
9
  rb_need_block();
6
10
 
7
- X11Client *client;
8
11
  Data_Get_Struct(self, X11Client, client);
9
12
  client->loop = True;
10
13
 
11
14
  XSelectInput(client->display, DefaultRootWindow(client->display), SubstructureNotifyMask);
12
15
 
13
- XEvent any_event;
14
16
  while ( client->loop ) {
15
17
  XNextEvent(client->display, &any_event);
16
18
 
17
- VALUE event = X11Client_get_event(any_event);
19
+ event = X11Client_get_event(any_event);
18
20
 
19
21
  if(event && event != Qnil) {
20
22
  rb_yield(event);
@@ -33,13 +35,18 @@ VALUE X11Client_stop(VALUE self) {
33
35
  }
34
36
 
35
37
  VALUE X11Client_get_event(XEvent any_event) {
38
+ XCreateWindowEvent *create_event;
39
+ XDestroyWindowEvent *destroy_event;
40
+ XMapEvent *map_event;
41
+ XUnmapEvent *unmap_event;
42
+ XVisibilityEvent *visibility_event;
36
43
  VALUE result = Qnil;
37
44
 
38
45
  switch(any_event.type) {
39
46
 
40
47
  case CreateNotify:
41
48
  ;
42
- XCreateWindowEvent *create_event = (XCreateWindowEvent *)&any_event;
49
+ create_event = (XCreateWindowEvent *)&any_event;
43
50
 
44
51
  result = rb_hash_new();
45
52
  rb_funcall(result, rb_intern("[]="), 2, rb_str_new2("type"), rb_str_new2("CreateWindowEvent"));
@@ -54,7 +61,7 @@ VALUE X11Client_get_event(XEvent any_event) {
54
61
 
55
62
  case DestroyNotify:
56
63
  ;
57
- XDestroyWindowEvent *destroy_event = (XDestroyWindowEvent *)&any_event;
64
+ destroy_event = (XDestroyWindowEvent *)&any_event;
58
65
 
59
66
  result = rb_hash_new();
60
67
  rb_funcall(result, rb_intern("[]="), 2, rb_str_new2("type"), rb_str_new2("DestroyWindowEvent"));
@@ -63,7 +70,7 @@ VALUE X11Client_get_event(XEvent any_event) {
63
70
 
64
71
  case MapNotify:
65
72
  ;
66
- XMapEvent *map_event = (XMapEvent *)&any_event;
73
+ map_event = (XMapEvent *)&any_event;
67
74
 
68
75
  result = rb_hash_new();
69
76
  rb_funcall(result, rb_intern("[]="), 2, rb_str_new2("type"), rb_str_new2("MapEvent"));
@@ -72,7 +79,7 @@ VALUE X11Client_get_event(XEvent any_event) {
72
79
 
73
80
  case UnmapNotify:
74
81
  ;
75
- XUnmapEvent *unmap_event = (XUnmapEvent *)&any_event;
82
+ unmap_event = (XUnmapEvent *)&any_event;
76
83
 
77
84
  result = rb_hash_new();
78
85
  rb_funcall(result, rb_intern("[]="), 2, rb_str_new2("type"), rb_str_new2("UnmapEvent"));
@@ -81,7 +88,7 @@ VALUE X11Client_get_event(XEvent any_event) {
81
88
 
82
89
  case VisibilityNotify:
83
90
  ;
84
- XVisibilityEvent *visibility_event = (XVisibilityEvent *)&any_event;
91
+ visibility_event = (XVisibilityEvent *)&any_event;
85
92
 
86
93
  result = rb_hash_new();
87
94
  rb_funcall(result, rb_intern("[]="), 2, rb_str_new2("type"), rb_str_new2("VisibilityEvent"));
@@ -4,6 +4,7 @@
4
4
  #include "x11_client_display.h"
5
5
  #include "x11_client_event.h"
6
6
  #include "x11_client_mouse.h"
7
+ #include "x11_client_keyboard.h"
7
8
  #include "x11_client_window.h"
8
9
 
9
10
  void Init_x11_client_ext() {
@@ -30,4 +31,6 @@ void Init_x11_client_ext() {
30
31
  rb_define_method(cX11Client, "mousedown", X11Client_mousedown, 1);
31
32
  rb_define_method(cX11Client, "mouseup", X11Client_mouseup, 1);
32
33
  rb_define_method(cX11Client, "mouseclick", X11Client_mouseclick, 1);
34
+
35
+ rb_define_method(cX11Client, "keyaction", X11Client_keyaction, 2);
33
36
  }
@@ -0,0 +1,35 @@
1
+ #include "x11_client.h"
2
+ #include "x11_client_keyboard.h"
3
+
4
+ #include <X11/keysymdef.h>
5
+ #include <X11/extensions/XTest.h>
6
+
7
+ /*
8
+ * Perform key action action (up or down)
9
+ * @param [String] keyname a X11 keyname e.g. XK_space
10
+ * @param [Boolen] action either true (down) or false (up)
11
+ * @raise ArgumentError
12
+ */
13
+ VALUE X11Client_keyaction(VALUE self, VALUE keysym, VALUE action) {
14
+ X11Client *client;
15
+ KeyCode keycode;
16
+ Bool is_press;
17
+
18
+ Data_Get_Struct(self, X11Client, client);
19
+
20
+ Check_Type(keysym, T_FIXNUM);
21
+
22
+ //keysym = XStringToKeysym(RSTRING_PTR(keyname));
23
+ //if ( keysym == NoSymbol )
24
+ // rb_raise(rb_eArgError, "Can't convert %s to keysym", RSTRING_PTR(keyname));
25
+
26
+ keycode = XKeysymToKeycode(client->display, FIX2INT(keysym));
27
+ if (keycode == 0)
28
+ rb_raise(rb_eArgError, "Can't convert %x to keycode", FIX2INT(keysym));
29
+
30
+ is_press = action == Qtrue ? True : False;
31
+ XTestFakeKeyEvent(client->display, keycode, is_press, CurrentTime);
32
+
33
+ return self;
34
+ }
35
+
@@ -0,0 +1,3 @@
1
+ #include "ruby.h"
2
+
3
+ VALUE X11Client_keyaction(VALUE self, VALUE name, VALUE action);
@@ -12,14 +12,15 @@ VALUE X11Client_root_window_id(VALUE self) {
12
12
  }
13
13
 
14
14
  VALUE X11Client_get_window(VALUE self, VALUE window_id) {
15
+ Window window;
16
+ XWindowAttributes attributes;
17
+ XClassHint classhint;
15
18
  VALUE result = Qnil;
16
19
 
17
20
  X11Client *client;
18
21
  Data_Get_Struct(self, X11Client, client);
19
22
 
20
- Window window = NUM2LONG(window_id);
21
- XWindowAttributes attributes;
22
- XClassHint classhint;
23
+ window = NUM2LONG(window_id);
23
24
 
24
25
  XSetErrorHandler(X11Client_IgnoreBadWindowHandler);
25
26
 
@@ -50,14 +51,16 @@ VALUE X11Client_get_window(VALUE self, VALUE window_id) {
50
51
  }
51
52
 
52
53
  VALUE X11Client_get_window_name(VALUE self, VALUE window_id) {
54
+ X11Client *client;
55
+ Window window;
56
+ XTextProperty wmName;
57
+ char* window_name;
53
58
  VALUE result = Qnil;
54
59
 
55
- X11Client *client;
56
60
  Data_Get_Struct(self, X11Client, client);
57
61
 
58
- Window window = NUM2LONG(window_id);
59
- char* window_name = '\0';
60
- XTextProperty wmName;
62
+ window = NUM2LONG(window_id);
63
+ window_name = '\0';
61
64
 
62
65
  if (XFetchName(client->display, window, &window_name)) {
63
66
  result = rb_str_new2(window_name);
@@ -81,6 +84,7 @@ VALUE X11Client_window_children_ids(VALUE self, VALUE window_id) {
81
84
  Window window = NUM2LONG(window_id);
82
85
  Window dummy;
83
86
  Window *children = NULL;
87
+ VALUE children_ids;
84
88
  unsigned int i, nchildren;
85
89
 
86
90
  X11Client *client;
@@ -88,7 +92,7 @@ VALUE X11Client_window_children_ids(VALUE self, VALUE window_id) {
88
92
 
89
93
  XSetErrorHandler(X11Client_IgnoreBadWindowHandler);
90
94
 
91
- VALUE children_ids = rb_ary_new();
95
+ children_ids = rb_ary_new();
92
96
  if (XQueryTree(client->display, window, &dummy, &dummy, &children, &nchildren)) {
93
97
  for (i = 0; i < nchildren; i++) {
94
98
  Window child_id = children[i];
data/lib/x11_client.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "x11_client_ext"
2
+ require "x11_client/keysym"
2
3
 
3
4
  class X11Client
4
5
  def window_children(window_id)
@@ -29,4 +30,40 @@ class X11Client
29
30
  def root_window_descendants
30
31
  window_descendants(root_window_id)
31
32
  end
33
+
34
+ # Convert X11 key name to symbol (integer)
35
+ def key2sym(key)
36
+ KEYSYM[key] or raise ArgumentError, "Can't convert #{key} key to X11 sym"
37
+ end
38
+
39
+ # Press a key
40
+ # @param [String] name a key name
41
+ def keypdown(name)
42
+ keyaction(key2sym(name), true)
43
+ end
44
+
45
+ # Release a key
46
+ # @param [String] name a key name
47
+ def keyup(name)
48
+ keyaction(key2sym(name), false)
49
+ end
50
+
51
+ # Press and release a key
52
+ # @param [String] name a key name
53
+ # @param [Float] time sleep time in seconds between actions
54
+ def key(name, time = 0.01)
55
+ keypdown(name)
56
+ sleep(time)
57
+ keyup(name)
58
+ self
59
+ end
60
+
61
+ # Type a word
62
+ # @param [SString] word a string of ASCII characters without spaces etc...
63
+ def type_word(word)
64
+ word.each_char do |char|
65
+ key("XK_#{char}")
66
+ end
67
+ self
68
+ end
32
69
  end
@@ -0,0 +1,2428 @@
1
+ class X11Client
2
+ KEYSYM = {
3
+
4
+ # /usr/include/X11/DECkeysym.h
5
+ 'DXK_ring_accent' => 0x1000,
6
+ 'DXK_circumflex_accent' => 0x1000,
7
+ 'DXK_cedilla_accent' => 0x1000,
8
+ 'DXK_acute_accent' => 0x1000,
9
+ 'DXK_grave_accent' => 0x1000,
10
+ 'DXK_tilde' => 0x1000,
11
+ 'DXK_diaeresis' => 0x1000,
12
+ 'DXK_Remove' => 0x1000,
13
+
14
+ # /usr/include/X11/Sunkeysym.h
15
+ 'SunXK_FA_Grave' => 0x1005,
16
+ 'SunXK_FA_Circum' => 0x1005,
17
+ 'SunXK_FA_Tilde' => 0x1005,
18
+ 'SunXK_FA_Acute' => 0x1005,
19
+ 'SunXK_FA_Diaeresis' => 0x1005,
20
+ 'SunXK_FA_Cedilla' => 0x1005,
21
+ 'SunXK_F36' => 0x1005,
22
+ 'SunXK_F37' => 0x1005,
23
+ 'SunXK_Sys_Req' => 0x1005,
24
+ 'SunXK_Print_Screen' => 0x0000,
25
+ 'SunXK_Compose' => 0x0000,
26
+ 'SunXK_AltGraph' => 0x0000,
27
+ 'SunXK_PageUp' => 0x0000,
28
+ 'SunXK_PageDown' => 0x0000,
29
+ 'SunXK_Undo' => 0x0000,
30
+ 'SunXK_Again' => 0x0000,
31
+ 'SunXK_Find' => 0x0000,
32
+ 'SunXK_Stop' => 0x0000,
33
+ 'SunXK_Props' => 0x1005,
34
+ 'SunXK_Front' => 0x1005,
35
+ 'SunXK_Copy' => 0x1005,
36
+ 'SunXK_Open' => 0x1005,
37
+ 'SunXK_Paste' => 0x1005,
38
+ 'SunXK_Cut' => 0x1005,
39
+ 'SunXK_PowerSwitch' => 0x1005,
40
+ 'SunXK_AudioLowerVolume' => 0x1005,
41
+ 'SunXK_AudioMute' => 0x1005,
42
+ 'SunXK_AudioRaiseVolume' => 0x1005,
43
+ 'SunXK_VideoDegauss' => 0x1005,
44
+ 'SunXK_VideoLowerBrightness' => 0x1005,
45
+ 'SunXK_VideoRaiseBrightness' => 0x1005,
46
+ 'SunXK_PowerSwitchShift' => 0x1005,
47
+
48
+ # /usr/include/X11/ap_keysym.h
49
+ 'apXK_LineDel' => 0x1000,
50
+ 'apXK_CharDel' => 0x1000,
51
+ 'apXK_Copy' => 0x1000,
52
+ 'apXK_Cut' => 0x1000,
53
+ 'apXK_Paste' => 0x1000,
54
+ 'apXK_Move' => 0x1000,
55
+ 'apXK_Grow' => 0x1000,
56
+ 'apXK_Cmd' => 0x1000,
57
+ 'apXK_Shell' => 0x1000,
58
+ 'apXK_LeftBar' => 0x1000,
59
+ 'apXK_RightBar' => 0x1000,
60
+ 'apXK_LeftBox' => 0x1000,
61
+ 'apXK_RightBox' => 0x1000,
62
+ 'apXK_UpBox' => 0x1000,
63
+ 'apXK_DownBox' => 0x1000,
64
+ 'apXK_Pop' => 0x1000,
65
+ 'apXK_Read' => 0x1000,
66
+ 'apXK_Edit' => 0x1000,
67
+ 'apXK_Save' => 0x1000,
68
+ 'apXK_Exit' => 0x1000,
69
+ 'apXK_Repeat' => 0x1000,
70
+ 'apXK_KP_parenleft' => 0x1000,
71
+ 'apXK_KP_parenright' => 0x1000,
72
+
73
+ # /usr/include/X11/keysymdef.h
74
+ 'XK_VoidSymbol' => 0xffffff,
75
+ 'XK_BackSpace' => 0xff08,
76
+ 'XK_Tab' => 0xff09,
77
+ 'XK_Linefeed' => 0xff0a,
78
+ 'XK_Clear' => 0xff0b,
79
+ 'XK_Return' => 0xff0d,
80
+ 'XK_Pause' => 0xff13,
81
+ 'XK_Scroll_Lock' => 0xff14,
82
+ 'XK_Sys_Req' => 0xff15,
83
+ 'XK_Escape' => 0xff1b,
84
+ 'XK_Delete' => 0xffff,
85
+ 'XK_Multi_key' => 0xff20,
86
+ 'XK_Codeinput' => 0xff37,
87
+ 'XK_SingleCandidate' => 0xff3c,
88
+ 'XK_MultipleCandidate' => 0xff3d,
89
+ 'XK_PreviousCandidate' => 0xff3e,
90
+ 'XK_Kanji' => 0xff21,
91
+ 'XK_Muhenkan' => 0xff22,
92
+ 'XK_Henkan_Mode' => 0xff23,
93
+ 'XK_Henkan' => 0xff23,
94
+ 'XK_Romaji' => 0xff24,
95
+ 'XK_Hiragana' => 0xff25,
96
+ 'XK_Katakana' => 0xff26,
97
+ 'XK_Hiragana_Katakana' => 0xff27,
98
+ 'XK_Zenkaku' => 0xff28,
99
+ 'XK_Hankaku' => 0xff29,
100
+ 'XK_Zenkaku_Hankaku' => 0xff2a,
101
+ 'XK_Touroku' => 0xff2b,
102
+ 'XK_Massyo' => 0xff2c,
103
+ 'XK_Kana_Lock' => 0xff2d,
104
+ 'XK_Kana_Shift' => 0xff2e,
105
+ 'XK_Eisu_Shift' => 0xff2f,
106
+ 'XK_Eisu_toggle' => 0xff30,
107
+ 'XK_Kanji_Bangou' => 0xff37,
108
+ 'XK_Zen_Koho' => 0xff3d,
109
+ 'XK_Mae_Koho' => 0xff3e,
110
+ 'XK_Home' => 0xff50,
111
+ 'XK_Left' => 0xff51,
112
+ 'XK_Up' => 0xff52,
113
+ 'XK_Right' => 0xff53,
114
+ 'XK_Down' => 0xff54,
115
+ 'XK_Prior' => 0xff55,
116
+ 'XK_Page_Up' => 0xff55,
117
+ 'XK_Next' => 0xff56,
118
+ 'XK_Page_Down' => 0xff56,
119
+ 'XK_End' => 0xff57,
120
+ 'XK_Begin' => 0xff58,
121
+ 'XK_Select' => 0xff60,
122
+ 'XK_Print' => 0xff61,
123
+ 'XK_Execute' => 0xff62,
124
+ 'XK_Insert' => 0xff63,
125
+ 'XK_Undo' => 0xff65,
126
+ 'XK_Redo' => 0xff66,
127
+ 'XK_Menu' => 0xff67,
128
+ 'XK_Find' => 0xff68,
129
+ 'XK_Cancel' => 0xff69,
130
+ 'XK_Help' => 0xff6a,
131
+ 'XK_Break' => 0xff6b,
132
+ 'XK_Mode_switch' => 0xff7e,
133
+ 'XK_script_switch' => 0xff7e,
134
+ 'XK_Num_Lock' => 0xff7f,
135
+ 'XK_KP_Space' => 0xff80,
136
+ 'XK_KP_Tab' => 0xff89,
137
+ 'XK_KP_Enter' => 0xff8d,
138
+ 'XK_KP_F1' => 0xff91,
139
+ 'XK_KP_F2' => 0xff92,
140
+ 'XK_KP_F3' => 0xff93,
141
+ 'XK_KP_F4' => 0xff94,
142
+ 'XK_KP_Home' => 0xff95,
143
+ 'XK_KP_Left' => 0xff96,
144
+ 'XK_KP_Up' => 0xff97,
145
+ 'XK_KP_Right' => 0xff98,
146
+ 'XK_KP_Down' => 0xff99,
147
+ 'XK_KP_Prior' => 0xff9a,
148
+ 'XK_KP_Page_Up' => 0xff9a,
149
+ 'XK_KP_Next' => 0xff9b,
150
+ 'XK_KP_Page_Down' => 0xff9b,
151
+ 'XK_KP_End' => 0xff9c,
152
+ 'XK_KP_Begin' => 0xff9d,
153
+ 'XK_KP_Insert' => 0xff9e,
154
+ 'XK_KP_Delete' => 0xff9f,
155
+ 'XK_KP_Equal' => 0xffbd,
156
+ 'XK_KP_Multiply' => 0xffaa,
157
+ 'XK_KP_Add' => 0xffab,
158
+ 'XK_KP_Separator' => 0xffac,
159
+ 'XK_KP_Subtract' => 0xffad,
160
+ 'XK_KP_Decimal' => 0xffae,
161
+ 'XK_KP_Divide' => 0xffaf,
162
+ 'XK_KP_0' => 0xffb0,
163
+ 'XK_KP_1' => 0xffb1,
164
+ 'XK_KP_2' => 0xffb2,
165
+ 'XK_KP_3' => 0xffb3,
166
+ 'XK_KP_4' => 0xffb4,
167
+ 'XK_KP_5' => 0xffb5,
168
+ 'XK_KP_6' => 0xffb6,
169
+ 'XK_KP_7' => 0xffb7,
170
+ 'XK_KP_8' => 0xffb8,
171
+ 'XK_KP_9' => 0xffb9,
172
+ 'XK_F1' => 0xffbe,
173
+ 'XK_F2' => 0xffbf,
174
+ 'XK_F3' => 0xffc0,
175
+ 'XK_F4' => 0xffc1,
176
+ 'XK_F5' => 0xffc2,
177
+ 'XK_F6' => 0xffc3,
178
+ 'XK_F7' => 0xffc4,
179
+ 'XK_F8' => 0xffc5,
180
+ 'XK_F9' => 0xffc6,
181
+ 'XK_F10' => 0xffc7,
182
+ 'XK_F11' => 0xffc8,
183
+ 'XK_L1' => 0xffc8,
184
+ 'XK_F12' => 0xffc9,
185
+ 'XK_L2' => 0xffc9,
186
+ 'XK_F13' => 0xffca,
187
+ 'XK_L3' => 0xffca,
188
+ 'XK_F14' => 0xffcb,
189
+ 'XK_L4' => 0xffcb,
190
+ 'XK_F15' => 0xffcc,
191
+ 'XK_L5' => 0xffcc,
192
+ 'XK_F16' => 0xffcd,
193
+ 'XK_L6' => 0xffcd,
194
+ 'XK_F17' => 0xffce,
195
+ 'XK_L7' => 0xffce,
196
+ 'XK_F18' => 0xffcf,
197
+ 'XK_L8' => 0xffcf,
198
+ 'XK_F19' => 0xffd0,
199
+ 'XK_L9' => 0xffd0,
200
+ 'XK_F20' => 0xffd1,
201
+ 'XK_L10' => 0xffd1,
202
+ 'XK_F21' => 0xffd2,
203
+ 'XK_R1' => 0xffd2,
204
+ 'XK_F22' => 0xffd3,
205
+ 'XK_R2' => 0xffd3,
206
+ 'XK_F23' => 0xffd4,
207
+ 'XK_R3' => 0xffd4,
208
+ 'XK_F24' => 0xffd5,
209
+ 'XK_R4' => 0xffd5,
210
+ 'XK_F25' => 0xffd6,
211
+ 'XK_R5' => 0xffd6,
212
+ 'XK_F26' => 0xffd7,
213
+ 'XK_R6' => 0xffd7,
214
+ 'XK_F27' => 0xffd8,
215
+ 'XK_R7' => 0xffd8,
216
+ 'XK_F28' => 0xffd9,
217
+ 'XK_R8' => 0xffd9,
218
+ 'XK_F29' => 0xffda,
219
+ 'XK_R9' => 0xffda,
220
+ 'XK_F30' => 0xffdb,
221
+ 'XK_R10' => 0xffdb,
222
+ 'XK_F31' => 0xffdc,
223
+ 'XK_R11' => 0xffdc,
224
+ 'XK_F32' => 0xffdd,
225
+ 'XK_R12' => 0xffdd,
226
+ 'XK_F33' => 0xffde,
227
+ 'XK_R13' => 0xffde,
228
+ 'XK_F34' => 0xffdf,
229
+ 'XK_R14' => 0xffdf,
230
+ 'XK_F35' => 0xffe0,
231
+ 'XK_R15' => 0xffe0,
232
+ 'XK_Shift_L' => 0xffe1,
233
+ 'XK_Shift_R' => 0xffe2,
234
+ 'XK_Control_L' => 0xffe3,
235
+ 'XK_Control_R' => 0xffe4,
236
+ 'XK_Caps_Lock' => 0xffe5,
237
+ 'XK_Shift_Lock' => 0xffe6,
238
+ 'XK_Meta_L' => 0xffe7,
239
+ 'XK_Meta_R' => 0xffe8,
240
+ 'XK_Alt_L' => 0xffe9,
241
+ 'XK_Alt_R' => 0xffea,
242
+ 'XK_Super_L' => 0xffeb,
243
+ 'XK_Super_R' => 0xffec,
244
+ 'XK_Hyper_L' => 0xffed,
245
+ 'XK_Hyper_R' => 0xffee,
246
+ 'XK_ISO_Lock' => 0xfe01,
247
+ 'XK_ISO_Level2_Latch' => 0xfe02,
248
+ 'XK_ISO_Level3_Shift' => 0xfe03,
249
+ 'XK_ISO_Level3_Latch' => 0xfe04,
250
+ 'XK_ISO_Level3_Lock' => 0xfe05,
251
+ 'XK_ISO_Level5_Shift' => 0xfe11,
252
+ 'XK_ISO_Level5_Latch' => 0xfe12,
253
+ 'XK_ISO_Level5_Lock' => 0xfe13,
254
+ 'XK_ISO_Group_Shift' => 0xff7e,
255
+ 'XK_ISO_Group_Latch' => 0xfe06,
256
+ 'XK_ISO_Group_Lock' => 0xfe07,
257
+ 'XK_ISO_Next_Group' => 0xfe08,
258
+ 'XK_ISO_Next_Group_Lock' => 0xfe09,
259
+ 'XK_ISO_Prev_Group' => 0xfe0a,
260
+ 'XK_ISO_Prev_Group_Lock' => 0xfe0b,
261
+ 'XK_ISO_First_Group' => 0xfe0c,
262
+ 'XK_ISO_First_Group_Lock' => 0xfe0d,
263
+ 'XK_ISO_Last_Group' => 0xfe0e,
264
+ 'XK_ISO_Last_Group_Lock' => 0xfe0f,
265
+ 'XK_ISO_Left_Tab' => 0xfe20,
266
+ 'XK_ISO_Move_Line_Up' => 0xfe21,
267
+ 'XK_ISO_Move_Line_Down' => 0xfe22,
268
+ 'XK_ISO_Partial_Line_Up' => 0xfe23,
269
+ 'XK_ISO_Partial_Line_Down' => 0xfe24,
270
+ 'XK_ISO_Partial_Space_Left' => 0xfe25,
271
+ 'XK_ISO_Partial_Space_Right' => 0xfe26,
272
+ 'XK_ISO_Set_Margin_Left' => 0xfe27,
273
+ 'XK_ISO_Set_Margin_Right' => 0xfe28,
274
+ 'XK_ISO_Release_Margin_Left' => 0xfe29,
275
+ 'XK_ISO_Release_Margin_Right' => 0xfe2a,
276
+ 'XK_ISO_Release_Both_Margins' => 0xfe2b,
277
+ 'XK_ISO_Fast_Cursor_Left' => 0xfe2c,
278
+ 'XK_ISO_Fast_Cursor_Right' => 0xfe2d,
279
+ 'XK_ISO_Fast_Cursor_Up' => 0xfe2e,
280
+ 'XK_ISO_Fast_Cursor_Down' => 0xfe2f,
281
+ 'XK_ISO_Continuous_Underline' => 0xfe30,
282
+ 'XK_ISO_Discontinuous_Underline' => 0xfe31,
283
+ 'XK_ISO_Emphasize' => 0xfe32,
284
+ 'XK_ISO_Center_Object' => 0xfe33,
285
+ 'XK_ISO_Enter' => 0xfe34,
286
+ 'XK_dead_grave' => 0xfe50,
287
+ 'XK_dead_acute' => 0xfe51,
288
+ 'XK_dead_circumflex' => 0xfe52,
289
+ 'XK_dead_tilde' => 0xfe53,
290
+ 'XK_dead_perispomeni' => 0xfe53,
291
+ 'XK_dead_macron' => 0xfe54,
292
+ 'XK_dead_breve' => 0xfe55,
293
+ 'XK_dead_abovedot' => 0xfe56,
294
+ 'XK_dead_diaeresis' => 0xfe57,
295
+ 'XK_dead_abovering' => 0xfe58,
296
+ 'XK_dead_doubleacute' => 0xfe59,
297
+ 'XK_dead_caron' => 0xfe5a,
298
+ 'XK_dead_cedilla' => 0xfe5b,
299
+ 'XK_dead_ogonek' => 0xfe5c,
300
+ 'XK_dead_iota' => 0xfe5d,
301
+ 'XK_dead_voiced_sound' => 0xfe5e,
302
+ 'XK_dead_semivoiced_sound' => 0xfe5f,
303
+ 'XK_dead_belowdot' => 0xfe60,
304
+ 'XK_dead_hook' => 0xfe61,
305
+ 'XK_dead_horn' => 0xfe62,
306
+ 'XK_dead_stroke' => 0xfe63,
307
+ 'XK_dead_abovecomma' => 0xfe64,
308
+ 'XK_dead_psili' => 0xfe64,
309
+ 'XK_dead_abovereversedcomma' => 0xfe65,
310
+ 'XK_dead_dasia' => 0xfe65,
311
+ 'XK_dead_doublegrave' => 0xfe66,
312
+ 'XK_dead_belowring' => 0xfe67,
313
+ 'XK_dead_belowmacron' => 0xfe68,
314
+ 'XK_dead_belowcircumflex' => 0xfe69,
315
+ 'XK_dead_belowtilde' => 0xfe6a,
316
+ 'XK_dead_belowbreve' => 0xfe6b,
317
+ 'XK_dead_belowdiaeresis' => 0xfe6c,
318
+ 'XK_dead_invertedbreve' => 0xfe6d,
319
+ 'XK_dead_belowcomma' => 0xfe6e,
320
+ 'XK_dead_currency' => 0xfe6f,
321
+ 'XK_dead_a' => 0xfe80,
322
+ 'XK_dead_A' => 0xfe81,
323
+ 'XK_dead_e' => 0xfe82,
324
+ 'XK_dead_E' => 0xfe83,
325
+ 'XK_dead_i' => 0xfe84,
326
+ 'XK_dead_I' => 0xfe85,
327
+ 'XK_dead_o' => 0xfe86,
328
+ 'XK_dead_O' => 0xfe87,
329
+ 'XK_dead_u' => 0xfe88,
330
+ 'XK_dead_U' => 0xfe89,
331
+ 'XK_dead_small_schwa' => 0xfe8a,
332
+ 'XK_dead_capital_schwa' => 0xfe8b,
333
+ 'XK_First_Virtual_Screen' => 0xfed0,
334
+ 'XK_Prev_Virtual_Screen' => 0xfed1,
335
+ 'XK_Next_Virtual_Screen' => 0xfed2,
336
+ 'XK_Last_Virtual_Screen' => 0xfed4,
337
+ 'XK_Terminate_Server' => 0xfed5,
338
+ 'XK_AccessX_Enable' => 0xfe70,
339
+ 'XK_AccessX_Feedback_Enable' => 0xfe71,
340
+ 'XK_RepeatKeys_Enable' => 0xfe72,
341
+ 'XK_SlowKeys_Enable' => 0xfe73,
342
+ 'XK_BounceKeys_Enable' => 0xfe74,
343
+ 'XK_StickyKeys_Enable' => 0xfe75,
344
+ 'XK_MouseKeys_Enable' => 0xfe76,
345
+ 'XK_MouseKeys_Accel_Enable' => 0xfe77,
346
+ 'XK_Overlay1_Enable' => 0xfe78,
347
+ 'XK_Overlay2_Enable' => 0xfe79,
348
+ 'XK_AudibleBell_Enable' => 0xfe7a,
349
+ 'XK_Pointer_Left' => 0xfee0,
350
+ 'XK_Pointer_Right' => 0xfee1,
351
+ 'XK_Pointer_Up' => 0xfee2,
352
+ 'XK_Pointer_Down' => 0xfee3,
353
+ 'XK_Pointer_UpLeft' => 0xfee4,
354
+ 'XK_Pointer_UpRight' => 0xfee5,
355
+ 'XK_Pointer_DownLeft' => 0xfee6,
356
+ 'XK_Pointer_DownRight' => 0xfee7,
357
+ 'XK_Pointer_Button_Dflt' => 0xfee8,
358
+ 'XK_Pointer_Button1' => 0xfee9,
359
+ 'XK_Pointer_Button2' => 0xfeea,
360
+ 'XK_Pointer_Button3' => 0xfeeb,
361
+ 'XK_Pointer_Button4' => 0xfeec,
362
+ 'XK_Pointer_Button5' => 0xfeed,
363
+ 'XK_Pointer_DblClick_Dflt' => 0xfeee,
364
+ 'XK_Pointer_DblClick1' => 0xfeef,
365
+ 'XK_Pointer_DblClick2' => 0xfef0,
366
+ 'XK_Pointer_DblClick3' => 0xfef1,
367
+ 'XK_Pointer_DblClick4' => 0xfef2,
368
+ 'XK_Pointer_DblClick5' => 0xfef3,
369
+ 'XK_Pointer_Drag_Dflt' => 0xfef4,
370
+ 'XK_Pointer_Drag1' => 0xfef5,
371
+ 'XK_Pointer_Drag2' => 0xfef6,
372
+ 'XK_Pointer_Drag3' => 0xfef7,
373
+ 'XK_Pointer_Drag4' => 0xfef8,
374
+ 'XK_Pointer_Drag5' => 0xfefd,
375
+ 'XK_Pointer_EnableKeys' => 0xfef9,
376
+ 'XK_Pointer_Accelerate' => 0xfefa,
377
+ 'XK_Pointer_DfltBtnNext' => 0xfefb,
378
+ 'XK_Pointer_DfltBtnPrev' => 0xfefc,
379
+ 'XK_3270_Duplicate' => 0xfd01,
380
+ 'XK_3270_FieldMark' => 0xfd02,
381
+ 'XK_3270_Right2' => 0xfd03,
382
+ 'XK_3270_Left2' => 0xfd04,
383
+ 'XK_3270_BackTab' => 0xfd05,
384
+ 'XK_3270_EraseEOF' => 0xfd06,
385
+ 'XK_3270_EraseInput' => 0xfd07,
386
+ 'XK_3270_Reset' => 0xfd08,
387
+ 'XK_3270_Quit' => 0xfd09,
388
+ 'XK_3270_PA1' => 0xfd0a,
389
+ 'XK_3270_PA2' => 0xfd0b,
390
+ 'XK_3270_PA3' => 0xfd0c,
391
+ 'XK_3270_Test' => 0xfd0d,
392
+ 'XK_3270_Attn' => 0xfd0e,
393
+ 'XK_3270_CursorBlink' => 0xfd0f,
394
+ 'XK_3270_AltCursor' => 0xfd10,
395
+ 'XK_3270_KeyClick' => 0xfd11,
396
+ 'XK_3270_Jump' => 0xfd12,
397
+ 'XK_3270_Ident' => 0xfd13,
398
+ 'XK_3270_Rule' => 0xfd14,
399
+ 'XK_3270_Copy' => 0xfd15,
400
+ 'XK_3270_Play' => 0xfd16,
401
+ 'XK_3270_Setup' => 0xfd17,
402
+ 'XK_3270_Record' => 0xfd18,
403
+ 'XK_3270_ChangeScreen' => 0xfd19,
404
+ 'XK_3270_DeleteWord' => 0xfd1a,
405
+ 'XK_3270_ExSelect' => 0xfd1b,
406
+ 'XK_3270_CursorSelect' => 0xfd1c,
407
+ 'XK_3270_PrintScreen' => 0xfd1d,
408
+ 'XK_3270_Enter' => 0xfd1e,
409
+ 'XK_space' => 0x0020,
410
+ 'XK_exclam' => 0x0021,
411
+ 'XK_quotedbl' => 0x0022,
412
+ 'XK_numbersign' => 0x0023,
413
+ 'XK_dollar' => 0x0024,
414
+ 'XK_percent' => 0x0025,
415
+ 'XK_ampersand' => 0x0026,
416
+ 'XK_apostrophe' => 0x0027,
417
+ 'XK_quoteright' => 0x0027,
418
+ 'XK_parenleft' => 0x0028,
419
+ 'XK_parenright' => 0x0029,
420
+ 'XK_asterisk' => 0x002a,
421
+ 'XK_plus' => 0x002b,
422
+ 'XK_comma' => 0x002c,
423
+ 'XK_minus' => 0x002d,
424
+ 'XK_period' => 0x002e,
425
+ 'XK_slash' => 0x002f,
426
+ 'XK_0' => 0x0030,
427
+ 'XK_1' => 0x0031,
428
+ 'XK_2' => 0x0032,
429
+ 'XK_3' => 0x0033,
430
+ 'XK_4' => 0x0034,
431
+ 'XK_5' => 0x0035,
432
+ 'XK_6' => 0x0036,
433
+ 'XK_7' => 0x0037,
434
+ 'XK_8' => 0x0038,
435
+ 'XK_9' => 0x0039,
436
+ 'XK_colon' => 0x003a,
437
+ 'XK_semicolon' => 0x003b,
438
+ 'XK_less' => 0x003c,
439
+ 'XK_equal' => 0x003d,
440
+ 'XK_greater' => 0x003e,
441
+ 'XK_question' => 0x003f,
442
+ 'XK_at' => 0x0040,
443
+ 'XK_A' => 0x0041,
444
+ 'XK_B' => 0x0042,
445
+ 'XK_C' => 0x0043,
446
+ 'XK_D' => 0x0044,
447
+ 'XK_E' => 0x0045,
448
+ 'XK_F' => 0x0046,
449
+ 'XK_G' => 0x0047,
450
+ 'XK_H' => 0x0048,
451
+ 'XK_I' => 0x0049,
452
+ 'XK_J' => 0x004a,
453
+ 'XK_K' => 0x004b,
454
+ 'XK_L' => 0x004c,
455
+ 'XK_M' => 0x004d,
456
+ 'XK_N' => 0x004e,
457
+ 'XK_O' => 0x004f,
458
+ 'XK_P' => 0x0050,
459
+ 'XK_Q' => 0x0051,
460
+ 'XK_R' => 0x0052,
461
+ 'XK_S' => 0x0053,
462
+ 'XK_T' => 0x0054,
463
+ 'XK_U' => 0x0055,
464
+ 'XK_V' => 0x0056,
465
+ 'XK_W' => 0x0057,
466
+ 'XK_X' => 0x0058,
467
+ 'XK_Y' => 0x0059,
468
+ 'XK_Z' => 0x005a,
469
+ 'XK_bracketleft' => 0x005b,
470
+ 'XK_backslash' => 0x005c,
471
+ 'XK_bracketright' => 0x005d,
472
+ 'XK_asciicircum' => 0x005e,
473
+ 'XK_underscore' => 0x005f,
474
+ 'XK_grave' => 0x0060,
475
+ 'XK_quoteleft' => 0x0060,
476
+ 'XK_a' => 0x0061,
477
+ 'XK_b' => 0x0062,
478
+ 'XK_c' => 0x0063,
479
+ 'XK_d' => 0x0064,
480
+ 'XK_e' => 0x0065,
481
+ 'XK_f' => 0x0066,
482
+ 'XK_g' => 0x0067,
483
+ 'XK_h' => 0x0068,
484
+ 'XK_i' => 0x0069,
485
+ 'XK_j' => 0x006a,
486
+ 'XK_k' => 0x006b,
487
+ 'XK_l' => 0x006c,
488
+ 'XK_m' => 0x006d,
489
+ 'XK_n' => 0x006e,
490
+ 'XK_o' => 0x006f,
491
+ 'XK_p' => 0x0070,
492
+ 'XK_q' => 0x0071,
493
+ 'XK_r' => 0x0072,
494
+ 'XK_s' => 0x0073,
495
+ 'XK_t' => 0x0074,
496
+ 'XK_u' => 0x0075,
497
+ 'XK_v' => 0x0076,
498
+ 'XK_w' => 0x0077,
499
+ 'XK_x' => 0x0078,
500
+ 'XK_y' => 0x0079,
501
+ 'XK_z' => 0x007a,
502
+ 'XK_braceleft' => 0x007b,
503
+ 'XK_bar' => 0x007c,
504
+ 'XK_braceright' => 0x007d,
505
+ 'XK_asciitilde' => 0x007e,
506
+ 'XK_nobreakspace' => 0x00a0,
507
+ 'XK_exclamdown' => 0x00a1,
508
+ 'XK_cent' => 0x00a2,
509
+ 'XK_sterling' => 0x00a3,
510
+ 'XK_currency' => 0x00a4,
511
+ 'XK_yen' => 0x00a5,
512
+ 'XK_brokenbar' => 0x00a6,
513
+ 'XK_section' => 0x00a7,
514
+ 'XK_diaeresis' => 0x00a8,
515
+ 'XK_copyright' => 0x00a9,
516
+ 'XK_ordfeminine' => 0x00aa,
517
+ 'XK_guillemotleft' => 0x00ab,
518
+ 'XK_notsign' => 0x00ac,
519
+ 'XK_hyphen' => 0x00ad,
520
+ 'XK_registered' => 0x00ae,
521
+ 'XK_macron' => 0x00af,
522
+ 'XK_degree' => 0x00b0,
523
+ 'XK_plusminus' => 0x00b1,
524
+ 'XK_twosuperior' => 0x00b2,
525
+ 'XK_threesuperior' => 0x00b3,
526
+ 'XK_acute' => 0x00b4,
527
+ 'XK_mu' => 0x00b5,
528
+ 'XK_paragraph' => 0x00b6,
529
+ 'XK_periodcentered' => 0x00b7,
530
+ 'XK_cedilla' => 0x00b8,
531
+ 'XK_onesuperior' => 0x00b9,
532
+ 'XK_masculine' => 0x00ba,
533
+ 'XK_guillemotright' => 0x00bb,
534
+ 'XK_onequarter' => 0x00bc,
535
+ 'XK_onehalf' => 0x00bd,
536
+ 'XK_threequarters' => 0x00be,
537
+ 'XK_questiondown' => 0x00bf,
538
+ 'XK_Agrave' => 0x00c0,
539
+ 'XK_Aacute' => 0x00c1,
540
+ 'XK_Acircumflex' => 0x00c2,
541
+ 'XK_Atilde' => 0x00c3,
542
+ 'XK_Adiaeresis' => 0x00c4,
543
+ 'XK_Aring' => 0x00c5,
544
+ 'XK_AE' => 0x00c6,
545
+ 'XK_Ccedilla' => 0x00c7,
546
+ 'XK_Egrave' => 0x00c8,
547
+ 'XK_Eacute' => 0x00c9,
548
+ 'XK_Ecircumflex' => 0x00ca,
549
+ 'XK_Ediaeresis' => 0x00cb,
550
+ 'XK_Igrave' => 0x00cc,
551
+ 'XK_Iacute' => 0x00cd,
552
+ 'XK_Icircumflex' => 0x00ce,
553
+ 'XK_Idiaeresis' => 0x00cf,
554
+ 'XK_ETH' => 0x00d0,
555
+ 'XK_Eth' => 0x00d0,
556
+ 'XK_Ntilde' => 0x00d1,
557
+ 'XK_Ograve' => 0x00d2,
558
+ 'XK_Oacute' => 0x00d3,
559
+ 'XK_Ocircumflex' => 0x00d4,
560
+ 'XK_Otilde' => 0x00d5,
561
+ 'XK_Odiaeresis' => 0x00d6,
562
+ 'XK_multiply' => 0x00d7,
563
+ 'XK_Oslash' => 0x00d8,
564
+ 'XK_Ooblique' => 0x00d8,
565
+ 'XK_Ugrave' => 0x00d9,
566
+ 'XK_Uacute' => 0x00da,
567
+ 'XK_Ucircumflex' => 0x00db,
568
+ 'XK_Udiaeresis' => 0x00dc,
569
+ 'XK_Yacute' => 0x00dd,
570
+ 'XK_THORN' => 0x00de,
571
+ 'XK_Thorn' => 0x00de,
572
+ 'XK_ssharp' => 0x00df,
573
+ 'XK_agrave' => 0x00e0,
574
+ 'XK_aacute' => 0x00e1,
575
+ 'XK_acircumflex' => 0x00e2,
576
+ 'XK_atilde' => 0x00e3,
577
+ 'XK_adiaeresis' => 0x00e4,
578
+ 'XK_aring' => 0x00e5,
579
+ 'XK_ae' => 0x00e6,
580
+ 'XK_ccedilla' => 0x00e7,
581
+ 'XK_egrave' => 0x00e8,
582
+ 'XK_eacute' => 0x00e9,
583
+ 'XK_ecircumflex' => 0x00ea,
584
+ 'XK_ediaeresis' => 0x00eb,
585
+ 'XK_igrave' => 0x00ec,
586
+ 'XK_iacute' => 0x00ed,
587
+ 'XK_icircumflex' => 0x00ee,
588
+ 'XK_idiaeresis' => 0x00ef,
589
+ 'XK_eth' => 0x00f0,
590
+ 'XK_ntilde' => 0x00f1,
591
+ 'XK_ograve' => 0x00f2,
592
+ 'XK_oacute' => 0x00f3,
593
+ 'XK_ocircumflex' => 0x00f4,
594
+ 'XK_otilde' => 0x00f5,
595
+ 'XK_odiaeresis' => 0x00f6,
596
+ 'XK_division' => 0x00f7,
597
+ 'XK_oslash' => 0x00f8,
598
+ 'XK_ooblique' => 0x00f8,
599
+ 'XK_ugrave' => 0x00f9,
600
+ 'XK_uacute' => 0x00fa,
601
+ 'XK_ucircumflex' => 0x00fb,
602
+ 'XK_udiaeresis' => 0x00fc,
603
+ 'XK_yacute' => 0x00fd,
604
+ 'XK_thorn' => 0x00fe,
605
+ 'XK_ydiaeresis' => 0x00ff,
606
+ 'XK_Aogonek' => 0x01a1,
607
+ 'XK_breve' => 0x01a2,
608
+ 'XK_Lstroke' => 0x01a3,
609
+ 'XK_Lcaron' => 0x01a5,
610
+ 'XK_Sacute' => 0x01a6,
611
+ 'XK_Scaron' => 0x01a9,
612
+ 'XK_Scedilla' => 0x01aa,
613
+ 'XK_Tcaron' => 0x01ab,
614
+ 'XK_Zacute' => 0x01ac,
615
+ 'XK_Zcaron' => 0x01ae,
616
+ 'XK_Zabovedot' => 0x01af,
617
+ 'XK_aogonek' => 0x01b1,
618
+ 'XK_ogonek' => 0x01b2,
619
+ 'XK_lstroke' => 0x01b3,
620
+ 'XK_lcaron' => 0x01b5,
621
+ 'XK_sacute' => 0x01b6,
622
+ 'XK_caron' => 0x01b7,
623
+ 'XK_scaron' => 0x01b9,
624
+ 'XK_scedilla' => 0x01ba,
625
+ 'XK_tcaron' => 0x01bb,
626
+ 'XK_zacute' => 0x01bc,
627
+ 'XK_doubleacute' => 0x01bd,
628
+ 'XK_zcaron' => 0x01be,
629
+ 'XK_zabovedot' => 0x01bf,
630
+ 'XK_Racute' => 0x01c0,
631
+ 'XK_Abreve' => 0x01c3,
632
+ 'XK_Lacute' => 0x01c5,
633
+ 'XK_Cacute' => 0x01c6,
634
+ 'XK_Ccaron' => 0x01c8,
635
+ 'XK_Eogonek' => 0x01ca,
636
+ 'XK_Ecaron' => 0x01cc,
637
+ 'XK_Dcaron' => 0x01cf,
638
+ 'XK_Dstroke' => 0x01d0,
639
+ 'XK_Nacute' => 0x01d1,
640
+ 'XK_Ncaron' => 0x01d2,
641
+ 'XK_Odoubleacute' => 0x01d5,
642
+ 'XK_Rcaron' => 0x01d8,
643
+ 'XK_Uring' => 0x01d9,
644
+ 'XK_Udoubleacute' => 0x01db,
645
+ 'XK_Tcedilla' => 0x01de,
646
+ 'XK_racute' => 0x01e0,
647
+ 'XK_abreve' => 0x01e3,
648
+ 'XK_lacute' => 0x01e5,
649
+ 'XK_cacute' => 0x01e6,
650
+ 'XK_ccaron' => 0x01e8,
651
+ 'XK_eogonek' => 0x01ea,
652
+ 'XK_ecaron' => 0x01ec,
653
+ 'XK_dcaron' => 0x01ef,
654
+ 'XK_dstroke' => 0x01f0,
655
+ 'XK_nacute' => 0x01f1,
656
+ 'XK_ncaron' => 0x01f2,
657
+ 'XK_odoubleacute' => 0x01f5,
658
+ 'XK_rcaron' => 0x01f8,
659
+ 'XK_uring' => 0x01f9,
660
+ 'XK_udoubleacute' => 0x01fb,
661
+ 'XK_tcedilla' => 0x01fe,
662
+ 'XK_abovedot' => 0x01ff,
663
+ 'XK_Hstroke' => 0x02a1,
664
+ 'XK_Hcircumflex' => 0x02a6,
665
+ 'XK_Iabovedot' => 0x02a9,
666
+ 'XK_Gbreve' => 0x02ab,
667
+ 'XK_Jcircumflex' => 0x02ac,
668
+ 'XK_hstroke' => 0x02b1,
669
+ 'XK_hcircumflex' => 0x02b6,
670
+ 'XK_idotless' => 0x02b9,
671
+ 'XK_gbreve' => 0x02bb,
672
+ 'XK_jcircumflex' => 0x02bc,
673
+ 'XK_Cabovedot' => 0x02c5,
674
+ 'XK_Ccircumflex' => 0x02c6,
675
+ 'XK_Gabovedot' => 0x02d5,
676
+ 'XK_Gcircumflex' => 0x02d8,
677
+ 'XK_Ubreve' => 0x02dd,
678
+ 'XK_Scircumflex' => 0x02de,
679
+ 'XK_cabovedot' => 0x02e5,
680
+ 'XK_ccircumflex' => 0x02e6,
681
+ 'XK_gabovedot' => 0x02f5,
682
+ 'XK_gcircumflex' => 0x02f8,
683
+ 'XK_ubreve' => 0x02fd,
684
+ 'XK_scircumflex' => 0x02fe,
685
+ 'XK_kra' => 0x03a2,
686
+ 'XK_kappa' => 0x03a2,
687
+ 'XK_Rcedilla' => 0x03a3,
688
+ 'XK_Itilde' => 0x03a5,
689
+ 'XK_Lcedilla' => 0x03a6,
690
+ 'XK_Emacron' => 0x03aa,
691
+ 'XK_Gcedilla' => 0x03ab,
692
+ 'XK_Tslash' => 0x03ac,
693
+ 'XK_rcedilla' => 0x03b3,
694
+ 'XK_itilde' => 0x03b5,
695
+ 'XK_lcedilla' => 0x03b6,
696
+ 'XK_emacron' => 0x03ba,
697
+ 'XK_gcedilla' => 0x03bb,
698
+ 'XK_tslash' => 0x03bc,
699
+ 'XK_ENG' => 0x03bd,
700
+ 'XK_eng' => 0x03bf,
701
+ 'XK_Amacron' => 0x03c0,
702
+ 'XK_Iogonek' => 0x03c7,
703
+ 'XK_Eabovedot' => 0x03cc,
704
+ 'XK_Imacron' => 0x03cf,
705
+ 'XK_Ncedilla' => 0x03d1,
706
+ 'XK_Omacron' => 0x03d2,
707
+ 'XK_Kcedilla' => 0x03d3,
708
+ 'XK_Uogonek' => 0x03d9,
709
+ 'XK_Utilde' => 0x03dd,
710
+ 'XK_Umacron' => 0x03de,
711
+ 'XK_amacron' => 0x03e0,
712
+ 'XK_iogonek' => 0x03e7,
713
+ 'XK_eabovedot' => 0x03ec,
714
+ 'XK_imacron' => 0x03ef,
715
+ 'XK_ncedilla' => 0x03f1,
716
+ 'XK_omacron' => 0x03f2,
717
+ 'XK_kcedilla' => 0x03f3,
718
+ 'XK_uogonek' => 0x03f9,
719
+ 'XK_utilde' => 0x03fd,
720
+ 'XK_umacron' => 0x03fe,
721
+ 'XK_Wcircumflex' => 0x1000174,
722
+ 'XK_wcircumflex' => 0x1000175,
723
+ 'XK_Ycircumflex' => 0x1000176,
724
+ 'XK_ycircumflex' => 0x1000177,
725
+ 'XK_Babovedot' => 0x1001e02,
726
+ 'XK_babovedot' => 0x1001e03,
727
+ 'XK_Dabovedot' => 0x1001e0a,
728
+ 'XK_dabovedot' => 0x1001e0b,
729
+ 'XK_Fabovedot' => 0x1001e1e,
730
+ 'XK_fabovedot' => 0x1001e1f,
731
+ 'XK_Mabovedot' => 0x1001e40,
732
+ 'XK_mabovedot' => 0x1001e41,
733
+ 'XK_Pabovedot' => 0x1001e56,
734
+ 'XK_pabovedot' => 0x1001e57,
735
+ 'XK_Sabovedot' => 0x1001e60,
736
+ 'XK_sabovedot' => 0x1001e61,
737
+ 'XK_Tabovedot' => 0x1001e6a,
738
+ 'XK_tabovedot' => 0x1001e6b,
739
+ 'XK_Wgrave' => 0x1001e80,
740
+ 'XK_wgrave' => 0x1001e81,
741
+ 'XK_Wacute' => 0x1001e82,
742
+ 'XK_wacute' => 0x1001e83,
743
+ 'XK_Wdiaeresis' => 0x1001e84,
744
+ 'XK_wdiaeresis' => 0x1001e85,
745
+ 'XK_Ygrave' => 0x1001ef2,
746
+ 'XK_ygrave' => 0x1001ef3,
747
+ 'XK_OE' => 0x13bc,
748
+ 'XK_oe' => 0x13bd,
749
+ 'XK_Ydiaeresis' => 0x13be,
750
+ 'XK_overline' => 0x047e,
751
+ 'XK_kana_fullstop' => 0x04a1,
752
+ 'XK_kana_openingbracket' => 0x04a2,
753
+ 'XK_kana_closingbracket' => 0x04a3,
754
+ 'XK_kana_comma' => 0x04a4,
755
+ 'XK_kana_conjunctive' => 0x04a5,
756
+ 'XK_kana_middledot' => 0x04a5,
757
+ 'XK_kana_WO' => 0x04a6,
758
+ 'XK_kana_a' => 0x04a7,
759
+ 'XK_kana_i' => 0x04a8,
760
+ 'XK_kana_u' => 0x04a9,
761
+ 'XK_kana_e' => 0x04aa,
762
+ 'XK_kana_o' => 0x04ab,
763
+ 'XK_kana_ya' => 0x04ac,
764
+ 'XK_kana_yu' => 0x04ad,
765
+ 'XK_kana_yo' => 0x04ae,
766
+ 'XK_kana_tsu' => 0x04af,
767
+ 'XK_kana_tu' => 0x04af,
768
+ 'XK_prolongedsound' => 0x04b0,
769
+ 'XK_kana_A' => 0x04b1,
770
+ 'XK_kana_I' => 0x04b2,
771
+ 'XK_kana_U' => 0x04b3,
772
+ 'XK_kana_E' => 0x04b4,
773
+ 'XK_kana_O' => 0x04b5,
774
+ 'XK_kana_KA' => 0x04b6,
775
+ 'XK_kana_KI' => 0x04b7,
776
+ 'XK_kana_KU' => 0x04b8,
777
+ 'XK_kana_KE' => 0x04b9,
778
+ 'XK_kana_KO' => 0x04ba,
779
+ 'XK_kana_SA' => 0x04bb,
780
+ 'XK_kana_SHI' => 0x04bc,
781
+ 'XK_kana_SU' => 0x04bd,
782
+ 'XK_kana_SE' => 0x04be,
783
+ 'XK_kana_SO' => 0x04bf,
784
+ 'XK_kana_TA' => 0x04c0,
785
+ 'XK_kana_CHI' => 0x04c1,
786
+ 'XK_kana_TI' => 0x04c1,
787
+ 'XK_kana_TSU' => 0x04c2,
788
+ 'XK_kana_TU' => 0x04c2,
789
+ 'XK_kana_TE' => 0x04c3,
790
+ 'XK_kana_TO' => 0x04c4,
791
+ 'XK_kana_NA' => 0x04c5,
792
+ 'XK_kana_NI' => 0x04c6,
793
+ 'XK_kana_NU' => 0x04c7,
794
+ 'XK_kana_NE' => 0x04c8,
795
+ 'XK_kana_NO' => 0x04c9,
796
+ 'XK_kana_HA' => 0x04ca,
797
+ 'XK_kana_HI' => 0x04cb,
798
+ 'XK_kana_FU' => 0x04cc,
799
+ 'XK_kana_HU' => 0x04cc,
800
+ 'XK_kana_HE' => 0x04cd,
801
+ 'XK_kana_HO' => 0x04ce,
802
+ 'XK_kana_MA' => 0x04cf,
803
+ 'XK_kana_MI' => 0x04d0,
804
+ 'XK_kana_MU' => 0x04d1,
805
+ 'XK_kana_ME' => 0x04d2,
806
+ 'XK_kana_MO' => 0x04d3,
807
+ 'XK_kana_YA' => 0x04d4,
808
+ 'XK_kana_YU' => 0x04d5,
809
+ 'XK_kana_YO' => 0x04d6,
810
+ 'XK_kana_RA' => 0x04d7,
811
+ 'XK_kana_RI' => 0x04d8,
812
+ 'XK_kana_RU' => 0x04d9,
813
+ 'XK_kana_RE' => 0x04da,
814
+ 'XK_kana_RO' => 0x04db,
815
+ 'XK_kana_WA' => 0x04dc,
816
+ 'XK_kana_N' => 0x04dd,
817
+ 'XK_voicedsound' => 0x04de,
818
+ 'XK_semivoicedsound' => 0x04df,
819
+ 'XK_kana_switch' => 0xff7e,
820
+ 'XK_Farsi_0' => 0x10006f0,
821
+ 'XK_Farsi_1' => 0x10006f1,
822
+ 'XK_Farsi_2' => 0x10006f2,
823
+ 'XK_Farsi_3' => 0x10006f3,
824
+ 'XK_Farsi_4' => 0x10006f4,
825
+ 'XK_Farsi_5' => 0x10006f5,
826
+ 'XK_Farsi_6' => 0x10006f6,
827
+ 'XK_Farsi_7' => 0x10006f7,
828
+ 'XK_Farsi_8' => 0x10006f8,
829
+ 'XK_Farsi_9' => 0x10006f9,
830
+ 'XK_Arabic_percent' => 0x100066a,
831
+ 'XK_Arabic_superscript_alef' => 0x1000670,
832
+ 'XK_Arabic_tteh' => 0x1000679,
833
+ 'XK_Arabic_peh' => 0x100067e,
834
+ 'XK_Arabic_tcheh' => 0x1000686,
835
+ 'XK_Arabic_ddal' => 0x1000688,
836
+ 'XK_Arabic_rreh' => 0x1000691,
837
+ 'XK_Arabic_comma' => 0x05ac,
838
+ 'XK_Arabic_fullstop' => 0x10006d4,
839
+ 'XK_Arabic_0' => 0x1000660,
840
+ 'XK_Arabic_1' => 0x1000661,
841
+ 'XK_Arabic_2' => 0x1000662,
842
+ 'XK_Arabic_3' => 0x1000663,
843
+ 'XK_Arabic_4' => 0x1000664,
844
+ 'XK_Arabic_5' => 0x1000665,
845
+ 'XK_Arabic_6' => 0x1000666,
846
+ 'XK_Arabic_7' => 0x1000667,
847
+ 'XK_Arabic_8' => 0x1000668,
848
+ 'XK_Arabic_9' => 0x1000669,
849
+ 'XK_Arabic_semicolon' => 0x05bb,
850
+ 'XK_Arabic_question_mark' => 0x05bf,
851
+ 'XK_Arabic_hamza' => 0x05c1,
852
+ 'XK_Arabic_maddaonalef' => 0x05c2,
853
+ 'XK_Arabic_hamzaonalef' => 0x05c3,
854
+ 'XK_Arabic_hamzaonwaw' => 0x05c4,
855
+ 'XK_Arabic_hamzaunderalef' => 0x05c5,
856
+ 'XK_Arabic_hamzaonyeh' => 0x05c6,
857
+ 'XK_Arabic_alef' => 0x05c7,
858
+ 'XK_Arabic_beh' => 0x05c8,
859
+ 'XK_Arabic_tehmarbuta' => 0x05c9,
860
+ 'XK_Arabic_teh' => 0x05ca,
861
+ 'XK_Arabic_theh' => 0x05cb,
862
+ 'XK_Arabic_jeem' => 0x05cc,
863
+ 'XK_Arabic_hah' => 0x05cd,
864
+ 'XK_Arabic_khah' => 0x05ce,
865
+ 'XK_Arabic_dal' => 0x05cf,
866
+ 'XK_Arabic_thal' => 0x05d0,
867
+ 'XK_Arabic_ra' => 0x05d1,
868
+ 'XK_Arabic_zain' => 0x05d2,
869
+ 'XK_Arabic_seen' => 0x05d3,
870
+ 'XK_Arabic_sheen' => 0x05d4,
871
+ 'XK_Arabic_sad' => 0x05d5,
872
+ 'XK_Arabic_dad' => 0x05d6,
873
+ 'XK_Arabic_tah' => 0x05d7,
874
+ 'XK_Arabic_zah' => 0x05d8,
875
+ 'XK_Arabic_ain' => 0x05d9,
876
+ 'XK_Arabic_ghain' => 0x05da,
877
+ 'XK_Arabic_tatweel' => 0x05e0,
878
+ 'XK_Arabic_feh' => 0x05e1,
879
+ 'XK_Arabic_qaf' => 0x05e2,
880
+ 'XK_Arabic_kaf' => 0x05e3,
881
+ 'XK_Arabic_lam' => 0x05e4,
882
+ 'XK_Arabic_meem' => 0x05e5,
883
+ 'XK_Arabic_noon' => 0x05e6,
884
+ 'XK_Arabic_ha' => 0x05e7,
885
+ 'XK_Arabic_heh' => 0x05e7,
886
+ 'XK_Arabic_waw' => 0x05e8,
887
+ 'XK_Arabic_alefmaksura' => 0x05e9,
888
+ 'XK_Arabic_yeh' => 0x05ea,
889
+ 'XK_Arabic_fathatan' => 0x05eb,
890
+ 'XK_Arabic_dammatan' => 0x05ec,
891
+ 'XK_Arabic_kasratan' => 0x05ed,
892
+ 'XK_Arabic_fatha' => 0x05ee,
893
+ 'XK_Arabic_damma' => 0x05ef,
894
+ 'XK_Arabic_kasra' => 0x05f0,
895
+ 'XK_Arabic_shadda' => 0x05f1,
896
+ 'XK_Arabic_sukun' => 0x05f2,
897
+ 'XK_Arabic_madda_above' => 0x1000653,
898
+ 'XK_Arabic_hamza_above' => 0x1000654,
899
+ 'XK_Arabic_hamza_below' => 0x1000655,
900
+ 'XK_Arabic_jeh' => 0x1000698,
901
+ 'XK_Arabic_veh' => 0x10006a4,
902
+ 'XK_Arabic_keheh' => 0x10006a9,
903
+ 'XK_Arabic_gaf' => 0x10006af,
904
+ 'XK_Arabic_noon_ghunna' => 0x10006ba,
905
+ 'XK_Arabic_heh_doachashmee' => 0x10006be,
906
+ 'XK_Farsi_yeh' => 0x10006cc,
907
+ 'XK_Arabic_farsi_yeh' => 0x10006cc,
908
+ 'XK_Arabic_yeh_baree' => 0x10006d2,
909
+ 'XK_Arabic_heh_goal' => 0x10006c1,
910
+ 'XK_Arabic_switch' => 0xff7e,
911
+ 'XK_Cyrillic_GHE_bar' => 0x1000492,
912
+ 'XK_Cyrillic_ghe_bar' => 0x1000493,
913
+ 'XK_Cyrillic_ZHE_descender' => 0x1000496,
914
+ 'XK_Cyrillic_zhe_descender' => 0x1000497,
915
+ 'XK_Cyrillic_KA_descender' => 0x100049a,
916
+ 'XK_Cyrillic_ka_descender' => 0x100049b,
917
+ 'XK_Cyrillic_KA_vertstroke' => 0x100049c,
918
+ 'XK_Cyrillic_ka_vertstroke' => 0x100049d,
919
+ 'XK_Cyrillic_EN_descender' => 0x10004a2,
920
+ 'XK_Cyrillic_en_descender' => 0x10004a3,
921
+ 'XK_Cyrillic_U_straight' => 0x10004ae,
922
+ 'XK_Cyrillic_u_straight' => 0x10004af,
923
+ 'XK_Cyrillic_U_straight_bar' => 0x10004b0,
924
+ 'XK_Cyrillic_u_straight_bar' => 0x10004b1,
925
+ 'XK_Cyrillic_HA_descender' => 0x10004b2,
926
+ 'XK_Cyrillic_ha_descender' => 0x10004b3,
927
+ 'XK_Cyrillic_CHE_descender' => 0x10004b6,
928
+ 'XK_Cyrillic_che_descender' => 0x10004b7,
929
+ 'XK_Cyrillic_CHE_vertstroke' => 0x10004b8,
930
+ 'XK_Cyrillic_che_vertstroke' => 0x10004b9,
931
+ 'XK_Cyrillic_SHHA' => 0x10004ba,
932
+ 'XK_Cyrillic_shha' => 0x10004bb,
933
+ 'XK_Cyrillic_SCHWA' => 0x10004d8,
934
+ 'XK_Cyrillic_schwa' => 0x10004d9,
935
+ 'XK_Cyrillic_I_macron' => 0x10004e2,
936
+ 'XK_Cyrillic_i_macron' => 0x10004e3,
937
+ 'XK_Cyrillic_O_bar' => 0x10004e8,
938
+ 'XK_Cyrillic_o_bar' => 0x10004e9,
939
+ 'XK_Cyrillic_U_macron' => 0x10004ee,
940
+ 'XK_Cyrillic_u_macron' => 0x10004ef,
941
+ 'XK_Serbian_dje' => 0x06a1,
942
+ 'XK_Macedonia_gje' => 0x06a2,
943
+ 'XK_Cyrillic_io' => 0x06a3,
944
+ 'XK_Ukrainian_ie' => 0x06a4,
945
+ 'XK_Ukranian_je' => 0x06a4,
946
+ 'XK_Macedonia_dse' => 0x06a5,
947
+ 'XK_Ukrainian_i' => 0x06a6,
948
+ 'XK_Ukranian_i' => 0x06a6,
949
+ 'XK_Ukrainian_yi' => 0x06a7,
950
+ 'XK_Ukranian_yi' => 0x06a7,
951
+ 'XK_Cyrillic_je' => 0x06a8,
952
+ 'XK_Serbian_je' => 0x06a8,
953
+ 'XK_Cyrillic_lje' => 0x06a9,
954
+ 'XK_Serbian_lje' => 0x06a9,
955
+ 'XK_Cyrillic_nje' => 0x06aa,
956
+ 'XK_Serbian_nje' => 0x06aa,
957
+ 'XK_Serbian_tshe' => 0x06ab,
958
+ 'XK_Macedonia_kje' => 0x06ac,
959
+ 'XK_Ukrainian_ghe_with_upturn' => 0x06ad,
960
+ 'XK_Byelorussian_shortu' => 0x06ae,
961
+ 'XK_Cyrillic_dzhe' => 0x06af,
962
+ 'XK_Serbian_dze' => 0x06af,
963
+ 'XK_numerosign' => 0x06b0,
964
+ 'XK_Serbian_DJE' => 0x06b1,
965
+ 'XK_Macedonia_GJE' => 0x06b2,
966
+ 'XK_Cyrillic_IO' => 0x06b3,
967
+ 'XK_Ukrainian_IE' => 0x06b4,
968
+ 'XK_Ukranian_JE' => 0x06b4,
969
+ 'XK_Macedonia_DSE' => 0x06b5,
970
+ 'XK_Ukrainian_I' => 0x06b6,
971
+ 'XK_Ukranian_I' => 0x06b6,
972
+ 'XK_Ukrainian_YI' => 0x06b7,
973
+ 'XK_Ukranian_YI' => 0x06b7,
974
+ 'XK_Cyrillic_JE' => 0x06b8,
975
+ 'XK_Serbian_JE' => 0x06b8,
976
+ 'XK_Cyrillic_LJE' => 0x06b9,
977
+ 'XK_Serbian_LJE' => 0x06b9,
978
+ 'XK_Cyrillic_NJE' => 0x06ba,
979
+ 'XK_Serbian_NJE' => 0x06ba,
980
+ 'XK_Serbian_TSHE' => 0x06bb,
981
+ 'XK_Macedonia_KJE' => 0x06bc,
982
+ 'XK_Ukrainian_GHE_WITH_UPTURN' => 0x06bd,
983
+ 'XK_Byelorussian_SHORTU' => 0x06be,
984
+ 'XK_Cyrillic_DZHE' => 0x06bf,
985
+ 'XK_Serbian_DZE' => 0x06bf,
986
+ 'XK_Cyrillic_yu' => 0x06c0,
987
+ 'XK_Cyrillic_a' => 0x06c1,
988
+ 'XK_Cyrillic_be' => 0x06c2,
989
+ 'XK_Cyrillic_tse' => 0x06c3,
990
+ 'XK_Cyrillic_de' => 0x06c4,
991
+ 'XK_Cyrillic_ie' => 0x06c5,
992
+ 'XK_Cyrillic_ef' => 0x06c6,
993
+ 'XK_Cyrillic_ghe' => 0x06c7,
994
+ 'XK_Cyrillic_ha' => 0x06c8,
995
+ 'XK_Cyrillic_i' => 0x06c9,
996
+ 'XK_Cyrillic_shorti' => 0x06ca,
997
+ 'XK_Cyrillic_ka' => 0x06cb,
998
+ 'XK_Cyrillic_el' => 0x06cc,
999
+ 'XK_Cyrillic_em' => 0x06cd,
1000
+ 'XK_Cyrillic_en' => 0x06ce,
1001
+ 'XK_Cyrillic_o' => 0x06cf,
1002
+ 'XK_Cyrillic_pe' => 0x06d0,
1003
+ 'XK_Cyrillic_ya' => 0x06d1,
1004
+ 'XK_Cyrillic_er' => 0x06d2,
1005
+ 'XK_Cyrillic_es' => 0x06d3,
1006
+ 'XK_Cyrillic_te' => 0x06d4,
1007
+ 'XK_Cyrillic_u' => 0x06d5,
1008
+ 'XK_Cyrillic_zhe' => 0x06d6,
1009
+ 'XK_Cyrillic_ve' => 0x06d7,
1010
+ 'XK_Cyrillic_softsign' => 0x06d8,
1011
+ 'XK_Cyrillic_yeru' => 0x06d9,
1012
+ 'XK_Cyrillic_ze' => 0x06da,
1013
+ 'XK_Cyrillic_sha' => 0x06db,
1014
+ 'XK_Cyrillic_e' => 0x06dc,
1015
+ 'XK_Cyrillic_shcha' => 0x06dd,
1016
+ 'XK_Cyrillic_che' => 0x06de,
1017
+ 'XK_Cyrillic_hardsign' => 0x06df,
1018
+ 'XK_Cyrillic_YU' => 0x06e0,
1019
+ 'XK_Cyrillic_A' => 0x06e1,
1020
+ 'XK_Cyrillic_BE' => 0x06e2,
1021
+ 'XK_Cyrillic_TSE' => 0x06e3,
1022
+ 'XK_Cyrillic_DE' => 0x06e4,
1023
+ 'XK_Cyrillic_IE' => 0x06e5,
1024
+ 'XK_Cyrillic_EF' => 0x06e6,
1025
+ 'XK_Cyrillic_GHE' => 0x06e7,
1026
+ 'XK_Cyrillic_HA' => 0x06e8,
1027
+ 'XK_Cyrillic_I' => 0x06e9,
1028
+ 'XK_Cyrillic_SHORTI' => 0x06ea,
1029
+ 'XK_Cyrillic_KA' => 0x06eb,
1030
+ 'XK_Cyrillic_EL' => 0x06ec,
1031
+ 'XK_Cyrillic_EM' => 0x06ed,
1032
+ 'XK_Cyrillic_EN' => 0x06ee,
1033
+ 'XK_Cyrillic_O' => 0x06ef,
1034
+ 'XK_Cyrillic_PE' => 0x06f0,
1035
+ 'XK_Cyrillic_YA' => 0x06f1,
1036
+ 'XK_Cyrillic_ER' => 0x06f2,
1037
+ 'XK_Cyrillic_ES' => 0x06f3,
1038
+ 'XK_Cyrillic_TE' => 0x06f4,
1039
+ 'XK_Cyrillic_U' => 0x06f5,
1040
+ 'XK_Cyrillic_ZHE' => 0x06f6,
1041
+ 'XK_Cyrillic_VE' => 0x06f7,
1042
+ 'XK_Cyrillic_SOFTSIGN' => 0x06f8,
1043
+ 'XK_Cyrillic_YERU' => 0x06f9,
1044
+ 'XK_Cyrillic_ZE' => 0x06fa,
1045
+ 'XK_Cyrillic_SHA' => 0x06fb,
1046
+ 'XK_Cyrillic_E' => 0x06fc,
1047
+ 'XK_Cyrillic_SHCHA' => 0x06fd,
1048
+ 'XK_Cyrillic_CHE' => 0x06fe,
1049
+ 'XK_Cyrillic_HARDSIGN' => 0x06ff,
1050
+ 'XK_Greek_ALPHAaccent' => 0x07a1,
1051
+ 'XK_Greek_EPSILONaccent' => 0x07a2,
1052
+ 'XK_Greek_ETAaccent' => 0x07a3,
1053
+ 'XK_Greek_IOTAaccent' => 0x07a4,
1054
+ 'XK_Greek_IOTAdieresis' => 0x07a5,
1055
+ 'XK_Greek_IOTAdiaeresis' => 0x07a5,
1056
+ 'XK_Greek_OMICRONaccent' => 0x07a7,
1057
+ 'XK_Greek_UPSILONaccent' => 0x07a8,
1058
+ 'XK_Greek_UPSILONdieresis' => 0x07a9,
1059
+ 'XK_Greek_OMEGAaccent' => 0x07ab,
1060
+ 'XK_Greek_accentdieresis' => 0x07ae,
1061
+ 'XK_Greek_horizbar' => 0x07af,
1062
+ 'XK_Greek_alphaaccent' => 0x07b1,
1063
+ 'XK_Greek_epsilonaccent' => 0x07b2,
1064
+ 'XK_Greek_etaaccent' => 0x07b3,
1065
+ 'XK_Greek_iotaaccent' => 0x07b4,
1066
+ 'XK_Greek_iotadieresis' => 0x07b5,
1067
+ 'XK_Greek_iotaaccentdieresis' => 0x07b6,
1068
+ 'XK_Greek_omicronaccent' => 0x07b7,
1069
+ 'XK_Greek_upsilonaccent' => 0x07b8,
1070
+ 'XK_Greek_upsilondieresis' => 0x07b9,
1071
+ 'XK_Greek_upsilonaccentdieresis' => 0x07ba,
1072
+ 'XK_Greek_omegaaccent' => 0x07bb,
1073
+ 'XK_Greek_ALPHA' => 0x07c1,
1074
+ 'XK_Greek_BETA' => 0x07c2,
1075
+ 'XK_Greek_GAMMA' => 0x07c3,
1076
+ 'XK_Greek_DELTA' => 0x07c4,
1077
+ 'XK_Greek_EPSILON' => 0x07c5,
1078
+ 'XK_Greek_ZETA' => 0x07c6,
1079
+ 'XK_Greek_ETA' => 0x07c7,
1080
+ 'XK_Greek_THETA' => 0x07c8,
1081
+ 'XK_Greek_IOTA' => 0x07c9,
1082
+ 'XK_Greek_KAPPA' => 0x07ca,
1083
+ 'XK_Greek_LAMDA' => 0x07cb,
1084
+ 'XK_Greek_LAMBDA' => 0x07cb,
1085
+ 'XK_Greek_MU' => 0x07cc,
1086
+ 'XK_Greek_NU' => 0x07cd,
1087
+ 'XK_Greek_XI' => 0x07ce,
1088
+ 'XK_Greek_OMICRON' => 0x07cf,
1089
+ 'XK_Greek_PI' => 0x07d0,
1090
+ 'XK_Greek_RHO' => 0x07d1,
1091
+ 'XK_Greek_SIGMA' => 0x07d2,
1092
+ 'XK_Greek_TAU' => 0x07d4,
1093
+ 'XK_Greek_UPSILON' => 0x07d5,
1094
+ 'XK_Greek_PHI' => 0x07d6,
1095
+ 'XK_Greek_CHI' => 0x07d7,
1096
+ 'XK_Greek_PSI' => 0x07d8,
1097
+ 'XK_Greek_OMEGA' => 0x07d9,
1098
+ 'XK_Greek_alpha' => 0x07e1,
1099
+ 'XK_Greek_beta' => 0x07e2,
1100
+ 'XK_Greek_gamma' => 0x07e3,
1101
+ 'XK_Greek_delta' => 0x07e4,
1102
+ 'XK_Greek_epsilon' => 0x07e5,
1103
+ 'XK_Greek_zeta' => 0x07e6,
1104
+ 'XK_Greek_eta' => 0x07e7,
1105
+ 'XK_Greek_theta' => 0x07e8,
1106
+ 'XK_Greek_iota' => 0x07e9,
1107
+ 'XK_Greek_kappa' => 0x07ea,
1108
+ 'XK_Greek_lamda' => 0x07eb,
1109
+ 'XK_Greek_lambda' => 0x07eb,
1110
+ 'XK_Greek_mu' => 0x07ec,
1111
+ 'XK_Greek_nu' => 0x07ed,
1112
+ 'XK_Greek_xi' => 0x07ee,
1113
+ 'XK_Greek_omicron' => 0x07ef,
1114
+ 'XK_Greek_pi' => 0x07f0,
1115
+ 'XK_Greek_rho' => 0x07f1,
1116
+ 'XK_Greek_sigma' => 0x07f2,
1117
+ 'XK_Greek_finalsmallsigma' => 0x07f3,
1118
+ 'XK_Greek_tau' => 0x07f4,
1119
+ 'XK_Greek_upsilon' => 0x07f5,
1120
+ 'XK_Greek_phi' => 0x07f6,
1121
+ 'XK_Greek_chi' => 0x07f7,
1122
+ 'XK_Greek_psi' => 0x07f8,
1123
+ 'XK_Greek_omega' => 0x07f9,
1124
+ 'XK_Greek_switch' => 0xff7e,
1125
+ 'XK_leftradical' => 0x08a1,
1126
+ 'XK_topleftradical' => 0x08a2,
1127
+ 'XK_horizconnector' => 0x08a3,
1128
+ 'XK_topintegral' => 0x08a4,
1129
+ 'XK_botintegral' => 0x08a5,
1130
+ 'XK_vertconnector' => 0x08a6,
1131
+ 'XK_topleftsqbracket' => 0x08a7,
1132
+ 'XK_botleftsqbracket' => 0x08a8,
1133
+ 'XK_toprightsqbracket' => 0x08a9,
1134
+ 'XK_botrightsqbracket' => 0x08aa,
1135
+ 'XK_topleftparens' => 0x08ab,
1136
+ 'XK_botleftparens' => 0x08ac,
1137
+ 'XK_toprightparens' => 0x08ad,
1138
+ 'XK_botrightparens' => 0x08ae,
1139
+ 'XK_leftmiddlecurlybrace' => 0x08af,
1140
+ 'XK_rightmiddlecurlybrace' => 0x08b0,
1141
+ 'XK_topleftsummation' => 0x08b1,
1142
+ 'XK_botleftsummation' => 0x08b2,
1143
+ 'XK_topvertsummationconnector' => 0x08b3,
1144
+ 'XK_botvertsummationconnector' => 0x08b4,
1145
+ 'XK_toprightsummation' => 0x08b5,
1146
+ 'XK_botrightsummation' => 0x08b6,
1147
+ 'XK_rightmiddlesummation' => 0x08b7,
1148
+ 'XK_lessthanequal' => 0x08bc,
1149
+ 'XK_notequal' => 0x08bd,
1150
+ 'XK_greaterthanequal' => 0x08be,
1151
+ 'XK_integral' => 0x08bf,
1152
+ 'XK_therefore' => 0x08c0,
1153
+ 'XK_variation' => 0x08c1,
1154
+ 'XK_infinity' => 0x08c2,
1155
+ 'XK_nabla' => 0x08c5,
1156
+ 'XK_approximate' => 0x08c8,
1157
+ 'XK_similarequal' => 0x08c9,
1158
+ 'XK_ifonlyif' => 0x08cd,
1159
+ 'XK_implies' => 0x08ce,
1160
+ 'XK_identical' => 0x08cf,
1161
+ 'XK_radical' => 0x08d6,
1162
+ 'XK_includedin' => 0x08da,
1163
+ 'XK_includes' => 0x08db,
1164
+ 'XK_intersection' => 0x08dc,
1165
+ 'XK_union' => 0x08dd,
1166
+ 'XK_logicaland' => 0x08de,
1167
+ 'XK_logicalor' => 0x08df,
1168
+ 'XK_partialderivative' => 0x08ef,
1169
+ 'XK_function' => 0x08f6,
1170
+ 'XK_leftarrow' => 0x08fb,
1171
+ 'XK_uparrow' => 0x08fc,
1172
+ 'XK_rightarrow' => 0x08fd,
1173
+ 'XK_downarrow' => 0x08fe,
1174
+ 'XK_blank' => 0x09df,
1175
+ 'XK_soliddiamond' => 0x09e0,
1176
+ 'XK_checkerboard' => 0x09e1,
1177
+ 'XK_ht' => 0x09e2,
1178
+ 'XK_ff' => 0x09e3,
1179
+ 'XK_cr' => 0x09e4,
1180
+ 'XK_lf' => 0x09e5,
1181
+ 'XK_nl' => 0x09e8,
1182
+ 'XK_vt' => 0x09e9,
1183
+ 'XK_lowrightcorner' => 0x09ea,
1184
+ 'XK_uprightcorner' => 0x09eb,
1185
+ 'XK_upleftcorner' => 0x09ec,
1186
+ 'XK_lowleftcorner' => 0x09ed,
1187
+ 'XK_crossinglines' => 0x09ee,
1188
+ 'XK_horizlinescan1' => 0x09ef,
1189
+ 'XK_horizlinescan3' => 0x09f0,
1190
+ 'XK_horizlinescan5' => 0x09f1,
1191
+ 'XK_horizlinescan7' => 0x09f2,
1192
+ 'XK_horizlinescan9' => 0x09f3,
1193
+ 'XK_leftt' => 0x09f4,
1194
+ 'XK_rightt' => 0x09f5,
1195
+ 'XK_bott' => 0x09f6,
1196
+ 'XK_topt' => 0x09f7,
1197
+ 'XK_vertbar' => 0x09f8,
1198
+ 'XK_emspace' => 0x0aa1,
1199
+ 'XK_enspace' => 0x0aa2,
1200
+ 'XK_em3space' => 0x0aa3,
1201
+ 'XK_em4space' => 0x0aa4,
1202
+ 'XK_digitspace' => 0x0aa5,
1203
+ 'XK_punctspace' => 0x0aa6,
1204
+ 'XK_thinspace' => 0x0aa7,
1205
+ 'XK_hairspace' => 0x0aa8,
1206
+ 'XK_emdash' => 0x0aa9,
1207
+ 'XK_endash' => 0x0aaa,
1208
+ 'XK_signifblank' => 0x0aac,
1209
+ 'XK_ellipsis' => 0x0aae,
1210
+ 'XK_doubbaselinedot' => 0x0aaf,
1211
+ 'XK_onethird' => 0x0ab0,
1212
+ 'XK_twothirds' => 0x0ab1,
1213
+ 'XK_onefifth' => 0x0ab2,
1214
+ 'XK_twofifths' => 0x0ab3,
1215
+ 'XK_threefifths' => 0x0ab4,
1216
+ 'XK_fourfifths' => 0x0ab5,
1217
+ 'XK_onesixth' => 0x0ab6,
1218
+ 'XK_fivesixths' => 0x0ab7,
1219
+ 'XK_careof' => 0x0ab8,
1220
+ 'XK_figdash' => 0x0abb,
1221
+ 'XK_leftanglebracket' => 0x0abc,
1222
+ 'XK_decimalpoint' => 0x0abd,
1223
+ 'XK_rightanglebracket' => 0x0abe,
1224
+ 'XK_marker' => 0x0abf,
1225
+ 'XK_oneeighth' => 0x0ac3,
1226
+ 'XK_threeeighths' => 0x0ac4,
1227
+ 'XK_fiveeighths' => 0x0ac5,
1228
+ 'XK_seveneighths' => 0x0ac6,
1229
+ 'XK_trademark' => 0x0ac9,
1230
+ 'XK_signaturemark' => 0x0aca,
1231
+ 'XK_trademarkincircle' => 0x0acb,
1232
+ 'XK_leftopentriangle' => 0x0acc,
1233
+ 'XK_rightopentriangle' => 0x0acd,
1234
+ 'XK_emopencircle' => 0x0ace,
1235
+ 'XK_emopenrectangle' => 0x0acf,
1236
+ 'XK_leftsinglequotemark' => 0x0ad0,
1237
+ 'XK_rightsinglequotemark' => 0x0ad1,
1238
+ 'XK_leftdoublequotemark' => 0x0ad2,
1239
+ 'XK_rightdoublequotemark' => 0x0ad3,
1240
+ 'XK_prescription' => 0x0ad4,
1241
+ 'XK_minutes' => 0x0ad6,
1242
+ 'XK_seconds' => 0x0ad7,
1243
+ 'XK_latincross' => 0x0ad9,
1244
+ 'XK_hexagram' => 0x0ada,
1245
+ 'XK_filledrectbullet' => 0x0adb,
1246
+ 'XK_filledlefttribullet' => 0x0adc,
1247
+ 'XK_filledrighttribullet' => 0x0add,
1248
+ 'XK_emfilledcircle' => 0x0ade,
1249
+ 'XK_emfilledrect' => 0x0adf,
1250
+ 'XK_enopencircbullet' => 0x0ae0,
1251
+ 'XK_enopensquarebullet' => 0x0ae1,
1252
+ 'XK_openrectbullet' => 0x0ae2,
1253
+ 'XK_opentribulletup' => 0x0ae3,
1254
+ 'XK_opentribulletdown' => 0x0ae4,
1255
+ 'XK_openstar' => 0x0ae5,
1256
+ 'XK_enfilledcircbullet' => 0x0ae6,
1257
+ 'XK_enfilledsqbullet' => 0x0ae7,
1258
+ 'XK_filledtribulletup' => 0x0ae8,
1259
+ 'XK_filledtribulletdown' => 0x0ae9,
1260
+ 'XK_leftpointer' => 0x0aea,
1261
+ 'XK_rightpointer' => 0x0aeb,
1262
+ 'XK_club' => 0x0aec,
1263
+ 'XK_diamond' => 0x0aed,
1264
+ 'XK_heart' => 0x0aee,
1265
+ 'XK_maltesecross' => 0x0af0,
1266
+ 'XK_dagger' => 0x0af1,
1267
+ 'XK_doubledagger' => 0x0af2,
1268
+ 'XK_checkmark' => 0x0af3,
1269
+ 'XK_ballotcross' => 0x0af4,
1270
+ 'XK_musicalsharp' => 0x0af5,
1271
+ 'XK_musicalflat' => 0x0af6,
1272
+ 'XK_malesymbol' => 0x0af7,
1273
+ 'XK_femalesymbol' => 0x0af8,
1274
+ 'XK_telephone' => 0x0af9,
1275
+ 'XK_telephonerecorder' => 0x0afa,
1276
+ 'XK_phonographcopyright' => 0x0afb,
1277
+ 'XK_caret' => 0x0afc,
1278
+ 'XK_singlelowquotemark' => 0x0afd,
1279
+ 'XK_doublelowquotemark' => 0x0afe,
1280
+ 'XK_cursor' => 0x0aff,
1281
+ 'XK_leftcaret' => 0x0ba3,
1282
+ 'XK_rightcaret' => 0x0ba6,
1283
+ 'XK_downcaret' => 0x0ba8,
1284
+ 'XK_upcaret' => 0x0ba9,
1285
+ 'XK_overbar' => 0x0bc0,
1286
+ 'XK_downtack' => 0x0bc2,
1287
+ 'XK_upshoe' => 0x0bc3,
1288
+ 'XK_downstile' => 0x0bc4,
1289
+ 'XK_underbar' => 0x0bc6,
1290
+ 'XK_jot' => 0x0bca,
1291
+ 'XK_quad' => 0x0bcc,
1292
+ 'XK_uptack' => 0x0bce,
1293
+ 'XK_circle' => 0x0bcf,
1294
+ 'XK_upstile' => 0x0bd3,
1295
+ 'XK_downshoe' => 0x0bd6,
1296
+ 'XK_rightshoe' => 0x0bd8,
1297
+ 'XK_leftshoe' => 0x0bda,
1298
+ 'XK_lefttack' => 0x0bdc,
1299
+ 'XK_righttack' => 0x0bfc,
1300
+ 'XK_hebrew_doublelowline' => 0x0cdf,
1301
+ 'XK_hebrew_aleph' => 0x0ce0,
1302
+ 'XK_hebrew_bet' => 0x0ce1,
1303
+ 'XK_hebrew_beth' => 0x0ce1,
1304
+ 'XK_hebrew_gimel' => 0x0ce2,
1305
+ 'XK_hebrew_gimmel' => 0x0ce2,
1306
+ 'XK_hebrew_dalet' => 0x0ce3,
1307
+ 'XK_hebrew_daleth' => 0x0ce3,
1308
+ 'XK_hebrew_he' => 0x0ce4,
1309
+ 'XK_hebrew_waw' => 0x0ce5,
1310
+ 'XK_hebrew_zain' => 0x0ce6,
1311
+ 'XK_hebrew_zayin' => 0x0ce6,
1312
+ 'XK_hebrew_chet' => 0x0ce7,
1313
+ 'XK_hebrew_het' => 0x0ce7,
1314
+ 'XK_hebrew_tet' => 0x0ce8,
1315
+ 'XK_hebrew_teth' => 0x0ce8,
1316
+ 'XK_hebrew_yod' => 0x0ce9,
1317
+ 'XK_hebrew_finalkaph' => 0x0cea,
1318
+ 'XK_hebrew_kaph' => 0x0ceb,
1319
+ 'XK_hebrew_lamed' => 0x0cec,
1320
+ 'XK_hebrew_finalmem' => 0x0ced,
1321
+ 'XK_hebrew_mem' => 0x0cee,
1322
+ 'XK_hebrew_finalnun' => 0x0cef,
1323
+ 'XK_hebrew_nun' => 0x0cf0,
1324
+ 'XK_hebrew_samech' => 0x0cf1,
1325
+ 'XK_hebrew_samekh' => 0x0cf1,
1326
+ 'XK_hebrew_ayin' => 0x0cf2,
1327
+ 'XK_hebrew_finalpe' => 0x0cf3,
1328
+ 'XK_hebrew_pe' => 0x0cf4,
1329
+ 'XK_hebrew_finalzade' => 0x0cf5,
1330
+ 'XK_hebrew_finalzadi' => 0x0cf5,
1331
+ 'XK_hebrew_zade' => 0x0cf6,
1332
+ 'XK_hebrew_zadi' => 0x0cf6,
1333
+ 'XK_hebrew_qoph' => 0x0cf7,
1334
+ 'XK_hebrew_kuf' => 0x0cf7,
1335
+ 'XK_hebrew_resh' => 0x0cf8,
1336
+ 'XK_hebrew_shin' => 0x0cf9,
1337
+ 'XK_hebrew_taw' => 0x0cfa,
1338
+ 'XK_hebrew_taf' => 0x0cfa,
1339
+ 'XK_Hebrew_switch' => 0xff7e,
1340
+ 'XK_Thai_kokai' => 0x0da1,
1341
+ 'XK_Thai_khokhai' => 0x0da2,
1342
+ 'XK_Thai_khokhuat' => 0x0da3,
1343
+ 'XK_Thai_khokhwai' => 0x0da4,
1344
+ 'XK_Thai_khokhon' => 0x0da5,
1345
+ 'XK_Thai_khorakhang' => 0x0da6,
1346
+ 'XK_Thai_ngongu' => 0x0da7,
1347
+ 'XK_Thai_chochan' => 0x0da8,
1348
+ 'XK_Thai_choching' => 0x0da9,
1349
+ 'XK_Thai_chochang' => 0x0daa,
1350
+ 'XK_Thai_soso' => 0x0dab,
1351
+ 'XK_Thai_chochoe' => 0x0dac,
1352
+ 'XK_Thai_yoying' => 0x0dad,
1353
+ 'XK_Thai_dochada' => 0x0dae,
1354
+ 'XK_Thai_topatak' => 0x0daf,
1355
+ 'XK_Thai_thothan' => 0x0db0,
1356
+ 'XK_Thai_thonangmontho' => 0x0db1,
1357
+ 'XK_Thai_thophuthao' => 0x0db2,
1358
+ 'XK_Thai_nonen' => 0x0db3,
1359
+ 'XK_Thai_dodek' => 0x0db4,
1360
+ 'XK_Thai_totao' => 0x0db5,
1361
+ 'XK_Thai_thothung' => 0x0db6,
1362
+ 'XK_Thai_thothahan' => 0x0db7,
1363
+ 'XK_Thai_thothong' => 0x0db8,
1364
+ 'XK_Thai_nonu' => 0x0db9,
1365
+ 'XK_Thai_bobaimai' => 0x0dba,
1366
+ 'XK_Thai_popla' => 0x0dbb,
1367
+ 'XK_Thai_phophung' => 0x0dbc,
1368
+ 'XK_Thai_fofa' => 0x0dbd,
1369
+ 'XK_Thai_phophan' => 0x0dbe,
1370
+ 'XK_Thai_fofan' => 0x0dbf,
1371
+ 'XK_Thai_phosamphao' => 0x0dc0,
1372
+ 'XK_Thai_moma' => 0x0dc1,
1373
+ 'XK_Thai_yoyak' => 0x0dc2,
1374
+ 'XK_Thai_rorua' => 0x0dc3,
1375
+ 'XK_Thai_ru' => 0x0dc4,
1376
+ 'XK_Thai_loling' => 0x0dc5,
1377
+ 'XK_Thai_lu' => 0x0dc6,
1378
+ 'XK_Thai_wowaen' => 0x0dc7,
1379
+ 'XK_Thai_sosala' => 0x0dc8,
1380
+ 'XK_Thai_sorusi' => 0x0dc9,
1381
+ 'XK_Thai_sosua' => 0x0dca,
1382
+ 'XK_Thai_hohip' => 0x0dcb,
1383
+ 'XK_Thai_lochula' => 0x0dcc,
1384
+ 'XK_Thai_oang' => 0x0dcd,
1385
+ 'XK_Thai_honokhuk' => 0x0dce,
1386
+ 'XK_Thai_paiyannoi' => 0x0dcf,
1387
+ 'XK_Thai_saraa' => 0x0dd0,
1388
+ 'XK_Thai_maihanakat' => 0x0dd1,
1389
+ 'XK_Thai_saraaa' => 0x0dd2,
1390
+ 'XK_Thai_saraam' => 0x0dd3,
1391
+ 'XK_Thai_sarai' => 0x0dd4,
1392
+ 'XK_Thai_saraii' => 0x0dd5,
1393
+ 'XK_Thai_saraue' => 0x0dd6,
1394
+ 'XK_Thai_sarauee' => 0x0dd7,
1395
+ 'XK_Thai_sarau' => 0x0dd8,
1396
+ 'XK_Thai_sarauu' => 0x0dd9,
1397
+ 'XK_Thai_phinthu' => 0x0dda,
1398
+ 'XK_Thai_maihanakat_maitho' => 0x0dde,
1399
+ 'XK_Thai_baht' => 0x0ddf,
1400
+ 'XK_Thai_sarae' => 0x0de0,
1401
+ 'XK_Thai_saraae' => 0x0de1,
1402
+ 'XK_Thai_sarao' => 0x0de2,
1403
+ 'XK_Thai_saraaimaimuan' => 0x0de3,
1404
+ 'XK_Thai_saraaimaimalai' => 0x0de4,
1405
+ 'XK_Thai_lakkhangyao' => 0x0de5,
1406
+ 'XK_Thai_maiyamok' => 0x0de6,
1407
+ 'XK_Thai_maitaikhu' => 0x0de7,
1408
+ 'XK_Thai_maiek' => 0x0de8,
1409
+ 'XK_Thai_maitho' => 0x0de9,
1410
+ 'XK_Thai_maitri' => 0x0dea,
1411
+ 'XK_Thai_maichattawa' => 0x0deb,
1412
+ 'XK_Thai_thanthakhat' => 0x0dec,
1413
+ 'XK_Thai_nikhahit' => 0x0ded,
1414
+ 'XK_Thai_leksun' => 0x0df0,
1415
+ 'XK_Thai_leknung' => 0x0df1,
1416
+ 'XK_Thai_leksong' => 0x0df2,
1417
+ 'XK_Thai_leksam' => 0x0df3,
1418
+ 'XK_Thai_leksi' => 0x0df4,
1419
+ 'XK_Thai_lekha' => 0x0df5,
1420
+ 'XK_Thai_lekhok' => 0x0df6,
1421
+ 'XK_Thai_lekchet' => 0x0df7,
1422
+ 'XK_Thai_lekpaet' => 0x0df8,
1423
+ 'XK_Thai_lekkao' => 0x0df9,
1424
+ 'XK_Hangul' => 0xff31,
1425
+ 'XK_Hangul_Start' => 0xff32,
1426
+ 'XK_Hangul_End' => 0xff33,
1427
+ 'XK_Hangul_Hanja' => 0xff34,
1428
+ 'XK_Hangul_Jamo' => 0xff35,
1429
+ 'XK_Hangul_Romaja' => 0xff36,
1430
+ 'XK_Hangul_Codeinput' => 0xff37,
1431
+ 'XK_Hangul_Jeonja' => 0xff38,
1432
+ 'XK_Hangul_Banja' => 0xff39,
1433
+ 'XK_Hangul_PreHanja' => 0xff3a,
1434
+ 'XK_Hangul_PostHanja' => 0xff3b,
1435
+ 'XK_Hangul_SingleCandidate' => 0xff3c,
1436
+ 'XK_Hangul_MultipleCandidate' => 0xff3d,
1437
+ 'XK_Hangul_PreviousCandidate' => 0xff3e,
1438
+ 'XK_Hangul_Special' => 0xff3f,
1439
+ 'XK_Hangul_switch' => 0xff7e,
1440
+ 'XK_Hangul_Kiyeog' => 0x0ea1,
1441
+ 'XK_Hangul_SsangKiyeog' => 0x0ea2,
1442
+ 'XK_Hangul_KiyeogSios' => 0x0ea3,
1443
+ 'XK_Hangul_Nieun' => 0x0ea4,
1444
+ 'XK_Hangul_NieunJieuj' => 0x0ea5,
1445
+ 'XK_Hangul_NieunHieuh' => 0x0ea6,
1446
+ 'XK_Hangul_Dikeud' => 0x0ea7,
1447
+ 'XK_Hangul_SsangDikeud' => 0x0ea8,
1448
+ 'XK_Hangul_Rieul' => 0x0ea9,
1449
+ 'XK_Hangul_RieulKiyeog' => 0x0eaa,
1450
+ 'XK_Hangul_RieulMieum' => 0x0eab,
1451
+ 'XK_Hangul_RieulPieub' => 0x0eac,
1452
+ 'XK_Hangul_RieulSios' => 0x0ead,
1453
+ 'XK_Hangul_RieulTieut' => 0x0eae,
1454
+ 'XK_Hangul_RieulPhieuf' => 0x0eaf,
1455
+ 'XK_Hangul_RieulHieuh' => 0x0eb0,
1456
+ 'XK_Hangul_Mieum' => 0x0eb1,
1457
+ 'XK_Hangul_Pieub' => 0x0eb2,
1458
+ 'XK_Hangul_SsangPieub' => 0x0eb3,
1459
+ 'XK_Hangul_PieubSios' => 0x0eb4,
1460
+ 'XK_Hangul_Sios' => 0x0eb5,
1461
+ 'XK_Hangul_SsangSios' => 0x0eb6,
1462
+ 'XK_Hangul_Ieung' => 0x0eb7,
1463
+ 'XK_Hangul_Jieuj' => 0x0eb8,
1464
+ 'XK_Hangul_SsangJieuj' => 0x0eb9,
1465
+ 'XK_Hangul_Cieuc' => 0x0eba,
1466
+ 'XK_Hangul_Khieuq' => 0x0ebb,
1467
+ 'XK_Hangul_Tieut' => 0x0ebc,
1468
+ 'XK_Hangul_Phieuf' => 0x0ebd,
1469
+ 'XK_Hangul_Hieuh' => 0x0ebe,
1470
+ 'XK_Hangul_A' => 0x0ebf,
1471
+ 'XK_Hangul_AE' => 0x0ec0,
1472
+ 'XK_Hangul_YA' => 0x0ec1,
1473
+ 'XK_Hangul_YAE' => 0x0ec2,
1474
+ 'XK_Hangul_EO' => 0x0ec3,
1475
+ 'XK_Hangul_E' => 0x0ec4,
1476
+ 'XK_Hangul_YEO' => 0x0ec5,
1477
+ 'XK_Hangul_YE' => 0x0ec6,
1478
+ 'XK_Hangul_O' => 0x0ec7,
1479
+ 'XK_Hangul_WA' => 0x0ec8,
1480
+ 'XK_Hangul_WAE' => 0x0ec9,
1481
+ 'XK_Hangul_OE' => 0x0eca,
1482
+ 'XK_Hangul_YO' => 0x0ecb,
1483
+ 'XK_Hangul_U' => 0x0ecc,
1484
+ 'XK_Hangul_WEO' => 0x0ecd,
1485
+ 'XK_Hangul_WE' => 0x0ece,
1486
+ 'XK_Hangul_WI' => 0x0ecf,
1487
+ 'XK_Hangul_YU' => 0x0ed0,
1488
+ 'XK_Hangul_EU' => 0x0ed1,
1489
+ 'XK_Hangul_YI' => 0x0ed2,
1490
+ 'XK_Hangul_I' => 0x0ed3,
1491
+ 'XK_Hangul_J_Kiyeog' => 0x0ed4,
1492
+ 'XK_Hangul_J_SsangKiyeog' => 0x0ed5,
1493
+ 'XK_Hangul_J_KiyeogSios' => 0x0ed6,
1494
+ 'XK_Hangul_J_Nieun' => 0x0ed7,
1495
+ 'XK_Hangul_J_NieunJieuj' => 0x0ed8,
1496
+ 'XK_Hangul_J_NieunHieuh' => 0x0ed9,
1497
+ 'XK_Hangul_J_Dikeud' => 0x0eda,
1498
+ 'XK_Hangul_J_Rieul' => 0x0edb,
1499
+ 'XK_Hangul_J_RieulKiyeog' => 0x0edc,
1500
+ 'XK_Hangul_J_RieulMieum' => 0x0edd,
1501
+ 'XK_Hangul_J_RieulPieub' => 0x0ede,
1502
+ 'XK_Hangul_J_RieulSios' => 0x0edf,
1503
+ 'XK_Hangul_J_RieulTieut' => 0x0ee0,
1504
+ 'XK_Hangul_J_RieulPhieuf' => 0x0ee1,
1505
+ 'XK_Hangul_J_RieulHieuh' => 0x0ee2,
1506
+ 'XK_Hangul_J_Mieum' => 0x0ee3,
1507
+ 'XK_Hangul_J_Pieub' => 0x0ee4,
1508
+ 'XK_Hangul_J_PieubSios' => 0x0ee5,
1509
+ 'XK_Hangul_J_Sios' => 0x0ee6,
1510
+ 'XK_Hangul_J_SsangSios' => 0x0ee7,
1511
+ 'XK_Hangul_J_Ieung' => 0x0ee8,
1512
+ 'XK_Hangul_J_Jieuj' => 0x0ee9,
1513
+ 'XK_Hangul_J_Cieuc' => 0x0eea,
1514
+ 'XK_Hangul_J_Khieuq' => 0x0eeb,
1515
+ 'XK_Hangul_J_Tieut' => 0x0eec,
1516
+ 'XK_Hangul_J_Phieuf' => 0x0eed,
1517
+ 'XK_Hangul_J_Hieuh' => 0x0eee,
1518
+ 'XK_Hangul_RieulYeorinHieuh' => 0x0eef,
1519
+ 'XK_Hangul_SunkyeongeumMieum' => 0x0ef0,
1520
+ 'XK_Hangul_SunkyeongeumPieub' => 0x0ef1,
1521
+ 'XK_Hangul_PanSios' => 0x0ef2,
1522
+ 'XK_Hangul_KkogjiDalrinIeung' => 0x0ef3,
1523
+ 'XK_Hangul_SunkyeongeumPhieuf' => 0x0ef4,
1524
+ 'XK_Hangul_YeorinHieuh' => 0x0ef5,
1525
+ 'XK_Hangul_AraeA' => 0x0ef6,
1526
+ 'XK_Hangul_AraeAE' => 0x0ef7,
1527
+ 'XK_Hangul_J_PanSios' => 0x0ef8,
1528
+ 'XK_Hangul_J_KkogjiDalrinIeung' => 0x0ef9,
1529
+ 'XK_Hangul_J_YeorinHieuh' => 0x0efa,
1530
+ 'XK_Korean_Won' => 0x0eff,
1531
+ 'XK_Armenian_ligature_ew' => 0x1000587,
1532
+ 'XK_Armenian_full_stop' => 0x1000589,
1533
+ 'XK_Armenian_verjaket' => 0x1000589,
1534
+ 'XK_Armenian_separation_mark' => 0x100055d,
1535
+ 'XK_Armenian_but' => 0x100055d,
1536
+ 'XK_Armenian_hyphen' => 0x100058a,
1537
+ 'XK_Armenian_yentamna' => 0x100058a,
1538
+ 'XK_Armenian_exclam' => 0x100055c,
1539
+ 'XK_Armenian_amanak' => 0x100055c,
1540
+ 'XK_Armenian_accent' => 0x100055b,
1541
+ 'XK_Armenian_shesht' => 0x100055b,
1542
+ 'XK_Armenian_question' => 0x100055e,
1543
+ 'XK_Armenian_paruyk' => 0x100055e,
1544
+ 'XK_Armenian_AYB' => 0x1000531,
1545
+ 'XK_Armenian_ayb' => 0x1000561,
1546
+ 'XK_Armenian_BEN' => 0x1000532,
1547
+ 'XK_Armenian_ben' => 0x1000562,
1548
+ 'XK_Armenian_GIM' => 0x1000533,
1549
+ 'XK_Armenian_gim' => 0x1000563,
1550
+ 'XK_Armenian_DA' => 0x1000534,
1551
+ 'XK_Armenian_da' => 0x1000564,
1552
+ 'XK_Armenian_YECH' => 0x1000535,
1553
+ 'XK_Armenian_yech' => 0x1000565,
1554
+ 'XK_Armenian_ZA' => 0x1000536,
1555
+ 'XK_Armenian_za' => 0x1000566,
1556
+ 'XK_Armenian_E' => 0x1000537,
1557
+ 'XK_Armenian_e' => 0x1000567,
1558
+ 'XK_Armenian_AT' => 0x1000538,
1559
+ 'XK_Armenian_at' => 0x1000568,
1560
+ 'XK_Armenian_TO' => 0x1000539,
1561
+ 'XK_Armenian_to' => 0x1000569,
1562
+ 'XK_Armenian_ZHE' => 0x100053a,
1563
+ 'XK_Armenian_zhe' => 0x100056a,
1564
+ 'XK_Armenian_INI' => 0x100053b,
1565
+ 'XK_Armenian_ini' => 0x100056b,
1566
+ 'XK_Armenian_LYUN' => 0x100053c,
1567
+ 'XK_Armenian_lyun' => 0x100056c,
1568
+ 'XK_Armenian_KHE' => 0x100053d,
1569
+ 'XK_Armenian_khe' => 0x100056d,
1570
+ 'XK_Armenian_TSA' => 0x100053e,
1571
+ 'XK_Armenian_tsa' => 0x100056e,
1572
+ 'XK_Armenian_KEN' => 0x100053f,
1573
+ 'XK_Armenian_ken' => 0x100056f,
1574
+ 'XK_Armenian_HO' => 0x1000540,
1575
+ 'XK_Armenian_ho' => 0x1000570,
1576
+ 'XK_Armenian_DZA' => 0x1000541,
1577
+ 'XK_Armenian_dza' => 0x1000571,
1578
+ 'XK_Armenian_GHAT' => 0x1000542,
1579
+ 'XK_Armenian_ghat' => 0x1000572,
1580
+ 'XK_Armenian_TCHE' => 0x1000543,
1581
+ 'XK_Armenian_tche' => 0x1000573,
1582
+ 'XK_Armenian_MEN' => 0x1000544,
1583
+ 'XK_Armenian_men' => 0x1000574,
1584
+ 'XK_Armenian_HI' => 0x1000545,
1585
+ 'XK_Armenian_hi' => 0x1000575,
1586
+ 'XK_Armenian_NU' => 0x1000546,
1587
+ 'XK_Armenian_nu' => 0x1000576,
1588
+ 'XK_Armenian_SHA' => 0x1000547,
1589
+ 'XK_Armenian_sha' => 0x1000577,
1590
+ 'XK_Armenian_VO' => 0x1000548,
1591
+ 'XK_Armenian_vo' => 0x1000578,
1592
+ 'XK_Armenian_CHA' => 0x1000549,
1593
+ 'XK_Armenian_cha' => 0x1000579,
1594
+ 'XK_Armenian_PE' => 0x100054a,
1595
+ 'XK_Armenian_pe' => 0x100057a,
1596
+ 'XK_Armenian_JE' => 0x100054b,
1597
+ 'XK_Armenian_je' => 0x100057b,
1598
+ 'XK_Armenian_RA' => 0x100054c,
1599
+ 'XK_Armenian_ra' => 0x100057c,
1600
+ 'XK_Armenian_SE' => 0x100054d,
1601
+ 'XK_Armenian_se' => 0x100057d,
1602
+ 'XK_Armenian_VEV' => 0x100054e,
1603
+ 'XK_Armenian_vev' => 0x100057e,
1604
+ 'XK_Armenian_TYUN' => 0x100054f,
1605
+ 'XK_Armenian_tyun' => 0x100057f,
1606
+ 'XK_Armenian_RE' => 0x1000550,
1607
+ 'XK_Armenian_re' => 0x1000580,
1608
+ 'XK_Armenian_TSO' => 0x1000551,
1609
+ 'XK_Armenian_tso' => 0x1000581,
1610
+ 'XK_Armenian_VYUN' => 0x1000552,
1611
+ 'XK_Armenian_vyun' => 0x1000582,
1612
+ 'XK_Armenian_PYUR' => 0x1000553,
1613
+ 'XK_Armenian_pyur' => 0x1000583,
1614
+ 'XK_Armenian_KE' => 0x1000554,
1615
+ 'XK_Armenian_ke' => 0x1000584,
1616
+ 'XK_Armenian_O' => 0x1000555,
1617
+ 'XK_Armenian_o' => 0x1000585,
1618
+ 'XK_Armenian_FE' => 0x1000556,
1619
+ 'XK_Armenian_fe' => 0x1000586,
1620
+ 'XK_Armenian_apostrophe' => 0x100055a,
1621
+ 'XK_Georgian_an' => 0x10010d0,
1622
+ 'XK_Georgian_ban' => 0x10010d1,
1623
+ 'XK_Georgian_gan' => 0x10010d2,
1624
+ 'XK_Georgian_don' => 0x10010d3,
1625
+ 'XK_Georgian_en' => 0x10010d4,
1626
+ 'XK_Georgian_vin' => 0x10010d5,
1627
+ 'XK_Georgian_zen' => 0x10010d6,
1628
+ 'XK_Georgian_tan' => 0x10010d7,
1629
+ 'XK_Georgian_in' => 0x10010d8,
1630
+ 'XK_Georgian_kan' => 0x10010d9,
1631
+ 'XK_Georgian_las' => 0x10010da,
1632
+ 'XK_Georgian_man' => 0x10010db,
1633
+ 'XK_Georgian_nar' => 0x10010dc,
1634
+ 'XK_Georgian_on' => 0x10010dd,
1635
+ 'XK_Georgian_par' => 0x10010de,
1636
+ 'XK_Georgian_zhar' => 0x10010df,
1637
+ 'XK_Georgian_rae' => 0x10010e0,
1638
+ 'XK_Georgian_san' => 0x10010e1,
1639
+ 'XK_Georgian_tar' => 0x10010e2,
1640
+ 'XK_Georgian_un' => 0x10010e3,
1641
+ 'XK_Georgian_phar' => 0x10010e4,
1642
+ 'XK_Georgian_khar' => 0x10010e5,
1643
+ 'XK_Georgian_ghan' => 0x10010e6,
1644
+ 'XK_Georgian_qar' => 0x10010e7,
1645
+ 'XK_Georgian_shin' => 0x10010e8,
1646
+ 'XK_Georgian_chin' => 0x10010e9,
1647
+ 'XK_Georgian_can' => 0x10010ea,
1648
+ 'XK_Georgian_jil' => 0x10010eb,
1649
+ 'XK_Georgian_cil' => 0x10010ec,
1650
+ 'XK_Georgian_char' => 0x10010ed,
1651
+ 'XK_Georgian_xan' => 0x10010ee,
1652
+ 'XK_Georgian_jhan' => 0x10010ef,
1653
+ 'XK_Georgian_hae' => 0x10010f0,
1654
+ 'XK_Georgian_he' => 0x10010f1,
1655
+ 'XK_Georgian_hie' => 0x10010f2,
1656
+ 'XK_Georgian_we' => 0x10010f3,
1657
+ 'XK_Georgian_har' => 0x10010f4,
1658
+ 'XK_Georgian_hoe' => 0x10010f5,
1659
+ 'XK_Georgian_fi' => 0x10010f6,
1660
+ 'XK_Xabovedot' => 0x1001e8a,
1661
+ 'XK_Ibreve' => 0x100012c,
1662
+ 'XK_Zstroke' => 0x10001b5,
1663
+ 'XK_Gcaron' => 0x10001e6,
1664
+ 'XK_Ocaron' => 0x10001d1,
1665
+ 'XK_Obarred' => 0x100019f,
1666
+ 'XK_xabovedot' => 0x1001e8b,
1667
+ 'XK_ibreve' => 0x100012d,
1668
+ 'XK_zstroke' => 0x10001b6,
1669
+ 'XK_gcaron' => 0x10001e7,
1670
+ 'XK_ocaron' => 0x10001d2,
1671
+ 'XK_obarred' => 0x1000275,
1672
+ 'XK_SCHWA' => 0x100018f,
1673
+ 'XK_schwa' => 0x1000259,
1674
+ 'XK_Lbelowdot' => 0x1001e36,
1675
+ 'XK_lbelowdot' => 0x1001e37,
1676
+ 'XK_Abelowdot' => 0x1001ea0,
1677
+ 'XK_abelowdot' => 0x1001ea1,
1678
+ 'XK_Ahook' => 0x1001ea2,
1679
+ 'XK_ahook' => 0x1001ea3,
1680
+ 'XK_Acircumflexacute' => 0x1001ea4,
1681
+ 'XK_acircumflexacute' => 0x1001ea5,
1682
+ 'XK_Acircumflexgrave' => 0x1001ea6,
1683
+ 'XK_acircumflexgrave' => 0x1001ea7,
1684
+ 'XK_Acircumflexhook' => 0x1001ea8,
1685
+ 'XK_acircumflexhook' => 0x1001ea9,
1686
+ 'XK_Acircumflextilde' => 0x1001eaa,
1687
+ 'XK_acircumflextilde' => 0x1001eab,
1688
+ 'XK_Acircumflexbelowdot' => 0x1001eac,
1689
+ 'XK_acircumflexbelowdot' => 0x1001ead,
1690
+ 'XK_Abreveacute' => 0x1001eae,
1691
+ 'XK_abreveacute' => 0x1001eaf,
1692
+ 'XK_Abrevegrave' => 0x1001eb0,
1693
+ 'XK_abrevegrave' => 0x1001eb1,
1694
+ 'XK_Abrevehook' => 0x1001eb2,
1695
+ 'XK_abrevehook' => 0x1001eb3,
1696
+ 'XK_Abrevetilde' => 0x1001eb4,
1697
+ 'XK_abrevetilde' => 0x1001eb5,
1698
+ 'XK_Abrevebelowdot' => 0x1001eb6,
1699
+ 'XK_abrevebelowdot' => 0x1001eb7,
1700
+ 'XK_Ebelowdot' => 0x1001eb8,
1701
+ 'XK_ebelowdot' => 0x1001eb9,
1702
+ 'XK_Ehook' => 0x1001eba,
1703
+ 'XK_ehook' => 0x1001ebb,
1704
+ 'XK_Etilde' => 0x1001ebc,
1705
+ 'XK_etilde' => 0x1001ebd,
1706
+ 'XK_Ecircumflexacute' => 0x1001ebe,
1707
+ 'XK_ecircumflexacute' => 0x1001ebf,
1708
+ 'XK_Ecircumflexgrave' => 0x1001ec0,
1709
+ 'XK_ecircumflexgrave' => 0x1001ec1,
1710
+ 'XK_Ecircumflexhook' => 0x1001ec2,
1711
+ 'XK_ecircumflexhook' => 0x1001ec3,
1712
+ 'XK_Ecircumflextilde' => 0x1001ec4,
1713
+ 'XK_ecircumflextilde' => 0x1001ec5,
1714
+ 'XK_Ecircumflexbelowdot' => 0x1001ec6,
1715
+ 'XK_ecircumflexbelowdot' => 0x1001ec7,
1716
+ 'XK_Ihook' => 0x1001ec8,
1717
+ 'XK_ihook' => 0x1001ec9,
1718
+ 'XK_Ibelowdot' => 0x1001eca,
1719
+ 'XK_ibelowdot' => 0x1001ecb,
1720
+ 'XK_Obelowdot' => 0x1001ecc,
1721
+ 'XK_obelowdot' => 0x1001ecd,
1722
+ 'XK_Ohook' => 0x1001ece,
1723
+ 'XK_ohook' => 0x1001ecf,
1724
+ 'XK_Ocircumflexacute' => 0x1001ed0,
1725
+ 'XK_ocircumflexacute' => 0x1001ed1,
1726
+ 'XK_Ocircumflexgrave' => 0x1001ed2,
1727
+ 'XK_ocircumflexgrave' => 0x1001ed3,
1728
+ 'XK_Ocircumflexhook' => 0x1001ed4,
1729
+ 'XK_ocircumflexhook' => 0x1001ed5,
1730
+ 'XK_Ocircumflextilde' => 0x1001ed6,
1731
+ 'XK_ocircumflextilde' => 0x1001ed7,
1732
+ 'XK_Ocircumflexbelowdot' => 0x1001ed8,
1733
+ 'XK_ocircumflexbelowdot' => 0x1001ed9,
1734
+ 'XK_Ohornacute' => 0x1001eda,
1735
+ 'XK_ohornacute' => 0x1001edb,
1736
+ 'XK_Ohorngrave' => 0x1001edc,
1737
+ 'XK_ohorngrave' => 0x1001edd,
1738
+ 'XK_Ohornhook' => 0x1001ede,
1739
+ 'XK_ohornhook' => 0x1001edf,
1740
+ 'XK_Ohorntilde' => 0x1001ee0,
1741
+ 'XK_ohorntilde' => 0x1001ee1,
1742
+ 'XK_Ohornbelowdot' => 0x1001ee2,
1743
+ 'XK_ohornbelowdot' => 0x1001ee3,
1744
+ 'XK_Ubelowdot' => 0x1001ee4,
1745
+ 'XK_ubelowdot' => 0x1001ee5,
1746
+ 'XK_Uhook' => 0x1001ee6,
1747
+ 'XK_uhook' => 0x1001ee7,
1748
+ 'XK_Uhornacute' => 0x1001ee8,
1749
+ 'XK_uhornacute' => 0x1001ee9,
1750
+ 'XK_Uhorngrave' => 0x1001eea,
1751
+ 'XK_uhorngrave' => 0x1001eeb,
1752
+ 'XK_Uhornhook' => 0x1001eec,
1753
+ 'XK_uhornhook' => 0x1001eed,
1754
+ 'XK_Uhorntilde' => 0x1001eee,
1755
+ 'XK_uhorntilde' => 0x1001eef,
1756
+ 'XK_Uhornbelowdot' => 0x1001ef0,
1757
+ 'XK_uhornbelowdot' => 0x1001ef1,
1758
+ 'XK_Ybelowdot' => 0x1001ef4,
1759
+ 'XK_ybelowdot' => 0x1001ef5,
1760
+ 'XK_Yhook' => 0x1001ef6,
1761
+ 'XK_yhook' => 0x1001ef7,
1762
+ 'XK_Ytilde' => 0x1001ef8,
1763
+ 'XK_ytilde' => 0x1001ef9,
1764
+ 'XK_Ohorn' => 0x10001a0,
1765
+ 'XK_ohorn' => 0x10001a1,
1766
+ 'XK_Uhorn' => 0x10001af,
1767
+ 'XK_uhorn' => 0x10001b0,
1768
+ 'XK_EcuSign' => 0x10020a0,
1769
+ 'XK_ColonSign' => 0x10020a1,
1770
+ 'XK_CruzeiroSign' => 0x10020a2,
1771
+ 'XK_FFrancSign' => 0x10020a3,
1772
+ 'XK_LiraSign' => 0x10020a4,
1773
+ 'XK_MillSign' => 0x10020a5,
1774
+ 'XK_NairaSign' => 0x10020a6,
1775
+ 'XK_PesetaSign' => 0x10020a7,
1776
+ 'XK_RupeeSign' => 0x10020a8,
1777
+ 'XK_WonSign' => 0x10020a9,
1778
+ 'XK_NewSheqelSign' => 0x10020aa,
1779
+ 'XK_DongSign' => 0x10020ab,
1780
+ 'XK_EuroSign' => 0x20ac,
1781
+ 'XK_zerosuperior' => 0x1002070,
1782
+ 'XK_foursuperior' => 0x1002074,
1783
+ 'XK_fivesuperior' => 0x1002075,
1784
+ 'XK_sixsuperior' => 0x1002076,
1785
+ 'XK_sevensuperior' => 0x1002077,
1786
+ 'XK_eightsuperior' => 0x1002078,
1787
+ 'XK_ninesuperior' => 0x1002079,
1788
+ 'XK_zerosubscript' => 0x1002080,
1789
+ 'XK_onesubscript' => 0x1002081,
1790
+ 'XK_twosubscript' => 0x1002082,
1791
+ 'XK_threesubscript' => 0x1002083,
1792
+ 'XK_foursubscript' => 0x1002084,
1793
+ 'XK_fivesubscript' => 0x1002085,
1794
+ 'XK_sixsubscript' => 0x1002086,
1795
+ 'XK_sevensubscript' => 0x1002087,
1796
+ 'XK_eightsubscript' => 0x1002088,
1797
+ 'XK_ninesubscript' => 0x1002089,
1798
+ 'XK_partdifferential' => 0x1002202,
1799
+ 'XK_emptyset' => 0x1002205,
1800
+ 'XK_elementof' => 0x1002208,
1801
+ 'XK_notelementof' => 0x1002209,
1802
+ 'XK_containsas' => 0x100220,
1803
+ 'XK_squareroot' => 0x100221,
1804
+ 'XK_cuberoot' => 0x100221,
1805
+ 'XK_fourthroot' => 0x100221,
1806
+ 'XK_dintegral' => 0x100222,
1807
+ 'XK_tintegral' => 0x100222,
1808
+ 'XK_because' => 0x1002235,
1809
+ 'XK_approxeq' => 0x1002248,
1810
+ 'XK_notapproxeq' => 0x1002247,
1811
+ 'XK_notidentical' => 0x1002262,
1812
+ 'XK_stricteq' => 0x1002263,
1813
+ 'XK_braille_dot_1' => 0xfff1,
1814
+ 'XK_braille_dot_2' => 0xfff2,
1815
+ 'XK_braille_dot_3' => 0xfff3,
1816
+ 'XK_braille_dot_4' => 0xfff4,
1817
+ 'XK_braille_dot_5' => 0xfff5,
1818
+ 'XK_braille_dot_6' => 0xfff6,
1819
+ 'XK_braille_dot_7' => 0xfff7,
1820
+ 'XK_braille_dot_8' => 0xfff8,
1821
+ 'XK_braille_dot_9' => 0xfff9,
1822
+ 'XK_braille_dot_10' => 0xfffa,
1823
+ 'XK_braille_blank' => 0x1002800,
1824
+ 'XK_braille_dots_1' => 0x1002801,
1825
+ 'XK_braille_dots_2' => 0x1002802,
1826
+ 'XK_braille_dots_12' => 0x1002803,
1827
+ 'XK_braille_dots_3' => 0x1002804,
1828
+ 'XK_braille_dots_13' => 0x1002805,
1829
+ 'XK_braille_dots_23' => 0x1002806,
1830
+ 'XK_braille_dots_123' => 0x1002807,
1831
+ 'XK_braille_dots_4' => 0x1002808,
1832
+ 'XK_braille_dots_14' => 0x1002809,
1833
+ 'XK_braille_dots_24' => 0x100280a,
1834
+ 'XK_braille_dots_124' => 0x100280b,
1835
+ 'XK_braille_dots_34' => 0x100280c,
1836
+ 'XK_braille_dots_134' => 0x100280d,
1837
+ 'XK_braille_dots_234' => 0x100280e,
1838
+ 'XK_braille_dots_1234' => 0x100280f,
1839
+ 'XK_braille_dots_5' => 0x1002810,
1840
+ 'XK_braille_dots_15' => 0x1002811,
1841
+ 'XK_braille_dots_25' => 0x1002812,
1842
+ 'XK_braille_dots_125' => 0x1002813,
1843
+ 'XK_braille_dots_35' => 0x1002814,
1844
+ 'XK_braille_dots_135' => 0x1002815,
1845
+ 'XK_braille_dots_235' => 0x1002816,
1846
+ 'XK_braille_dots_1235' => 0x1002817,
1847
+ 'XK_braille_dots_45' => 0x1002818,
1848
+ 'XK_braille_dots_145' => 0x1002819,
1849
+ 'XK_braille_dots_245' => 0x100281a,
1850
+ 'XK_braille_dots_1245' => 0x100281b,
1851
+ 'XK_braille_dots_345' => 0x100281c,
1852
+ 'XK_braille_dots_1345' => 0x100281d,
1853
+ 'XK_braille_dots_2345' => 0x100281e,
1854
+ 'XK_braille_dots_12345' => 0x100281f,
1855
+ 'XK_braille_dots_6' => 0x1002820,
1856
+ 'XK_braille_dots_16' => 0x1002821,
1857
+ 'XK_braille_dots_26' => 0x1002822,
1858
+ 'XK_braille_dots_126' => 0x1002823,
1859
+ 'XK_braille_dots_36' => 0x1002824,
1860
+ 'XK_braille_dots_136' => 0x1002825,
1861
+ 'XK_braille_dots_236' => 0x1002826,
1862
+ 'XK_braille_dots_1236' => 0x1002827,
1863
+ 'XK_braille_dots_46' => 0x1002828,
1864
+ 'XK_braille_dots_146' => 0x1002829,
1865
+ 'XK_braille_dots_246' => 0x100282a,
1866
+ 'XK_braille_dots_1246' => 0x100282b,
1867
+ 'XK_braille_dots_346' => 0x100282c,
1868
+ 'XK_braille_dots_1346' => 0x100282d,
1869
+ 'XK_braille_dots_2346' => 0x100282e,
1870
+ 'XK_braille_dots_12346' => 0x100282f,
1871
+ 'XK_braille_dots_56' => 0x1002830,
1872
+ 'XK_braille_dots_156' => 0x1002831,
1873
+ 'XK_braille_dots_256' => 0x1002832,
1874
+ 'XK_braille_dots_1256' => 0x1002833,
1875
+ 'XK_braille_dots_356' => 0x1002834,
1876
+ 'XK_braille_dots_1356' => 0x1002835,
1877
+ 'XK_braille_dots_2356' => 0x1002836,
1878
+ 'XK_braille_dots_12356' => 0x1002837,
1879
+ 'XK_braille_dots_456' => 0x1002838,
1880
+ 'XK_braille_dots_1456' => 0x1002839,
1881
+ 'XK_braille_dots_2456' => 0x100283a,
1882
+ 'XK_braille_dots_12456' => 0x100283b,
1883
+ 'XK_braille_dots_3456' => 0x100283c,
1884
+ 'XK_braille_dots_13456' => 0x100283d,
1885
+ 'XK_braille_dots_23456' => 0x100283e,
1886
+ 'XK_braille_dots_123456' => 0x100283f,
1887
+ 'XK_braille_dots_7' => 0x1002840,
1888
+ 'XK_braille_dots_17' => 0x1002841,
1889
+ 'XK_braille_dots_27' => 0x1002842,
1890
+ 'XK_braille_dots_127' => 0x1002843,
1891
+ 'XK_braille_dots_37' => 0x1002844,
1892
+ 'XK_braille_dots_137' => 0x1002845,
1893
+ 'XK_braille_dots_237' => 0x1002846,
1894
+ 'XK_braille_dots_1237' => 0x1002847,
1895
+ 'XK_braille_dots_47' => 0x1002848,
1896
+ 'XK_braille_dots_147' => 0x1002849,
1897
+ 'XK_braille_dots_247' => 0x100284a,
1898
+ 'XK_braille_dots_1247' => 0x100284b,
1899
+ 'XK_braille_dots_347' => 0x100284c,
1900
+ 'XK_braille_dots_1347' => 0x100284d,
1901
+ 'XK_braille_dots_2347' => 0x100284e,
1902
+ 'XK_braille_dots_12347' => 0x100284f,
1903
+ 'XK_braille_dots_57' => 0x1002850,
1904
+ 'XK_braille_dots_157' => 0x1002851,
1905
+ 'XK_braille_dots_257' => 0x1002852,
1906
+ 'XK_braille_dots_1257' => 0x1002853,
1907
+ 'XK_braille_dots_357' => 0x1002854,
1908
+ 'XK_braille_dots_1357' => 0x1002855,
1909
+ 'XK_braille_dots_2357' => 0x1002856,
1910
+ 'XK_braille_dots_12357' => 0x1002857,
1911
+ 'XK_braille_dots_457' => 0x1002858,
1912
+ 'XK_braille_dots_1457' => 0x1002859,
1913
+ 'XK_braille_dots_2457' => 0x100285a,
1914
+ 'XK_braille_dots_12457' => 0x100285b,
1915
+ 'XK_braille_dots_3457' => 0x100285c,
1916
+ 'XK_braille_dots_13457' => 0x100285d,
1917
+ 'XK_braille_dots_23457' => 0x100285e,
1918
+ 'XK_braille_dots_123457' => 0x100285f,
1919
+ 'XK_braille_dots_67' => 0x1002860,
1920
+ 'XK_braille_dots_167' => 0x10