Class: X11Client

Inherits:
Object
  • Object
show all
Defined in:
lib/x11_client.rb,
lib/x11_client/keysym.rb,
ext/x11_client_ext/x11_client_ext.c

Constant Summary collapse

KEYSYM =
{

  # /usr/include/X11/DECkeysym.h
  'DXK_ring_accent'                        => 0x1000,
  'DXK_circumflex_accent'                  => 0x1000,
  'DXK_cedilla_accent'                     => 0x1000,
  'DXK_acute_accent'                       => 0x1000,
  'DXK_grave_accent'                       => 0x1000,
  'DXK_tilde'                              => 0x1000,
  'DXK_diaeresis'                          => 0x1000,
  'DXK_Remove'                             => 0x1000,

  # /usr/include/X11/Sunkeysym.h
  'SunXK_FA_Grave'                         => 0x1005,
  'SunXK_FA_Circum'                        => 0x1005,
  'SunXK_FA_Tilde'                         => 0x1005,
  'SunXK_FA_Acute'                         => 0x1005,
  'SunXK_FA_Diaeresis'                     => 0x1005,
  'SunXK_FA_Cedilla'                       => 0x1005,
  'SunXK_F36'                              => 0x1005,
  'SunXK_F37'                              => 0x1005,
  'SunXK_Sys_Req'                          => 0x1005,
  'SunXK_Print_Screen'                     => 0x0000,
  'SunXK_Compose'                          => 0x0000,
  'SunXK_AltGraph'                         => 0x0000,
  'SunXK_PageUp'                           => 0x0000,
  'SunXK_PageDown'                         => 0x0000,
  'SunXK_Undo'                             => 0x0000,
  'SunXK_Again'                            => 0x0000,
  'SunXK_Find'                             => 0x0000,
  'SunXK_Stop'                             => 0x0000,
  'SunXK_Props'                            => 0x1005,
  'SunXK_Front'                            => 0x1005,
  'SunXK_Copy'                             => 0x1005,
  'SunXK_Open'                             => 0x1005,
  'SunXK_Paste'                            => 0x1005,
  'SunXK_Cut'                              => 0x1005,
  'SunXK_PowerSwitch'                      => 0x1005,
  'SunXK_AudioLowerVolume'                 => 0x1005,
  'SunXK_AudioMute'                        => 0x1005,
  'SunXK_AudioRaiseVolume'                 => 0x1005,
  'SunXK_VideoDegauss'                     => 0x1005,
  'SunXK_VideoLowerBrightness'             => 0x1005,
  'SunXK_VideoRaiseBrightness'             => 0x1005,
  'SunXK_PowerSwitchShift'                 => 0x1005,

  # /usr/include/X11/ap_keysym.h
  'apXK_LineDel'                           => 0x1000,
  'apXK_CharDel'                           => 0x1000,
  'apXK_Copy'                              => 0x1000,
  'apXK_Cut'                               => 0x1000,
  'apXK_Paste'                             => 0x1000,
  'apXK_Move'                              => 0x1000,
  'apXK_Grow'                              => 0x1000,
  'apXK_Cmd'                               => 0x1000,
  'apXK_Shell'                             => 0x1000,
  'apXK_LeftBar'                           => 0x1000,
  'apXK_RightBar'                          => 0x1000,
  'apXK_LeftBox'                           => 0x1000,
  'apXK_RightBox'                          => 0x1000,
  'apXK_UpBox'                             => 0x1000,
  'apXK_DownBox'                           => 0x1000,
  'apXK_Pop'                               => 0x1000,
  'apXK_Read'                              => 0x1000,
  'apXK_Edit'                              => 0x1000,
  'apXK_Save'                              => 0x1000,
  'apXK_Exit'                              => 0x1000,
  'apXK_Repeat'                            => 0x1000,
  'apXK_KP_parenleft'                      => 0x1000,
  'apXK_KP_parenright'                     => 0x1000,

  # /usr/include/X11/keysymdef.h
  'XK_VoidSymbol'                          => 0xffffff,
  'XK_BackSpace'                           => 0xff08,
  'XK_Tab'                                 => 0xff09,
  'XK_Linefeed'                            => 0xff0a,
  'XK_Clear'                               => 0xff0b,
  'XK_Return'                              => 0xff0d,
  'XK_Pause'                               => 0xff13,
  'XK_Scroll_Lock'                         => 0xff14,
  'XK_Sys_Req'                             => 0xff15,
  'XK_Escape'                              => 0xff1b,
  'XK_Delete'                              => 0xffff,
  'XK_Multi_key'                           => 0xff20,
  'XK_Codeinput'                           => 0xff37,
  'XK_SingleCandidate'                     => 0xff3c,
  'XK_MultipleCandidate'                   => 0xff3d,
  'XK_PreviousCandidate'                   => 0xff3e,
  'XK_Kanji'                               => 0xff21,
  'XK_Muhenkan'                            => 0xff22,
  'XK_Henkan_Mode'                         => 0xff23,
  'XK_Henkan'                              => 0xff23,
  'XK_Romaji'                              => 0xff24,
  'XK_Hiragana'                            => 0xff25,
  'XK_Katakana'                            => 0xff26,
  'XK_Hiragana_Katakana'                   => 0xff27,
  'XK_Zenkaku'                             => 0xff28,
  'XK_Hankaku'                             => 0xff29,
  'XK_Zenkaku_Hankaku'                     => 0xff2a,
  'XK_Touroku'                             => 0xff2b,
  'XK_Massyo'                              => 0xff2c,
  'XK_Kana_Lock'                           => 0xff2d,
  'XK_Kana_Shift'                          => 0xff2e,
  'XK_Eisu_Shift'                          => 0xff2f,
  'XK_Eisu_toggle'                         => 0xff30,
  'XK_Kanji_Bangou'                        => 0xff37,
  'XK_Zen_Koho'                            => 0xff3d,
  'XK_Mae_Koho'                            => 0xff3e,
  'XK_Home'                                => 0xff50,
  'XK_Left'                                => 0xff51,
  'XK_Up'                                  => 0xff52,
  'XK_Right'                               => 0xff53,
  'XK_Down'                                => 0xff54,
  'XK_Prior'                               => 0xff55,
  'XK_Page_Up'                             => 0xff55,
  'XK_Next'                                => 0xff56,
  'XK_Page_Down'                           => 0xff56,
  'XK_End'                                 => 0xff57,
  'XK_Begin'                               => 0xff58,
  'XK_Select'                              => 0xff60,
  'XK_Print'                               => 0xff61,
  'XK_Execute'                             => 0xff62,
  'XK_Insert'                              => 0xff63,
  'XK_Undo'                                => 0xff65,
  'XK_Redo'                                => 0xff66,
  'XK_Menu'                                => 0xff67,
  'XK_Find'                                => 0xff68,
  'XK_Cancel'                              => 0xff69,
  'XK_Help'                                => 0xff6a,
  'XK_Break'                               => 0xff6b,
  'XK_Mode_switch'                         => 0xff7e,
  'XK_script_switch'                       => 0xff7e,
  'XK_Num_Lock'                            => 0xff7f,
  'XK_KP_Space'                            => 0xff80,
  'XK_KP_Tab'                              => 0xff89,
  'XK_KP_Enter'                            => 0xff8d,
  'XK_KP_F1'                               => 0xff91,
  'XK_KP_F2'                               => 0xff92,
  'XK_KP_F3'                               => 0xff93,
  'XK_KP_F4'                               => 0xff94,
  'XK_KP_Home'                             => 0xff95,
  'XK_KP_Left'                             => 0xff96,
  'XK_KP_Up'                               => 0xff97,
  'XK_KP_Right'                            => 0xff98,
  'XK_KP_Down'                             => 0xff99,
  'XK_KP_Prior'                            => 0xff9a,
  'XK_KP_Page_Up'                          => 0xff9a,
  'XK_KP_Next'                             => 0xff9b,
  'XK_KP_Page_Down'                        => 0xff9b,
  'XK_KP_End'                              => 0xff9c,
  'XK_KP_Begin'                            => 0xff9d,
  'XK_KP_Insert'                           => 0xff9e,
  'XK_KP_Delete'                           => 0xff9f,
  'XK_KP_Equal'                            => 0xffbd,
  'XK_KP_Multiply'                         => 0xffaa,
  'XK_KP_Add'                              => 0xffab,
  'XK_KP_Separator'                        => 0xffac,
  'XK_KP_Subtract'                         => 0xffad,
  'XK_KP_Decimal'                          => 0xffae,
  'XK_KP_Divide'                           => 0xffaf,
  'XK_KP_0'                                => 0xffb0,
  'XK_KP_1'                                => 0xffb1,
  'XK_KP_2'                                => 0xffb2,
  'XK_KP_3'                                => 0xffb3,
  'XK_KP_4'                                => 0xffb4,
  'XK_KP_5'                                => 0xffb5,
  'XK_KP_6'                                => 0xffb6,
  'XK_KP_7'                                => 0xffb7,
  'XK_KP_8'                                => 0xffb8,
  'XK_KP_9'                                => 0xffb9,
  'XK_F1'                                  => 0xffbe,
  'XK_F2'                                  => 0xffbf,
  'XK_F3'                                  => 0xffc0,
  'XK_F4'                                  => 0xffc1,
  'XK_F5'                                  => 0xffc2,
  'XK_F6'                                  => 0xffc3,
  'XK_F7'                                  => 0xffc4,
  'XK_F8'                                  => 0xffc5,
  'XK_F9'                                  => 0xffc6,
  'XK_F10'                                 => 0xffc7,
  'XK_F11'                                 => 0xffc8,
  'XK_L1'                                  => 0xffc8,
  'XK_F12'                                 => 0xffc9,
  'XK_L2'                                  => 0xffc9,
  'XK_F13'                                 => 0xffca,
  'XK_L3'                                  => 0xffca,
  'XK_F14'                                 => 0xffcb,
  'XK_L4'                                  => 0xffcb,
  'XK_F15'                                 => 0xffcc,
  'XK_L5'                                  => 0xffcc,
  'XK_F16'                                 => 0xffcd,
  'XK_L6'                                  => 0xffcd,
  'XK_F17'                                 => 0xffce,
  'XK_L7'                                  => 0xffce,
  'XK_F18'                                 => 0xffcf,
  'XK_L8'                                  => 0xffcf,
  'XK_F19'                                 => 0xffd0,
  'XK_L9'                                  => 0xffd0,
  'XK_F20'                                 => 0xffd1,
  'XK_L10'                                 => 0xffd1,
  'XK_F21'                                 => 0xffd2,
  'XK_R1'                                  => 0xffd2,
  'XK_F22'                                 => 0xffd3,
  'XK_R2'                                  => 0xffd3,
  'XK_F23'                                 => 0xffd4,
  'XK_R3'                                  => 0xffd4,
  'XK_F24'                                 => 0xffd5,
  'XK_R4'                                  => 0xffd5,
  'XK_F25'                                 => 0xffd6,
  'XK_R5'                                  => 0xffd6,
  'XK_F26'                                 => 0xffd7,
  'XK_R6'                                  => 0xffd7,
  'XK_F27'                                 => 0xffd8,
  'XK_R7'                                  => 0xffd8,
  'XK_F28'                                 => 0xffd9,
  'XK_R8'                                  => 0xffd9,
  'XK_F29'                                 => 0xffda,
  'XK_R9'                                  => 0xffda,
  'XK_F30'                                 => 0xffdb,
  'XK_R10'                                 => 0xffdb,
  'XK_F31'                                 => 0xffdc,
  'XK_R11'                                 => 0xffdc,
  'XK_F32'                                 => 0xffdd,
  'XK_R12'                                 => 0xffdd,
  'XK_F33'                                 => 0xffde,
  'XK_R13'                                 => 0xffde,
  'XK_F34'                                 => 0xffdf,
  'XK_R14'                                 => 0xffdf,
  'XK_F35'                                 => 0xffe0,
  'XK_R15'                                 => 0xffe0,
  'XK_Shift_L'                             => 0xffe1,
  'XK_Shift_R'                             => 0xffe2,
  'XK_Control_L'                           => 0xffe3,
  'XK_Control_R'                           => 0xffe4,
  'XK_Caps_Lock'                           => 0xffe5,
  'XK_Shift_Lock'                          => 0xffe6,
  'XK_Meta_L'                              => 0xffe7,
  'XK_Meta_R'                              => 0xffe8,
  'XK_Alt_L'                               => 0xffe9,
  'XK_Alt_R'                               => 0xffea,
  'XK_Super_L'                             => 0xffeb,
  'XK_Super_R'                             => 0xffec,
  'XK_Hyper_L'                             => 0xffed,
  'XK_Hyper_R'                             => 0xffee,
  'XK_ISO_Lock'                            => 0xfe01,
  'XK_ISO_Level2_Latch'                    => 0xfe02,
  'XK_ISO_Level3_Shift'                    => 0xfe03,
  'XK_ISO_Level3_Latch'                    => 0xfe04,
  'XK_ISO_Level3_Lock'                     => 0xfe05,
  'XK_ISO_Level5_Shift'                    => 0xfe11,
  'XK_ISO_Level5_Latch'                    => 0xfe12,
  'XK_ISO_Level5_Lock'                     => 0xfe13,
  'XK_ISO_Group_Shift'                     => 0xff7e,
  'XK_ISO_Group_Latch'                     => 0xfe06,
  'XK_ISO_Group_Lock'                      => 0xfe07,
  'XK_ISO_Next_Group'                      => 0xfe08,
  'XK_ISO_Next_Group_Lock'                 => 0xfe09,
  'XK_ISO_Prev_Group'                      => 0xfe0a,
  'XK_ISO_Prev_Group_Lock'                 => 0xfe0b,
  'XK_ISO_First_Group'                     => 0xfe0c,
  'XK_ISO_First_Group_Lock'                => 0xfe0d,
  'XK_ISO_Last_Group'                      => 0xfe0e,
  'XK_ISO_Last_Group_Lock'                 => 0xfe0f,
  'XK_ISO_Left_Tab'                        => 0xfe20,
  'XK_ISO_Move_Line_Up'                    => 0xfe21,
  'XK_ISO_Move_Line_Down'                  => 0xfe22,
  'XK_ISO_Partial_Line_Up'                 => 0xfe23,
  'XK_ISO_Partial_Line_Down'               => 0xfe24,
  'XK_ISO_Partial_Space_Left'              => 0xfe25,
  'XK_ISO_Partial_Space_Right'             => 0xfe26,
  'XK_ISO_Set_Margin_Left'                 => 0xfe27,
  'XK_ISO_Set_Margin_Right'                => 0xfe28,
  'XK_ISO_Release_Margin_Left'             => 0xfe29,
  'XK_ISO_Release_Margin_Right'            => 0xfe2a,
  'XK_ISO_Release_Both_Margins'            => 0xfe2b,
  'XK_ISO_Fast_Cursor_Left'                => 0xfe2c,
  'XK_ISO_Fast_Cursor_Right'               => 0xfe2d,
  'XK_ISO_Fast_Cursor_Up'                  => 0xfe2e,
  'XK_ISO_Fast_Cursor_Down'                => 0xfe2f,
  'XK_ISO_Continuous_Underline'            => 0xfe30,
  'XK_ISO_Discontinuous_Underline'         => 0xfe31,
  'XK_ISO_Emphasize'                       => 0xfe32,
  'XK_ISO_Center_Object'                   => 0xfe33,
  'XK_ISO_Enter'                           => 0xfe34,
  'XK_dead_grave'                          => 0xfe50,
  'XK_dead_acute'                          => 0xfe51,
  'XK_dead_circumflex'                     => 0xfe52,
  'XK_dead_tilde'                          => 0xfe53,
  'XK_dead_perispomeni'                    => 0xfe53,
  'XK_dead_macron'                         => 0xfe54,
  'XK_dead_breve'                          => 0xfe55,
  'XK_dead_abovedot'                       => 0xfe56,
  'XK_dead_diaeresis'                      => 0xfe57,
  'XK_dead_abovering'                      => 0xfe58,
  'XK_dead_doubleacute'                    => 0xfe59,
  'XK_dead_caron'                          => 0xfe5a,
  'XK_dead_cedilla'                        => 0xfe5b,
  'XK_dead_ogonek'                         => 0xfe5c,
  'XK_dead_iota'                           => 0xfe5d,
  'XK_dead_voiced_sound'                   => 0xfe5e,
  'XK_dead_semivoiced_sound'               => 0xfe5f,
  'XK_dead_belowdot'                       => 0xfe60,
  'XK_dead_hook'                           => 0xfe61,
  'XK_dead_horn'                           => 0xfe62,
  'XK_dead_stroke'                         => 0xfe63,
  'XK_dead_abovecomma'                     => 0xfe64,
  'XK_dead_psili'                          => 0xfe64,
  'XK_dead_abovereversedcomma'             => 0xfe65,
  'XK_dead_dasia'                          => 0xfe65,
  'XK_dead_doublegrave'                    => 0xfe66,
  'XK_dead_belowring'                      => 0xfe67,
  'XK_dead_belowmacron'                    => 0xfe68,
  'XK_dead_belowcircumflex'                => 0xfe69,
  'XK_dead_belowtilde'                     => 0xfe6a,
  'XK_dead_belowbreve'                     => 0xfe6b,
  'XK_dead_belowdiaeresis'                 => 0xfe6c,
  'XK_dead_invertedbreve'                  => 0xfe6d,
  'XK_dead_belowcomma'                     => 0xfe6e,
  'XK_dead_currency'                       => 0xfe6f,
  'XK_dead_a'                              => 0xfe80,
  'XK_dead_A'                              => 0xfe81,
  'XK_dead_e'                              => 0xfe82,
  'XK_dead_E'                              => 0xfe83,
  'XK_dead_i'                              => 0xfe84,
  'XK_dead_I'                              => 0xfe85,
  'XK_dead_o'                              => 0xfe86,
  'XK_dead_O'                              => 0xfe87,
  'XK_dead_u'                              => 0xfe88,
  'XK_dead_U'                              => 0xfe89,
  'XK_dead_small_schwa'                    => 0xfe8a,
  'XK_dead_capital_schwa'                  => 0xfe8b,
  'XK_First_Virtual_Screen'                => 0xfed0,
  'XK_Prev_Virtual_Screen'                 => 0xfed1,
  'XK_Next_Virtual_Screen'                 => 0xfed2,
  'XK_Last_Virtual_Screen'                 => 0xfed4,
  'XK_Terminate_Server'                    => 0xfed5,
  'XK_AccessX_Enable'                      => 0xfe70,
  'XK_AccessX_Feedback_Enable'             => 0xfe71,
  'XK_RepeatKeys_Enable'                   => 0xfe72,
  'XK_SlowKeys_Enable'                     => 0xfe73,
  'XK_BounceKeys_Enable'                   => 0xfe74,
  'XK_StickyKeys_Enable'                   => 0xfe75,
  'XK_MouseKeys_Enable'                    => 0xfe76,
  'XK_MouseKeys_Accel_Enable'              => 0xfe77,
  'XK_Overlay1_Enable'                     => 0xfe78,
  'XK_Overlay2_Enable'                     => 0xfe79,
  'XK_AudibleBell_Enable'                  => 0xfe7a,
  'XK_Pointer_Left'                        => 0xfee0,
  'XK_Pointer_Right'                       => 0xfee1,
  'XK_Pointer_Up'                          => 0xfee2,
  'XK_Pointer_Down'                        => 0xfee3,
  'XK_Pointer_UpLeft'                      => 0xfee4,
  'XK_Pointer_UpRight'                     => 0xfee5,
  'XK_Pointer_DownLeft'                    => 0xfee6,
  'XK_Pointer_DownRight'                   => 0xfee7,
  'XK_Pointer_Button_Dflt'                 => 0xfee8,
  'XK_Pointer_Button1'                     => 0xfee9,
  'XK_Pointer_Button2'                     => 0xfeea,
  'XK_Pointer_Button3'                     => 0xfeeb,
  'XK_Pointer_Button4'                     => 0xfeec,
  'XK_Pointer_Button5'                     => 0xfeed,
  'XK_Pointer_DblClick_Dflt'               => 0xfeee,
  'XK_Pointer_DblClick1'                   => 0xfeef,
  'XK_Pointer_DblClick2'                   => 0xfef0,
  'XK_Pointer_DblClick3'                   => 0xfef1,
  'XK_Pointer_DblClick4'                   => 0xfef2,
  'XK_Pointer_DblClick5'                   => 0xfef3,
  'XK_Pointer_Drag_Dflt'                   => 0xfef4,
  'XK_Pointer_Drag1'                       => 0xfef5,
  'XK_Pointer_Drag2'                       => 0xfef6,
  'XK_Pointer_Drag3'                       => 0xfef7,
  'XK_Pointer_Drag4'                       => 0xfef8,
  'XK_Pointer_Drag5'                       => 0xfefd,
  'XK_Pointer_EnableKeys'                  => 0xfef9,
  'XK_Pointer_Accelerate'                  => 0xfefa,
  'XK_Pointer_DfltBtnNext'                 => 0xfefb,
  'XK_Pointer_DfltBtnPrev'                 => 0xfefc,
  'XK_3270_Duplicate'                      => 0xfd01,
  'XK_3270_FieldMark'                      => 0xfd02,
  'XK_3270_Right2'                         => 0xfd03,
  'XK_3270_Left2'                          => 0xfd04,
  'XK_3270_BackTab'                        => 0xfd05,
  'XK_3270_EraseEOF'                       => 0xfd06,
  'XK_3270_EraseInput'                     => 0xfd07,
  'XK_3270_Reset'                          => 0xfd08,
  'XK_3270_Quit'                           => 0xfd09,
  'XK_3270_PA1'                            => 0xfd0a,
  'XK_3270_PA2'                            => 0xfd0b,
  'XK_3270_PA3'                            => 0xfd0c,
  'XK_3270_Test'                           => 0xfd0d,
  'XK_3270_Attn'                           => 0xfd0e,
  'XK_3270_CursorBlink'                    => 0xfd0f,
  'XK_3270_AltCursor'                      => 0xfd10,
  'XK_3270_KeyClick'                       => 0xfd11,
  'XK_3270_Jump'                           => 0xfd12,
  'XK_3270_Ident'                          => 0xfd13,
  'XK_3270_Rule'                           => 0xfd14,
  'XK_3270_Copy'                           => 0xfd15,
  'XK_3270_Play'                           => 0xfd16,
  'XK_3270_Setup'                          => 0xfd17,
  'XK_3270_Record'                         => 0xfd18,
  'XK_3270_ChangeScreen'                   => 0xfd19,
  'XK_3270_DeleteWord'                     => 0xfd1a,
  'XK_3270_ExSelect'                       => 0xfd1b,
  'XK_3270_CursorSelect'                   => 0xfd1c,
  'XK_3270_PrintScreen'                    => 0xfd1d,
  'XK_3270_Enter'                          => 0xfd1e,
  'XK_space'                               => 0x0020,
  'XK_exclam'                              => 0x0021,
  'XK_quotedbl'                            => 0x0022,
  'XK_numbersign'                          => 0x0023,
  'XK_dollar'                              => 0x0024,
  'XK_percent'                             => 0x0025,
  'XK_ampersand'                           => 0x0026,
  'XK_apostrophe'                          => 0x0027,
  'XK_quoteright'                          => 0x0027,
  'XK_parenleft'                           => 0x0028,
  'XK_parenright'                          => 0x0029,
  'XK_asterisk'                            => 0x002a,
  'XK_plus'                                => 0x002b,
  'XK_comma'                               => 0x002c,
  'XK_minus'                               => 0x002d,
  'XK_period'                              => 0x002e,
  'XK_slash'                               => 0x002f,
  'XK_0'                                   => 0x0030,
  'XK_1'                                   => 0x0031,
  'XK_2'                                   => 0x0032,
  'XK_3'                                   => 0x0033,
  'XK_4'                                   => 0x0034,
  'XK_5'                                   => 0x0035,
  'XK_6'                                   => 0x0036,
  'XK_7'                                   => 0x0037,
  'XK_8'                                   => 0x0038,
  'XK_9'                                   => 0x0039,
  'XK_colon'                               => 0x003a,
  'XK_semicolon'                           => 0x003b,
  'XK_less'                                => 0x003c,
  'XK_equal'                               => 0x003d,
  'XK_greater'                             => 0x003e,
  'XK_question'                            => 0x003f,
  'XK_at'                                  => 0x0040,
  'XK_A'                                   => 0x0041,
  'XK_B'                                   => 0x0042,
  'XK_C'                                   => 0x0043,
  'XK_D'                                   => 0x0044,
  'XK_E'                                   => 0x0045,
  'XK_F'                                   => 0x0046,
  'XK_G'                                   => 0x0047,
  'XK_H'                                   => 0x0048,
  'XK_I'                                   => 0x0049,
  'XK_J'                                   => 0x004a,
  'XK_K'                                   => 0x004b,
  'XK_L'                                   => 0x004c,
  'XK_M'                                   => 0x004d,
  'XK_N'                                   => 0x004e,
  'XK_O'                                   => 0x004f,
  'XK_P'                                   => 0x0050,
  'XK_Q'                                   => 0x0051,
  'XK_R'                                   => 0x0052,
  'XK_S'                                   => 0x0053,
  'XK_T'                                   => 0x0054,
  'XK_U'                                   => 0x0055,
  'XK_V'                                   => 0x0056,
  'XK_W'                                   => 0x0057,
  'XK_X'                                   => 0x0058,
  'XK_Y'                                   => 0x0059,
  'XK_Z'                                   => 0x005a,
  'XK_bracketleft'                         => 0x005b,
  'XK_backslash'                           => 0x005c,
  'XK_bracketright'                        => 0x005d,
  'XK_asciicircum'                         => 0x005e,
  'XK_underscore'                          => 0x005f,
  'XK_grave'                               => 0x0060,
  'XK_quoteleft'                           => 0x0060,
  'XK_a'                                   => 0x0061,
  'XK_b'                                   => 0x0062,
  'XK_c'                                   => 0x0063,
  'XK_d'                                   => 0x0064,
  'XK_e'                                   => 0x0065,
  'XK_f'                                   => 0x0066,
  'XK_g'                                   => 0x0067,
  'XK_h'                                   => 0x0068,
  'XK_i'                                   => 0x0069,
  'XK_j'                                   => 0x006a,
  'XK_k'                                   => 0x006b,
  'XK_l'                                   => 0x006c,
  'XK_m'                                   => 0x006d,
  'XK_n'                                   => 0x006e,
  'XK_o'                                   => 0x006f,
  'XK_p'                                   => 0x0070,
  'XK_q'                                   => 0x0071,
  'XK_r'                                   => 0x0072,
  'XK_s'                                   => 0x0073,
  'XK_t'                                   => 0x0074,
  'XK_u'                                   => 0x0075,
  'XK_v'                                   => 0x0076,
  'XK_w'                                   => 0x0077,
  'XK_x'                                   => 0x0078,
  'XK_y'                                   => 0x0079,
  'XK_z'                                   => 0x007a,
  'XK_braceleft'                           => 0x007b,
  'XK_bar'                                 => 0x007c,
  'XK_braceright'                          => 0x007d,
  'XK_asciitilde'                          => 0x007e,
  'XK_nobreakspace'                        => 0x00a0,
  'XK_exclamdown'                          => 0x00a1,
  'XK_cent'                                => 0x00a2,
  'XK_sterling'                            => 0x00a3,
  'XK_currency'                            => 0x00a4,
  'XK_yen'                                 => 0x00a5,
  'XK_brokenbar'                           => 0x00a6,
  'XK_section'                             => 0x00a7,
  'XK_diaeresis'                           => 0x00a8,
  'XK_copyright'                           => 0x00a9,
  'XK_ordfeminine'                         => 0x00aa,
  'XK_guillemotleft'                       => 0x00ab,
  'XK_notsign'                             => 0x00ac,
  'XK_hyphen'                              => 0x00ad,
  'XK_registered'                          => 0x00ae,
  'XK_macron'                              => 0x00af,
  'XK_degree'                              => 0x00b0,
  'XK_plusminus'                           => 0x00b1,
  'XK_twosuperior'                         => 0x00b2,
  'XK_threesuperior'                       => 0x00b3,
  'XK_acute'                               => 0x00b4,
  'XK_mu'                                  => 0x00b5,
  'XK_paragraph'                           => 0x00b6,
  'XK_periodcentered'                      => 0x00b7,
  'XK_cedilla'                             => 0x00b8,
  'XK_onesuperior'                         => 0x00b9,
  'XK_masculine'                           => 0x00ba,
  'XK_guillemotright'                      => 0x00bb,
  'XK_onequarter'                          => 0x00bc,
  'XK_onehalf'                             => 0x00bd,
  'XK_threequarters'                       => 0x00be,
  'XK_questiondown'                        => 0x00bf,
  'XK_Agrave'                              => 0x00c0,
  'XK_Aacute'                              => 0x00c1,
  'XK_Acircumflex'                         => 0x00c2,
  'XK_Atilde'                              => 0x00c3,
  'XK_Adiaeresis'                          => 0x00c4,
  'XK_Aring'                               => 0x00c5,
  'XK_AE'                                  => 0x00c6,
  'XK_Ccedilla'                            => 0x00c7,
  'XK_Egrave'                              => 0x00c8,
  'XK_Eacute'                              => 0x00c9,
  'XK_Ecircumflex'                         => 0x00ca,
  'XK_Ediaeresis'                          => 0x00cb,
  'XK_Igrave'                              => 0x00cc,
  'XK_Iacute'                              => 0x00cd,
  'XK_Icircumflex'                         => 0x00ce,
  'XK_Idiaeresis'                          => 0x00cf,
  'XK_ETH'                                 => 0x00d0,
  'XK_Eth'                                 => 0x00d0,
  'XK_Ntilde'                              => 0x00d1,
  'XK_Ograve'                              => 0x00d2,
  'XK_Oacute'                              => 0x00d3,
  'XK_Ocircumflex'                         => 0x00d4,
  'XK_Otilde'                              => 0x00d5,
  'XK_Odiaeresis'                          => 0x00d6,
  'XK_multiply'                            => 0x00d7,
  'XK_Oslash'                              => 0x00d8,
  'XK_Ooblique'                            => 0x00d8,
  'XK_Ugrave'                              => 0x00d9,
  'XK_Uacute'                              => 0x00da,
  'XK_Ucircumflex'                         => 0x00db,
  'XK_Udiaeresis'                          => 0x00dc,
  'XK_Yacute'                              => 0x00dd,
  'XK_THORN'                               => 0x00de,
  'XK_Thorn'                               => 0x00de,
  'XK_ssharp'                              => 0x00df,
  'XK_agrave'                              => 0x00e0,
  'XK_aacute'                              => 0x00e1,
  'XK_acircumflex'                         => 0x00e2,
  'XK_atilde'                              => 0x00e3,
  'XK_adiaeresis'                          => 0x00e4,
  'XK_aring'                               => 0x00e5,
  'XK_ae'                                  => 0x00e6,
  'XK_ccedilla'                            => 0x00e7,
  'XK_egrave'                              => 0x00e8,
  'XK_eacute'                              => 0x00e9,
  'XK_ecircumflex'                         => 0x00ea,
  'XK_ediaeresis'                          => 0x00eb,
  'XK_igrave'                              => 0x00ec,
  'XK_iacute'                              => 0x00ed,
  'XK_icircumflex'                         => 0x00ee,
  'XK_idiaeresis'                          => 0x00ef,
  'XK_eth'                                 => 0x00f0,
  'XK_ntilde'                              => 0x00f1,
  'XK_ograve'                              => 0x00f2,
  'XK_oacute'                              => 0x00f3,
  'XK_ocircumflex'                         => 0x00f4,
  'XK_otilde'                              => 0x00f5,
  'XK_odiaeresis'                          => 0x00f6,
  'XK_division'                            => 0x00f7,
  'XK_oslash'                              => 0x00f8,
  'XK_ooblique'                            => 0x00f8,
  'XK_ugrave'                              => 0x00f9,
  'XK_uacute'                              => 0x00fa,
  'XK_ucircumflex'                         => 0x00fb,
  'XK_udiaeresis'                          => 0x00fc,
  'XK_yacute'                              => 0x00fd,
  'XK_thorn'                               => 0x00fe,
  'XK_ydiaeresis'                          => 0x00ff,
  'XK_Aogonek'                             => 0x01a1,
  'XK_breve'                               => 0x01a2,
  'XK_Lstroke'                             => 0x01a3,
  'XK_Lcaron'                              => 0x01a5,
  'XK_Sacute'                              => 0x01a6,
  'XK_Scaron'                              => 0x01a9,
  'XK_Scedilla'                            => 0x01aa,
  'XK_Tcaron'                              => 0x01ab,
  'XK_Zacute'                              => 0x01ac,
  'XK_Zcaron'                              => 0x01ae,
  'XK_Zabovedot'                           => 0x01af,
  'XK_aogonek'                             => 0x01b1,
  'XK_ogonek'                              => 0x01b2,
  'XK_lstroke'                             => 0x01b3,
  'XK_lcaron'                              => 0x01b5,
  'XK_sacute'                              => 0x01b6,
  'XK_caron'                               => 0x01b7,
  'XK_scaron'                              => 0x01b9,
  'XK_scedilla'                            => 0x01ba,
  'XK_tcaron'                              => 0x01bb,
  'XK_zacute'                              => 0x01bc,
  'XK_doubleacute'                         => 0x01bd,
  'XK_zcaron'                              => 0x01be,
  'XK_zabovedot'                           => 0x01bf,
  'XK_Racute'                              => 0x01c0,
  'XK_Abreve'                              => 0x01c3,
  'XK_Lacute'                              => 0x01c5,
  'XK_Cacute'                              => 0x01c6,
  'XK_Ccaron'                              => 0x01c8,
  'XK_Eogonek'                             => 0x01ca,
  'XK_Ecaron'                              => 0x01cc,
  'XK_Dcaron'                              => 0x01cf,
  'XK_Dstroke'                             => 0x01d0,
  'XK_Nacute'                              => 0x01d1,
  'XK_Ncaron'                              => 0x01d2,
  'XK_Odoubleacute'                        => 0x01d5,
  'XK_Rcaron'                              => 0x01d8,
  'XK_Uring'                               => 0x01d9,
  'XK_Udoubleacute'                        => 0x01db,
  'XK_Tcedilla'                            => 0x01de,
  'XK_racute'                              => 0x01e0,
  'XK_abreve'                              => 0x01e3,
  'XK_lacute'                              => 0x01e5,
  'XK_cacute'                              => 0x01e6,
  'XK_ccaron'                              => 0x01e8,
  'XK_eogonek'                             => 0x01ea,
  'XK_ecaron'                              => 0x01ec,
  'XK_dcaron'                              => 0x01ef,
  'XK_dstroke'                             => 0x01f0,
  'XK_nacute'                              => 0x01f1,
  'XK_ncaron'                              => 0x01f2,
  'XK_odoubleacute'                        => 0x01f5,
  'XK_rcaron'                              => 0x01f8,
  'XK_uring'                               => 0x01f9,
  'XK_udoubleacute'                        => 0x01fb,
  'XK_tcedilla'                            => 0x01fe,
  'XK_abovedot'                            => 0x01ff,
  'XK_Hstroke'                             => 0x02a1,
  'XK_Hcircumflex'                         => 0x02a6,
  'XK_Iabovedot'                           => 0x02a9,
  'XK_Gbreve'                              => 0x02ab,
  'XK_Jcircumflex'                         => 0x02ac,
  'XK_hstroke'                             => 0x02b1,
  'XK_hcircumflex'                         => 0x02b6,
  'XK_idotless'                            => 0x02b9,
  'XK_gbreve'                              => 0x02bb,
  'XK_jcircumflex'                         => 0x02bc,
  'XK_Cabovedot'                           => 0x02c5,
  'XK_Ccircumflex'                         => 0x02c6,
  'XK_Gabovedot'                           => 0x02d5,
  'XK_Gcircumflex'                         => 0x02d8,
  'XK_Ubreve'                              => 0x02dd,
  'XK_Scircumflex'                         => 0x02de,
  'XK_cabovedot'                           => 0x02e5,
  'XK_ccircumflex'                         => 0x02e6,
  'XK_gabovedot'                           => 0x02f5,
  'XK_gcircumflex'                         => 0x02f8,
  'XK_ubreve'                              => 0x02fd,
  'XK_scircumflex'                         => 0x02fe,
  'XK_kra'                                 => 0x03a2,
  'XK_kappa'                               => 0x03a2,
  'XK_Rcedilla'                            => 0x03a3,
  'XK_Itilde'                              => 0x03a5,
  'XK_Lcedilla'                            => 0x03a6,
  'XK_Emacron'                             => 0x03aa,
  'XK_Gcedilla'                            => 0x03ab,
  'XK_Tslash'                              => 0x03ac,
  'XK_rcedilla'                            => 0x03b3,
  'XK_itilde'                              => 0x03b5,
  'XK_lcedilla'                            => 0x03b6,
  'XK_emacron'                             => 0x03ba,
  'XK_gcedilla'                            => 0x03bb,
  'XK_tslash'                              => 0x03bc,
  'XK_ENG'                                 => 0x03bd,
  'XK_eng'                                 => 0x03bf,
  'XK_Amacron'                             => 0x03c0,
  'XK_Iogonek'                             => 0x03c7,
  'XK_Eabovedot'                           => 0x03cc,
  'XK_Imacron'                             => 0x03cf,
  'XK_Ncedilla'                            => 0x03d1,
  'XK_Omacron'                             => 0x03d2,
  'XK_Kcedilla'                            => 0x03d3,
  'XK_Uogonek'                             => 0x03d9,
  'XK_Utilde'                              => 0x03dd,
  'XK_Umacron'                             => 0x03de,
  'XK_amacron'                             => 0x03e0,
  'XK_iogonek'                             => 0x03e7,
  'XK_eabovedot'                           => 0x03ec,
  'XK_imacron'                             => 0x03ef,
  'XK_ncedilla'                            => 0x03f1,
  'XK_omacron'                             => 0x03f2,
  'XK_kcedilla'                            => 0x03f3,
  'XK_uogonek'                             => 0x03f9,
  'XK_utilde'                              => 0x03fd,
  'XK_umacron'                             => 0x03fe,
  'XK_Wcircumflex'                         => 0x1000174,
  'XK_wcircumflex'                         => 0x1000175,
  'XK_Ycircumflex'                         => 0x1000176,
  'XK_ycircumflex'                         => 0x1000177,
  'XK_Babovedot'                           => 0x1001e02,
  'XK_babovedot'                           => 0x1001e03,
  'XK_Dabovedot'                           => 0x1001e0a,
  'XK_dabovedot'                           => 0x1001e0b,
  'XK_Fabovedot'                           => 0x1001e1e,
  'XK_fabovedot'                           => 0x1001e1f,
  'XK_Mabovedot'                           => 0x1001e40,
  'XK_mabovedot'                           => 0x1001e41,
  'XK_Pabovedot'                           => 0x1001e56,
  'XK_pabovedot'                           => 0x1001e57,
  'XK_Sabovedot'                           => 0x1001e60,
  'XK_sabovedot'                           => 0x1001e61,
  'XK_Tabovedot'                           => 0x1001e6a,
  'XK_tabovedot'                           => 0x1001e6b,
  'XK_Wgrave'                              => 0x1001e80,
  'XK_wgrave'                              => 0x1001e81,
  'XK_Wacute'                              => 0x1001e82,
  'XK_wacute'                              => 0x1001e83,
  'XK_Wdiaeresis'                          => 0x1001e84,
  'XK_wdiaeresis'                          => 0x1001e85,
  'XK_Ygrave'                              => 0x1001ef2,
  'XK_ygrave'                              => 0x1001ef3,
  'XK_OE'                                  => 0x13bc,
  'XK_oe'                                  => 0x13bd,
  'XK_Ydiaeresis'                          => 0x13be,
  'XK_overline'                            => 0x047e,
  'XK_kana_fullstop'                       => 0x04a1,
  'XK_kana_openingbracket'                 => 0x04a2,
  'XK_kana_closingbracket'                 => 0x04a3,
  'XK_kana_comma'                          => 0x04a4,
  'XK_kana_conjunctive'                    => 0x04a5,
  'XK_kana_middledot'                      => 0x04a5,
  'XK_kana_WO'                             => 0x04a6,
  'XK_kana_a'                              => 0x04a7,
  'XK_kana_i'                              => 0x04a8,
  'XK_kana_u'                              => 0x04a9,
  'XK_kana_e'                              => 0x04aa,
  'XK_kana_o'                              => 0x04ab,
  'XK_kana_ya'                             => 0x04ac,
  'XK_kana_yu'                             => 0x04ad,
  'XK_kana_yo'                             => 0x04ae,
  'XK_kana_tsu'                            => 0x04af,
  'XK_kana_tu'                             => 0x04af,
  'XK_prolongedsound'                      => 0x04b0,
  'XK_kana_A'                              => 0x04b1,
  'XK_kana_I'                              => 0x04b2,
  'XK_kana_U'                              => 0x04b3,
  'XK_kana_E'                              => 0x04b4,
  'XK_kana_O'                              => 0x04b5,
  'XK_kana_KA'                             => 0x04b6,
  'XK_kana_KI'                             => 0x04b7,
  'XK_kana_KU'                             => 0x04b8,
  'XK_kana_KE'                             => 0x04b9,
  'XK_kana_KO'                             => 0x04ba,
  'XK_kana_SA'                             => 0x04bb,
  'XK_kana_SHI'                            => 0x04bc,
  'XK_kana_SU'                             => 0x04bd,
  'XK_kana_SE'                             => 0x04be,
  'XK_kana_SO'                             => 0x04bf,
  'XK_kana_TA'                             => 0x04c0,
  'XK_kana_CHI'                            => 0x04c1,
  'XK_kana_TI'                             => 0x04c1,
  'XK_kana_TSU'                            => 0x04c2,
  'XK_kana_TU'                             => 0x04c2,
  'XK_kana_TE'                             => 0x04c3,
  'XK_kana_TO'                             => 0x04c4,
  'XK_kana_NA'                             => 0x04c5,
  'XK_kana_NI'                             => 0x04c6,
  'XK_kana_NU'                             => 0x04c7,
  'XK_kana_NE'                             => 0x04c8,
  'XK_kana_NO'                             => 0x04c9,
  'XK_kana_HA'                             => 0x04ca,
  'XK_kana_HI'                             => 0x04cb,
  'XK_kana_FU'                             => 0x04cc,
  'XK_kana_HU'                             => 0x04cc,
  'XK_kana_HE'                             => 0x04cd,
  'XK_kana_HO'                             => 0x04ce,
  'XK_kana_MA'                             => 0x04cf,
  'XK_kana_MI'                             => 0x04d0,
  'XK_kana_MU'                             => 0x04d1,
  'XK_kana_ME'                             => 0x04d2,
  'XK_kana_MO'                             => 0x04d3,
  'XK_kana_YA'                             => 0x04d4,
  'XK_kana_YU'                             => 0x04d5,
  'XK_kana_YO'                             => 0x04d6,
  'XK_kana_RA'                             => 0x04d7,
  'XK_kana_RI'                             => 0x04d8,
  'XK_kana_RU'                             => 0x04d9,
  'XK_kana_RE'                             => 0x04da,
  'XK_kana_RO'                             => 0x04db,
  'XK_kana_WA'                             => 0x04dc,
  'XK_kana_N'                              => 0x04dd,
  'XK_voicedsound'                         => 0x04de,
  'XK_semivoicedsound'                     => 0x04df,
  'XK_kana_switch'                         => 0xff7e,
  'XK_Farsi_0'                             => 0x10006f0,
  'XK_Farsi_1'                             => 0x10006f1,
  'XK_Farsi_2'                             => 0x10006f2,
  'XK_Farsi_3'                             => 0x10006f3,
  'XK_Farsi_4'                             => 0x10006f4,
  'XK_Farsi_5'                             => 0x10006f5,
  'XK_Farsi_6'                             => 0x10006f6,
  'XK_Farsi_7'                             => 0x10006f7,
  'XK_Farsi_8'                             => 0x10006f8,
  'XK_Farsi_9'                             => 0x10006f9,
  'XK_Arabic_percent'                      => 0x100066a,
  'XK_Arabic_superscript_alef'             => 0x1000670,
  'XK_Arabic_tteh'                         => 0x1000679,
  'XK_Arabic_peh'                          => 0x100067e,
  'XK_Arabic_tcheh'                        => 0x1000686,
  'XK_Arabic_ddal'                         => 0x1000688,
  'XK_Arabic_rreh'                         => 0x1000691,
  'XK_Arabic_comma'                        => 0x05ac,
  'XK_Arabic_fullstop'                     => 0x10006d4,
  'XK_Arabic_0'                            => 0x1000660,
  'XK_Arabic_1'                            => 0x1000661,
  'XK_Arabic_2'                            => 0x1000662,
  'XK_Arabic_3'                            => 0x1000663,
  'XK_Arabic_4'                            => 0x1000664,
  'XK_Arabic_5'                            => 0x1000665,
  'XK_Arabic_6'                            => 0x1000666,
  'XK_Arabic_7'                            => 0x1000667,
  'XK_Arabic_8'                            => 0x1000668,
  'XK_Arabic_9'                            => 0x1000669,
  'XK_Arabic_semicolon'                    => 0x05bb,
  'XK_Arabic_question_mark'                => 0x05bf,
  'XK_Arabic_hamza'                        => 0x05c1,
  'XK_Arabic_maddaonalef'                  => 0x05c2,
  'XK_Arabic_hamzaonalef'                  => 0x05c3,
  'XK_Arabic_hamzaonwaw'                   => 0x05c4,
  'XK_Arabic_hamzaunderalef'               => 0x05c5,
  'XK_Arabic_hamzaonyeh'                   => 0x05c6,
  'XK_Arabic_alef'                         => 0x05c7,
  'XK_Arabic_beh'                          => 0x05c8,
  'XK_Arabic_tehmarbuta'                   => 0x05c9,
  'XK_Arabic_teh'                          => 0x05ca,
  'XK_Arabic_theh'                         => 0x05cb,
  'XK_Arabic_jeem'                         => 0x05cc,
  'XK_Arabic_hah'                          => 0x05cd,
  'XK_Arabic_khah'                         => 0x05ce,
  'XK_Arabic_dal'                          => 0x05cf,
  'XK_Arabic_thal'                         => 0x05d0,
  'XK_Arabic_ra'                           => 0x05d1,
  'XK_Arabic_zain'                         => 0x05d2,
  'XK_Arabic_seen'                         => 0x05d3,
  'XK_Arabic_sheen'                        => 0x05d4,
  'XK_Arabic_sad'                          => 0x05d5,
  'XK_Arabic_dad'                          => 0x05d6,
  'XK_Arabic_tah'                          => 0x05d7,
  'XK_Arabic_zah'                          => 0x05d8,
  'XK_Arabic_ain'                          => 0x05d9,
  'XK_Arabic_ghain'                        => 0x05da,
  'XK_Arabic_tatweel'                      => 0x05e0,
  'XK_Arabic_feh'                          => 0x05e1,
  'XK_Arabic_qaf'                          => 0x05e2,
  'XK_Arabic_kaf'                          => 0x05e3,
  'XK_Arabic_lam'                          => 0x05e4,
  'XK_Arabic_meem'                         => 0x05e5,
  'XK_Arabic_noon'                         => 0x05e6,
  'XK_Arabic_ha'                           => 0x05e7,
  'XK_Arabic_heh'                          => 0x05e7,
  'XK_Arabic_waw'                          => 0x05e8,
  'XK_Arabic_alefmaksura'                  => 0x05e9,
  'XK_Arabic_yeh'                          => 0x05ea,
  'XK_Arabic_fathatan'                     => 0x05eb,
  'XK_Arabic_dammatan'                     => 0x05ec,
  'XK_Arabic_kasratan'                     => 0x05ed,
  'XK_Arabic_fatha'                        => 0x05ee,
  'XK_Arabic_damma'                        => 0x05ef,
  'XK_Arabic_kasra'                        => 0x05f0,
  'XK_Arabic_shadda'                       => 0x05f1,
  'XK_Arabic_sukun'                        => 0x05f2,
  'XK_Arabic_madda_above'                  => 0x1000653,
  'XK_Arabic_hamza_above'                  => 0x1000654,
  'XK_Arabic_hamza_below'                  => 0x1000655,
  'XK_Arabic_jeh'                          => 0x1000698,
  'XK_Arabic_veh'                          => 0x10006a4,
  'XK_Arabic_keheh'                        => 0x10006a9,
  'XK_Arabic_gaf'                          => 0x10006af,
  'XK_Arabic_noon_ghunna'                  => 0x10006ba,
  'XK_Arabic_heh_doachashmee'              => 0x10006be,
  'XK_Farsi_yeh'                           => 0x10006cc,
  'XK_Arabic_farsi_yeh'                    => 0x10006cc,
  'XK_Arabic_yeh_baree'                    => 0x10006d2,
  'XK_Arabic_heh_goal'                     => 0x10006c1,
  'XK_Arabic_switch'                       => 0xff7e,
  'XK_Cyrillic_GHE_bar'                    => 0x1000492,
  'XK_Cyrillic_ghe_bar'                    => 0x1000493,
  'XK_Cyrillic_ZHE_descender'              => 0x1000496,
  'XK_Cyrillic_zhe_descender'              => 0x1000497,
  'XK_Cyrillic_KA_descender'               => 0x100049a,
  'XK_Cyrillic_ka_descender'               => 0x100049b,
  'XK_Cyrillic_KA_vertstroke'              => 0x100049c,
  'XK_Cyrillic_ka_vertstroke'              => 0x100049d,
  'XK_Cyrillic_EN_descender'               => 0x10004a2,
  'XK_Cyrillic_en_descender'               => 0x10004a3,
  'XK_Cyrillic_U_straight'                 => 0x10004ae,
  'XK_Cyrillic_u_straight'                 => 0x10004af,
  'XK_Cyrillic_U_straight_bar'             => 0x10004b0,
  'XK_Cyrillic_u_straight_bar'             => 0x10004b1,
  'XK_Cyrillic_HA_descender'               => 0x10004b2,
  'XK_Cyrillic_ha_descender'               => 0x10004b3,
  'XK_Cyrillic_CHE_descender'              => 0x10004b6,
  'XK_Cyrillic_che_descender'              => 0x10004b7,
  'XK_Cyrillic_CHE_vertstroke'             => 0x10004b8,
  'XK_Cyrillic_che_vertstroke'             => 0x10004b9,
  'XK_Cyrillic_SHHA'                       => 0x10004ba,
  'XK_Cyrillic_shha'                       => 0x10004bb,
  'XK_Cyrillic_SCHWA'                      => 0x10004d8,
  'XK_Cyrillic_schwa'                      => 0x10004d9,
  'XK_Cyrillic_I_macron'                   => 0x10004e2,
  'XK_Cyrillic_i_macron'                   => 0x10004e3,
  'XK_Cyrillic_O_bar'                      => 0x10004e8,
  'XK_Cyrillic_o_bar'                      => 0x10004e9,
  'XK_Cyrillic_U_macron'                   => 0x10004ee,
  'XK_Cyrillic_u_macron'                   => 0x10004ef,
  'XK_Serbian_dje'                         => 0x06a1,
  'XK_Macedonia_gje'                       => 0x06a2,
  'XK_Cyrillic_io'                         => 0x06a3,
  'XK_Ukrainian_ie'                        => 0x06a4,
  'XK_Ukranian_je'                         => 0x06a4,
  'XK_Macedonia_dse'                       => 0x06a5,
  'XK_Ukrainian_i'                         => 0x06a6,
  'XK_Ukranian_i'                          => 0x06a6,
  'XK_Ukrainian_yi'                        => 0x06a7,
  'XK_Ukranian_yi'                         => 0x06a7,
  'XK_Cyrillic_je'                         => 0x06a8,
  'XK_Serbian_je'                          => 0x06a8,
  'XK_Cyrillic_lje'                        => 0x06a9,
  'XK_Serbian_lje'                         => 0x06a9,
  'XK_Cyrillic_nje'                        => 0x06aa,
  'XK_Serbian_nje'                         => 0x06aa,
  'XK_Serbian_tshe'                        => 0x06ab,
  'XK_Macedonia_kje'                       => 0x06ac,
  'XK_Ukrainian_ghe_with_upturn'           => 0x06ad,
  'XK_Byelorussian_shortu'                 => 0x06ae,
  'XK_Cyrillic_dzhe'                       => 0x06af,
  'XK_Serbian_dze'                         => 0x06af,
  'XK_numerosign'                          => 0x06b0,
  'XK_Serbian_DJE'                         => 0x06b1,
  'XK_Macedonia_GJE'                       => 0x06b2,
  'XK_Cyrillic_IO'                         => 0x06b3,
  'XK_Ukrainian_IE'                        => 0x06b4,
  'XK_Ukranian_JE'                         => 0x06b4,
  'XK_Macedonia_DSE'                       => 0x06b5,
  'XK_Ukrainian_I'                         => 0x06b6,
  'XK_Ukranian_I'                          => 0x06b6,
  'XK_Ukrainian_YI'                        => 0x06b7,
  'XK_Ukranian_YI'                         => 0x06b7,
  'XK_Cyrillic_JE'                         => 0x06b8,
  'XK_Serbian_JE'                          => 0x06b8,
  'XK_Cyrillic_LJE'                        => 0x06b9,
  'XK_Serbian_LJE'                         => 0x06b9,
  'XK_Cyrillic_NJE'                        => 0x06ba,
  'XK_Serbian_NJE'                         => 0x06ba,
  'XK_Serbian_TSHE'                        => 0x06bb,
  'XK_Macedonia_KJE'                       => 0x06bc,
  'XK_Ukrainian_GHE_WITH_UPTURN'           => 0x06bd,
  'XK_Byelorussian_SHORTU'                 => 0x06be,
  'XK_Cyrillic_DZHE'                       => 0x06bf,
  'XK_Serbian_DZE'                         => 0x06bf,
  'XK_Cyrillic_yu'                         => 0x06c0,
  'XK_Cyrillic_a'                          => 0x06c1,
  'XK_Cyrillic_be'                         => 0x06c2,
  'XK_Cyrillic_tse'                        => 0x06c3,
  'XK_Cyrillic_de'                         => 0x06c4,
  'XK_Cyrillic_ie'                         => 0x06c5,
  'XK_Cyrillic_ef'                         => 0x06c6,
  'XK_Cyrillic_ghe'                        => 0x06c7,
  'XK_Cyrillic_ha'                         => 0x06c8,
  'XK_Cyrillic_i'                          => 0x06c9,
  'XK_Cyrillic_shorti'                     => 0x06ca,
  'XK_Cyrillic_ka'                         => 0x06cb,
  'XK_Cyrillic_el'                         => 0x06cc,
  'XK_Cyrillic_em'                         => 0x06cd,
  'XK_Cyrillic_en'                         => 0x06ce,
  'XK_Cyrillic_o'                          => 0x06cf,
  'XK_Cyrillic_pe'                         => 0x06d0,
  'XK_Cyrillic_ya'                         => 0x06d1,
  'XK_Cyrillic_er'                         => 0x06d2,
  'XK_Cyrillic_es'                         => 0x06d3,
  'XK_Cyrillic_te'                         => 0x06d4,
  'XK_Cyrillic_u'                          => 0x06d5,
  'XK_Cyrillic_zhe'                        => 0x06d6,
  'XK_Cyrillic_ve'                         => 0x06d7,
  'XK_Cyrillic_softsign'                   => 0x06d8,
  'XK_Cyrillic_yeru'                       => 0x06d9,
  'XK_Cyrillic_ze'                         => 0x06da,
  'XK_Cyrillic_sha'                        => 0x06db,
  'XK_Cyrillic_e'                          => 0x06dc,
  'XK_Cyrillic_shcha'                      => 0x06dd,
  'XK_Cyrillic_che'                        => 0x06de,
  'XK_Cyrillic_hardsign'                   => 0x06df,
  'XK_Cyrillic_YU'                         => 0x06e0,
  'XK_Cyrillic_A'                          => 0x06e1,
  'XK_Cyrillic_BE'                         => 0x06e2,
  'XK_Cyrillic_TSE'                        => 0x06e3,
  'XK_Cyrillic_DE'                         => 0x06e4,
  'XK_Cyrillic_IE'                         => 0x06e5,
  'XK_Cyrillic_EF'                         => 0x06e6,
  'XK_Cyrillic_GHE'                        => 0x06e7,
  'XK_Cyrillic_HA'                         => 0x06e8,
  'XK_Cyrillic_I'                          => 0x06e9,
  'XK_Cyrillic_SHORTI'                     => 0x06ea,
  'XK_Cyrillic_KA'                         => 0x06eb,
  'XK_Cyrillic_EL'                         => 0x06ec,
  'XK_Cyrillic_EM'                         => 0x06ed,
  'XK_Cyrillic_EN'                         => 0x06ee,
  'XK_Cyrillic_O'                          => 0x06ef,
  'XK_Cyrillic_PE'                         => 0x06f0,
  'XK_Cyrillic_YA'                         => 0x06f1,
  'XK_Cyrillic_ER'                         => 0x06f2,
  'XK_Cyrillic_ES'                         => 0x06f3,
  'XK_Cyrillic_TE'                         => 0x06f4,
  'XK_Cyrillic_U'                          => 0x06f5,
  'XK_Cyrillic_ZHE'                        => 0x06f6,
  'XK_Cyrillic_VE'                         => 0x06f7,
  'XK_Cyrillic_SOFTSIGN'                   => 0x06f8,
  'XK_Cyrillic_YERU'                       => 0x06f9,
  'XK_Cyrillic_ZE'                         => 0x06fa,
  'XK_Cyrillic_SHA'                        => 0x06fb,
  'XK_Cyrillic_E'                          => 0x06fc,
  'XK_Cyrillic_SHCHA'                      => 0x06fd,
  'XK_Cyrillic_CHE'                        => 0x06fe,
  'XK_Cyrillic_HARDSIGN'                   => 0x06ff,
  'XK_Greek_ALPHAaccent'                   => 0x07a1,
  'XK_Greek_EPSILONaccent'                 => 0x07a2,
  'XK_Greek_ETAaccent'                     => 0x07a3,
  'XK_Greek_IOTAaccent'                    => 0x07a4,
  'XK_Greek_IOTAdieresis'                  => 0x07a5,
  'XK_Greek_IOTAdiaeresis'                 => 0x07a5,
  'XK_Greek_OMICRONaccent'                 => 0x07a7,
  'XK_Greek_UPSILONaccent'                 => 0x07a8,
  'XK_Greek_UPSILONdieresis'               => 0x07a9,
  'XK_Greek_OMEGAaccent'                   => 0x07ab,
  'XK_Greek_accentdieresis'                => 0x07ae,
  'XK_Greek_horizbar'                      => 0x07af,
  'XK_Greek_alphaaccent'                   => 0x07b1,
  'XK_Greek_epsilonaccent'                 => 0x07b2,
  'XK_Greek_etaaccent'                     => 0x07b3,
  'XK_Greek_iotaaccent'                    => 0x07b4,
  'XK_Greek_iotadieresis'                  => 0x07b5,
  'XK_Greek_iotaaccentdieresis'            => 0x07b6,
  'XK_Greek_omicronaccent'                 => 0x07b7,
  'XK_Greek_upsilonaccent'                 => 0x07b8,
  'XK_Greek_upsilondieresis'               => 0x07b9,
  'XK_Greek_upsilonaccentdieresis'         => 0x07ba,
  'XK_Greek_omegaaccent'                   => 0x07bb,
  'XK_Greek_ALPHA'                         => 0x07c1,
  'XK_Greek_BETA'                          => 0x07c2,
  'XK_Greek_GAMMA'                         => 0x07c3,
  'XK_Greek_DELTA'                         => 0x07c4,
  'XK_Greek_EPSILON'                       => 0x07c5,
  'XK_Greek_ZETA'                          => 0x07c6,
  'XK_Greek_ETA'                           => 0x07c7,
  'XK_Greek_THETA'                         => 0x07c8,
  'XK_Greek_IOTA'                          => 0x07c9,
  'XK_Greek_KAPPA'                         => 0x07ca,
  'XK_Greek_LAMDA'                         => 0x07cb,
  'XK_Greek_LAMBDA'                        => 0x07cb,
  'XK_Greek_MU'                            => 0x07cc,
  'XK_Greek_NU'                            => 0x07cd,
  'XK_Greek_XI'                            => 0x07ce,
  'XK_Greek_OMICRON'                       => 0x07cf,
  'XK_Greek_PI'                            => 0x07d0,
  'XK_Greek_RHO'                           => 0x07d1,
  'XK_Greek_SIGMA'                         => 0x07d2,
  'XK_Greek_TAU'                           => 0x07d4,
  'XK_Greek_UPSILON'                       => 0x07d5,
  'XK_Greek_PHI'                           => 0x07d6,
  'XK_Greek_CHI'                           => 0x07d7,
  'XK_Greek_PSI'                           => 0x07d8,
  'XK_Greek_OMEGA'                         => 0x07d9,
  'XK_Greek_alpha'                         => 0x07e1,
  'XK_Greek_beta'                          => 0x07e2,
  'XK_Greek_gamma'                         => 0x07e3,
  'XK_Greek_delta'                         => 0x07e4,
  'XK_Greek_epsilon'                       => 0x07e5,
  'XK_Greek_zeta'                          => 0x07e6,
  'XK_Greek_eta'                           => 0x07e7,
  'XK_Greek_theta'                         => 0x07e8,
  'XK_Greek_iota'                          => 0x07e9,
  'XK_Greek_kappa'                         => 0x07ea,
  'XK_Greek_lamda'                         => 0x07eb,
  'XK_Greek_lambda'                        => 0x07eb,
  'XK_Greek_mu'                            => 0x07ec,
  'XK_Greek_nu'                            => 0x07ed,
  'XK_Greek_xi'                            => 0x07ee,
  'XK_Greek_omicron'                       => 0x07ef,
  'XK_Greek_pi'                            => 0x07f0,
  'XK_Greek_rho'                           => 0x07f1,
  'XK_Greek_sigma'                         => 0x07f2,
  'XK_Greek_finalsmallsigma'               => 0x07f3,
  'XK_Greek_tau'                           => 0x07f4,
  'XK_Greek_upsilon'                       => 0x07f5,
  'XK_Greek_phi'                           => 0x07f6,
  'XK_Greek_chi'                           => 0x07f7,
  'XK_Greek_psi'                           => 0x07f8,
  'XK_Greek_omega'                         => 0x07f9,
  'XK_Greek_switch'                        => 0xff7e,
  'XK_leftradical'                         => 0x08a1,
  'XK_topleftradical'                      => 0x08a2,
  'XK_horizconnector'                      => 0x08a3,
  'XK_topintegral'                         => 0x08a4,
  'XK_botintegral'                         => 0x08a5,
  'XK_vertconnector'                       => 0x08a6,
  'XK_topleftsqbracket'                    => 0x08a7,
  'XK_botleftsqbracket'                    => 0x08a8,
  'XK_toprightsqbracket'                   => 0x08a9,
  'XK_botrightsqbracket'                   => 0x08aa,
  'XK_topleftparens'                       => 0x08ab,
  'XK_botleftparens'                       => 0x08ac,
  'XK_toprightparens'                      => 0x08ad,
  'XK_botrightparens'                      => 0x08ae,
  'XK_leftmiddlecurlybrace'                => 0x08af,
  'XK_rightmiddlecurlybrace'               => 0x08b0,
  'XK_topleftsummation'                    => 0x08b1,
  'XK_botleftsummation'                    => 0x08b2,
  'XK_topvertsummationconnector'           => 0x08b3,
  'XK_botvertsummationconnector'           => 0x08b4,
  'XK_toprightsummation'                   => 0x08b5,
  'XK_botrightsummation'                   => 0x08b6,
  'XK_rightmiddlesummation'                => 0x08b7,
  'XK_lessthanequal'                       => 0x08bc,
  'XK_notequal'                            => 0x08bd,
  'XK_greaterthanequal'                    => 0x08be,
  'XK_integral'                            => 0x08bf,
  'XK_therefore'                           => 0x08c0,
  'XK_variation'                           => 0x08c1,
  'XK_infinity'                            => 0x08c2,
  'XK_nabla'                               => 0x08c5,
  'XK_approximate'                         => 0x08c8,
  'XK_similarequal'                        => 0x08c9,
  'XK_ifonlyif'                            => 0x08cd,
  'XK_implies'                             => 0x08ce,
  'XK_identical'                           => 0x08cf,
  'XK_radical'                             => 0x08d6,
  'XK_includedin'                          => 0x08da,
  'XK_includes'                            => 0x08db,
  'XK_intersection'                        => 0x08dc,
  'XK_union'                               => 0x08dd,
  'XK_logicaland'                          => 0x08de,
  'XK_logicalor'                           => 0x08df,
  'XK_partialderivative'                   => 0x08ef,
  'XK_function'                            => 0x08f6,
  'XK_leftarrow'                           => 0x08fb,
  'XK_uparrow'                             => 0x08fc,
  'XK_rightarrow'                          => 0x08fd,
  'XK_downarrow'                           => 0x08fe,
  'XK_blank'                               => 0x09df,
  'XK_soliddiamond'                        => 0x09e0,
  'XK_checkerboard'                        => 0x09e1,
  'XK_ht'                                  => 0x09e2,
  'XK_ff'                                  => 0x09e3,
  'XK_cr'                                  => 0x09e4,
  'XK_lf'                                  => 0x09e5,
  'XK_nl'                                  => 0x09e8,
  'XK_vt'                                  => 0x09e9,
  'XK_lowrightcorner'                      => 0x09ea,
  'XK_uprightcorner'                       => 0x09eb,
  'XK_upleftcorner'                        => 0x09ec,
  'XK_lowleftcorner'                       => 0x09ed,
  'XK_crossinglines'                       => 0x09ee,
  'XK_horizlinescan1'                      => 0x09ef,
  'XK_horizlinescan3'                      => 0x09f0,
  'XK_horizlinescan5'                      => 0x09f1,
  'XK_horizlinescan7'                      => 0x09f2,
  'XK_horizlinescan9'                      => 0x09f3,
  'XK_leftt'                               => 0x09f4,
  'XK_rightt'                              => 0x09f5,
  'XK_bott'                                => 0x09f6,
  'XK_topt'                                => 0x09f7,
  'XK_vertbar'                             => 0x09f8,
  'XK_emspace'                             => 0x0aa1,
  'XK_enspace'                             => 0x0aa2,
  'XK_em3space'                            => 0x0aa3,
  'XK_em4space'                            => 0x0aa4,
  'XK_digitspace'                          => 0x0aa5,
  'XK_punctspace'                          => 0x0aa6,
  'XK_thinspace'                           => 0x0aa7,
  'XK_hairspace'                           => 0x0aa8,
  'XK_emdash'                              => 0x0aa9,
  'XK_endash'                              => 0x0aaa,
  'XK_signifblank'                         => 0x0aac,
  'XK_ellipsis'                            => 0x0aae,
  'XK_doubbaselinedot'                     => 0x0aaf,
  'XK_onethird'                            => 0x0ab0,
  'XK_twothirds'                           => 0x0ab1,
  'XK_onefifth'                            => 0x0ab2,
  'XK_twofifths'                           => 0x0ab3,
  'XK_threefifths'                         => 0x0ab4,
  'XK_fourfifths'                          => 0x0ab5,
  'XK_onesixth'                            => 0x0ab6,
  'XK_fivesixths'                          => 0x0ab7,
  'XK_careof'                              => 0x0ab8,
  'XK_figdash'                             => 0x0abb,
  'XK_leftanglebracket'                    => 0x0abc,
  'XK_decimalpoint'                        => 0x0abd,
  'XK_rightanglebracket'                   => 0x0abe,
  'XK_marker'                              => 0x0abf,
  'XK_oneeighth'                           => 0x0ac3,
  'XK_threeeighths'                        => 0x0ac4,
  'XK_fiveeighths'                         => 0x0ac5,
  'XK_seveneighths'                        => 0x0ac6,
  'XK_trademark'                           => 0x0ac9,
  'XK_signaturemark'                       => 0x0aca,
  'XK_trademarkincircle'                   => 0x0acb,
  'XK_leftopentriangle'                    => 0x0acc,
  'XK_rightopentriangle'                   => 0x0acd,
  'XK_emopencircle'                        => 0x0ace,
  'XK_emopenrectangle'                     => 0x0acf,
  'XK_leftsinglequotemark'                 => 0x0ad0,
  'XK_rightsinglequotemark'                => 0x0ad1,
  'XK_leftdoublequotemark'                 => 0x0ad2,
  'XK_rightdoublequotemark'                => 0x0ad3,
  'XK_prescription'                        => 0x0ad4,
  'XK_minutes'                             => 0x0ad6,
  'XK_seconds'                             => 0x0ad7,
  'XK_latincross'                          => 0x0ad9,
  'XK_hexagram'                            => 0x0ada,
  'XK_filledrectbullet'                    => 0x0adb,
  'XK_filledlefttribullet'                 => 0x0adc,
  'XK_filledrighttribullet'                => 0x0add,
  'XK_emfilledcircle'                      => 0x0ade,
  'XK_emfilledrect'                        => 0x0adf,
  'XK_enopencircbullet'                    => 0x0ae0,
  'XK_enopensquarebullet'                  => 0x0ae1,
  'XK_openrectbullet'                      => 0x0ae2,
  'XK_opentribulletup'                     => 0x0ae3,
  'XK_opentribulletdown'                   => 0x0ae4,
  'XK_openstar'                            => 0x0ae5,
  'XK_enfilledcircbullet'                  => 0x0ae6,
  'XK_enfilledsqbullet'                    => 0x0ae7,
  'XK_filledtribulletup'                   => 0x0ae8,
  'XK_filledtribulletdown'                 => 0x0ae9,
  'XK_leftpointer'                         => 0x0aea,
  'XK_rightpointer'                        => 0x0aeb,
  'XK_club'                                => 0x0aec,
  'XK_diamond'                             => 0x0aed,
  'XK_heart'                               => 0x0aee,
  'XK_maltesecross'                        => 0x0af0,
  'XK_dagger'                              => 0x0af1,
  'XK_doubledagger'                        => 0x0af2,
  'XK_checkmark'                           => 0x0af3,
  'XK_ballotcross'                         => 0x0af4,
  'XK_musicalsharp'                        => 0x0af5,
  'XK_musicalflat'                         => 0x0af6,
  'XK_malesymbol'                          => 0x0af7,
  'XK_femalesymbol'                        => 0x0af8,
  'XK_telephone'                           => 0x0af9,
  'XK_telephonerecorder'                   => 0x0afa,
  'XK_phonographcopyright'                 => 0x0afb,
  'XK_caret'                               => 0x0afc,
  'XK_singlelowquotemark'                  => 0x0afd,
  'XK_doublelowquotemark'                  => 0x0afe,
  'XK_cursor'                              => 0x0aff,
  'XK_leftcaret'                           => 0x0ba3,
  'XK_rightcaret'                          => 0x0ba6,
  'XK_downcaret'                           => 0x0ba8,
  'XK_upcaret'                             => 0x0ba9,
  'XK_overbar'                             => 0x0bc0,
  'XK_downtack'                            => 0x0bc2,
  'XK_upshoe'                              => 0x0bc3,
  'XK_downstile'                           => 0x0bc4,
  'XK_underbar'                            => 0x0bc6,
  'XK_jot'                                 => 0x0bca,
  'XK_quad'                                => 0x0bcc,
  'XK_uptack'                              => 0x0bce,
  'XK_circle'                              => 0x0bcf,
  'XK_upstile'                             => 0x0bd3,
  'XK_downshoe'                            => 0x0bd6,
  'XK_rightshoe'                           => 0x0bd8,
  'XK_leftshoe'                            => 0x0bda,
  'XK_lefttack'                            => 0x0bdc,
  'XK_righttack'                           => 0x0bfc,
  'XK_hebrew_doublelowline'                => 0x0cdf,
  'XK_hebrew_aleph'                        => 0x0ce0,
  'XK_hebrew_bet'                          => 0x0ce1,
  'XK_hebrew_beth'                         => 0x0ce1,
  'XK_hebrew_gimel'                        => 0x0ce2,
  'XK_hebrew_gimmel'                       => 0x0ce2,
  'XK_hebrew_dalet'                        => 0x0ce3,
  'XK_hebrew_daleth'                       => 0x0ce3,
  'XK_hebrew_he'                           => 0x0ce4,
  'XK_hebrew_waw'                          => 0x0ce5,
  'XK_hebrew_zain'                         => 0x0ce6,
  'XK_hebrew_zayin'                        => 0x0ce6,
  'XK_hebrew_chet'                         => 0x0ce7,
  'XK_hebrew_het'                          => 0x0ce7,
  'XK_hebrew_tet'                          => 0x0ce8,
  'XK_hebrew_teth'                         => 0x0ce8,
  'XK_hebrew_yod'                          => 0x0ce9,
  'XK_hebrew_finalkaph'                    => 0x0cea,
  'XK_hebrew_kaph'                         => 0x0ceb,
  'XK_hebrew_lamed'                        => 0x0cec,
  'XK_hebrew_finalmem'                     => 0x0ced,
  'XK_hebrew_mem'                          => 0x0cee,
  'XK_hebrew_finalnun'                     => 0x0cef,
  'XK_hebrew_nun'                          => 0x0cf0,
  'XK_hebrew_samech'                       => 0x0cf1,
  'XK_hebrew_samekh'                       => 0x0cf1,
  'XK_hebrew_ayin'                         => 0x0cf2,
  'XK_hebrew_finalpe'                      => 0x0cf3,
  'XK_hebrew_pe'                           => 0x0cf4,
  'XK_hebrew_finalzade'                    => 0x0cf5,
  'XK_hebrew_finalzadi'                    => 0x0cf5,
  'XK_hebrew_zade'                         => 0x0cf6,
  'XK_hebrew_zadi'                         => 0x0cf6,
  'XK_hebrew_qoph'                         => 0x0cf7,
  'XK_hebrew_kuf'                          => 0x0cf7,
  'XK_hebrew_resh'                         => 0x0cf8,
  'XK_hebrew_shin'                         => 0x0cf9,
  'XK_hebrew_taw'                          => 0x0cfa,
  'XK_hebrew_taf'                          => 0x0cfa,
  'XK_Hebrew_switch'                       => 0xff7e,
  'XK_Thai_kokai'                          => 0x0da1,
  'XK_Thai_khokhai'                        => 0x0da2,
  'XK_Thai_khokhuat'                       => 0x0da3,
  'XK_Thai_khokhwai'                       => 0x0da4,
  'XK_Thai_khokhon'                        => 0x0da5,
  'XK_Thai_khorakhang'                     => 0x0da6,
  'XK_Thai_ngongu'                         => 0x0da7,
  'XK_Thai_chochan'                        => 0x0da8,
  'XK_Thai_choching'                       => 0x0da9,
  'XK_Thai_chochang'                       => 0x0daa,
  'XK_Thai_soso'                           => 0x0dab,
  'XK_Thai_chochoe'                        => 0x0dac,
  'XK_Thai_yoying'                         => 0x0dad,
  'XK_Thai_dochada'                        => 0x0dae,
  'XK_Thai_topatak'                        => 0x0daf,
  'XK_Thai_thothan'                        => 0x0db0,
  'XK_Thai_thonangmontho'                  => 0x0db1,
  'XK_Thai_thophuthao'                     => 0x0db2,
  'XK_Thai_nonen'                          => 0x0db3,
  'XK_Thai_dodek'                          => 0x0db4,
  'XK_Thai_totao'                          => 0x0db5,
  'XK_Thai_thothung'                       => 0x0db6,
  'XK_Thai_thothahan'                      => 0x0db7,
  'XK_Thai_thothong'                       => 0x0db8,
  'XK_Thai_nonu'                           => 0x0db9,
  'XK_Thai_bobaimai'                       => 0x0dba,
  'XK_Thai_popla'                          => 0x0dbb,
  'XK_Thai_phophung'                       => 0x0dbc,
  'XK_Thai_fofa'                           => 0x0dbd,
  'XK_Thai_phophan'                        => 0x0dbe,
  'XK_Thai_fofan'                          => 0x0dbf,
  'XK_Thai_phosamphao'                     => 0x0dc0,
  'XK_Thai_moma'                           => 0x0dc1,
  'XK_Thai_yoyak'                          => 0x0dc2,
  'XK_Thai_rorua'                          => 0x0dc3,
  'XK_Thai_ru'                             => 0x0dc4,
  'XK_Thai_loling'                         => 0x0dc5,
  'XK_Thai_lu'                             => 0x0dc6,
  'XK_Thai_wowaen'                         => 0x0dc7,
  'XK_Thai_sosala'                         => 0x0dc8,
  'XK_Thai_sorusi'                         => 0x0dc9,
  'XK_Thai_sosua'                          => 0x0dca,
  'XK_Thai_hohip'                          => 0x0dcb,
  'XK_Thai_lochula'                        => 0x0dcc,
  'XK_Thai_oang'                           => 0x0dcd,
  'XK_Thai_honokhuk'                       => 0x0dce,
  'XK_Thai_paiyannoi'                      => 0x0dcf,
  'XK_Thai_saraa'                          => 0x0dd0,
  'XK_Thai_maihanakat'                     => 0x0dd1,
  'XK_Thai_saraaa'                         => 0x0dd2,
  'XK_Thai_saraam'                         => 0x0dd3,
  'XK_Thai_sarai'                          => 0x0dd4,
  'XK_Thai_saraii'                         => 0x0dd5,
  'XK_Thai_saraue'                         => 0x0dd6,
  'XK_Thai_sarauee'                        => 0x0dd7,
  'XK_Thai_sarau'                          => 0x0dd8,
  'XK_Thai_sarauu'                         => 0x0dd9,
  'XK_Thai_phinthu'                        => 0x0dda,
  'XK_Thai_maihanakat_maitho'              => 0x0dde,
  'XK_Thai_baht'                           => 0x0ddf,
  'XK_Thai_sarae'                          => 0x0de0,
  'XK_Thai_saraae'                         => 0x0de1,
  'XK_Thai_sarao'                          => 0x0de2,
  'XK_Thai_saraaimaimuan'                  => 0x0de3,
  'XK_Thai_saraaimaimalai'                 => 0x0de4,
  'XK_Thai_lakkhangyao'                    => 0x0de5,
  'XK_Thai_maiyamok'                       => 0x0de6,
  'XK_Thai_maitaikhu'                      => 0x0de7,
  'XK_Thai_maiek'                          => 0x0de8,
  'XK_Thai_maitho'                         => 0x0de9,
  'XK_Thai_maitri'                         => 0x0dea,
  'XK_Thai_maichattawa'                    => 0x0deb,
  'XK_Thai_thanthakhat'                    => 0x0dec,
  'XK_Thai_nikhahit'                       => 0x0ded,
  'XK_Thai_leksun'                         => 0x0df0,
  'XK_Thai_leknung'                        => 0x0df1,
  'XK_Thai_leksong'                        => 0x0df2,
  'XK_Thai_leksam'                         => 0x0df3,
  'XK_Thai_leksi'                          => 0x0df4,
  'XK_Thai_lekha'                          => 0x0df5,
  'XK_Thai_lekhok'                         => 0x0df6,
  'XK_Thai_lekchet'                        => 0x0df7,
  'XK_Thai_lekpaet'                        => 0x0df8,
  'XK_Thai_lekkao'                         => 0x0df9,
  'XK_Hangul'                              => 0xff31,
  'XK_Hangul_Start'                        => 0xff32,
  'XK_Hangul_End'                          => 0xff33,
  'XK_Hangul_Hanja'                        => 0xff34,
  'XK_Hangul_Jamo'                         => 0xff35,
  'XK_Hangul_Romaja'                       => 0xff36,
  'XK_Hangul_Codeinput'                    => 0xff37,
  'XK_Hangul_Jeonja'                       => 0xff38,
  'XK_Hangul_Banja'                        => 0xff39,
  'XK_Hangul_PreHanja'                     => 0xff3a,
  'XK_Hangul_PostHanja'                    => 0xff3b,
  'XK_Hangul_SingleCandidate'              => 0xff3c,
  'XK_Hangul_MultipleCandidate'            => 0xff3d,
  'XK_Hangul_PreviousCandidate'            => 0xff3e,
  'XK_Hangul_Special'                      => 0xff3f,
  'XK_Hangul_switch'                       => 0xff7e,
  'XK_Hangul_Kiyeog'                       => 0x0ea1,
  'XK_Hangul_SsangKiyeog'                  => 0x0ea2,
  'XK_Hangul_KiyeogSios'                   => 0x0ea3,
  'XK_Hangul_Nieun'                        => 0x0ea4,
  'XK_Hangul_NieunJieuj'                   => 0x0ea5,
  'XK_Hangul_NieunHieuh'                   => 0x0ea6,
  'XK_Hangul_Dikeud'                       => 0x0ea7,
  'XK_Hangul_SsangDikeud'                  => 0x0ea8,
  'XK_Hangul_Rieul'                        => 0x0ea9,
  'XK_Hangul_RieulKiyeog'                  => 0x0eaa,
  'XK_Hangul_RieulMieum'                   => 0x0eab,
  'XK_Hangul_RieulPieub'                   => 0x0eac,
  'XK_Hangul_RieulSios'                    => 0x0ead,
  'XK_Hangul_RieulTieut'                   => 0x0eae,
  'XK_Hangul_RieulPhieuf'                  => 0x0eaf,
  'XK_Hangul_RieulHieuh'                   => 0x0eb0,
  'XK_Hangul_Mieum'                        => 0x0eb1,
  'XK_Hangul_Pieub'                        => 0x0eb2,
  'XK_Hangul_SsangPieub'                   => 0x0eb3,
  'XK_Hangul_PieubSios'                    => 0x0eb4,
  'XK_Hangul_Sios'                         => 0x0eb5,
  'XK_Hangul_SsangSios'                    => 0x0eb6,
  'XK_Hangul_Ieung'                        => 0x0eb7,
  'XK_Hangul_Jieuj'                        => 0x0eb8,
  'XK_Hangul_SsangJieuj'                   => 0x0eb9,
  'XK_Hangul_Cieuc'                        => 0x0eba,
  'XK_Hangul_Khieuq'                       => 0x0ebb,
  'XK_Hangul_Tieut'                        => 0x0ebc,
  'XK_Hangul_Phieuf'                       => 0x0ebd,
  'XK_Hangul_Hieuh'                        => 0x0ebe,
  'XK_Hangul_A'                            => 0x0ebf,
  'XK_Hangul_AE'                           => 0x0ec0,
  'XK_Hangul_YA'                           => 0x0ec1,
  'XK_Hangul_YAE'                          => 0x0ec2,
  'XK_Hangul_EO'                           => 0x0ec3,
  'XK_Hangul_E'                            => 0x0ec4,
  'XK_Hangul_YEO'                          => 0x0ec5,
  'XK_Hangul_YE'                           => 0x0ec6,
  'XK_Hangul_O'                            => 0x0ec7,
  'XK_Hangul_WA'                           => 0x0ec8,
  'XK_Hangul_WAE'                          => 0x0ec9,
  'XK_Hangul_OE'                           => 0x0eca,
  'XK_Hangul_YO'                           => 0x0ecb,
  'XK_Hangul_U'                            => 0x0ecc,
  'XK_Hangul_WEO'                          => 0x0ecd,
  'XK_Hangul_WE'                           => 0x0ece,
  'XK_Hangul_WI'                           => 0x0ecf,
  'XK_Hangul_YU'                           => 0x0ed0,
  'XK_Hangul_EU'                           => 0x0ed1,
  'XK_Hangul_YI'                           => 0x0ed2,
  'XK_Hangul_I'                            => 0x0ed3,
  'XK_Hangul_J_Kiyeog'                     => 0x0ed4,
  'XK_Hangul_J_SsangKiyeog'                => 0x0ed5,
  'XK_Hangul_J_KiyeogSios'                 => 0x0ed6,
  'XK_Hangul_J_Nieun'                      => 0x0ed7,
  'XK_Hangul_J_NieunJieuj'                 => 0x0ed8,
  'XK_Hangul_J_NieunHieuh'                 => 0x0ed9,
  'XK_Hangul_J_Dikeud'                     => 0x0eda,
  'XK_Hangul_J_Rieul'                      => 0x0edb,
  'XK_Hangul_J_RieulKiyeog'                => 0x0edc,
  'XK_Hangul_J_RieulMieum'                 => 0x0edd,
  'XK_Hangul_J_RieulPieub'                 => 0x0ede,
  'XK_Hangul_J_RieulSios'                  => 0x0edf,
  'XK_Hangul_J_RieulTieut'                 => 0x0ee0,
  'XK_Hangul_J_RieulPhieuf'                => 0x0ee1,
  'XK_Hangul_J_RieulHieuh'                 => 0x0ee2,
  'XK_Hangul_J_Mieum'                      => 0x0ee3,
  'XK_Hangul_J_Pieub'                      => 0x0ee4,
  'XK_Hangul_J_PieubSios'                  => 0x0ee5,
  'XK_Hangul_J_Sios'                       => 0x0ee6,
  'XK_Hangul_J_SsangSios'                  => 0x0ee7,
  'XK_Hangul_J_Ieung'                      => 0x0ee8,
  'XK_Hangul_J_Jieuj'                      => 0x0ee9,
  'XK_Hangul_J_Cieuc'                      => 0x0eea,
  'XK_Hangul_J_Khieuq'                     => 0x0eeb,
  'XK_Hangul_J_Tieut'                      => 0x0eec,
  'XK_Hangul_J_Phieuf'                     => 0x0eed,
  'XK_Hangul_J_Hieuh'                      => 0x0eee,
  'XK_Hangul_RieulYeorinHieuh'             => 0x0eef,
  'XK_Hangul_SunkyeongeumMieum'            => 0x0ef0,
  'XK_Hangul_SunkyeongeumPieub'            => 0x0ef1,
  'XK_Hangul_PanSios'                      => 0x0ef2,
  'XK_Hangul_KkogjiDalrinIeung'            => 0x0ef3,
  'XK_Hangul_SunkyeongeumPhieuf'           => 0x0ef4,
  'XK_Hangul_YeorinHieuh'                  => 0x0ef5,
  'XK_Hangul_AraeA'                        => 0x0ef6,
  'XK_Hangul_AraeAE'                       => 0x0ef7,
  'XK_Hangul_J_PanSios'                    => 0x0ef8,
  'XK_Hangul_J_KkogjiDalrinIeung'          => 0x0ef9,
  'XK_Hangul_J_YeorinHieuh'                => 0x0efa,
  'XK_Korean_Won'                          => 0x0eff,
  'XK_Armenian_ligature_ew'                => 0x1000587,
  'XK_Armenian_full_stop'                  => 0x1000589,
  'XK_Armenian_verjaket'                   => 0x1000589,
  'XK_Armenian_separation_mark'            => 0x100055d,
  'XK_Armenian_but'                        => 0x100055d,
  'XK_Armenian_hyphen'                     => 0x100058a,
  'XK_Armenian_yentamna'                   => 0x100058a,
  'XK_Armenian_exclam'                     => 0x100055c,
  'XK_Armenian_amanak'                     => 0x100055c,
  'XK_Armenian_accent'                     => 0x100055b,
  'XK_Armenian_shesht'                     => 0x100055b,
  'XK_Armenian_question'                   => 0x100055e,
  'XK_Armenian_paruyk'                     => 0x100055e,
  'XK_Armenian_AYB'                        => 0x1000531,
  'XK_Armenian_ayb'                        => 0x1000561,
  'XK_Armenian_BEN'                        => 0x1000532,
  'XK_Armenian_ben'                        => 0x1000562,
  'XK_Armenian_GIM'                        => 0x1000533,
  'XK_Armenian_gim'                        => 0x1000563,
  'XK_Armenian_DA'                         => 0x1000534,
  'XK_Armenian_da'                         => 0x1000564,
  'XK_Armenian_YECH'                       => 0x1000535,
  'XK_Armenian_yech'                       => 0x1000565,
  'XK_Armenian_ZA'                         => 0x1000536,
  'XK_Armenian_za'                         => 0x1000566,
  'XK_Armenian_E'                          => 0x1000537,
  'XK_Armenian_e'                          => 0x1000567,
  'XK_Armenian_AT'                         => 0x1000538,
  'XK_Armenian_at'                         => 0x1000568,
  'XK_Armenian_TO'                         => 0x1000539,
  'XK_Armenian_to'                         => 0x1000569,
  'XK_Armenian_ZHE'                        => 0x100053a,
  'XK_Armenian_zhe'                        => 0x100056a,
  'XK_Armenian_INI'                        => 0x100053b,
  'XK_Armenian_ini'                        => 0x100056b,
  'XK_Armenian_LYUN'                       => 0x100053c,
  'XK_Armenian_lyun'                       => 0x100056c,
  'XK_Armenian_KHE'                        => 0x100053d,
  'XK_Armenian_khe'                        => 0x100056d,
  'XK_Armenian_TSA'                        => 0x100053e,
  'XK_Armenian_tsa'                        => 0x100056e,
  'XK_Armenian_KEN'                        => 0x100053f,
  'XK_Armenian_ken'                        => 0x100056f,
  'XK_Armenian_HO'                         => 0x1000540,
  'XK_Armenian_ho'                         => 0x1000570,
  'XK_Armenian_DZA'                        => 0x1000541,
  'XK_Armenian_dza'                        => 0x1000571,
  'XK_Armenian_GHAT'                       => 0x1000542,
  'XK_Armenian_ghat'                       => 0x1000572,
  'XK_Armenian_TCHE'                       => 0x1000543,
  'XK_Armenian_tche'                       => 0x1000573,
  'XK_Armenian_MEN'                        => 0x1000544,
  'XK_Armenian_men'                        => 0x1000574,
  'XK_Armenian_HI'                         => 0x1000545,
  'XK_Armenian_hi'                         => 0x1000575,
  'XK_Armenian_NU'                         => 0x1000546,
  'XK_Armenian_nu'                         => 0x1000576,
  'XK_Armenian_SHA'                        => 0x1000547,
  'XK_Armenian_sha'                        => 0x1000577,
  'XK_Armenian_VO'                         => 0x1000548,
  'XK_Armenian_vo'                         => 0x1000578,
  'XK_Armenian_CHA'                        => 0x1000549,
  'XK_Armenian_cha'                        => 0x1000579,
  'XK_Armenian_PE'                         => 0x100054a,
  'XK_Armenian_pe'                         => 0x100057a,
  'XK_Armenian_JE'                         => 0x100054b,
  'XK_Armenian_je'                         => 0x100057b,
  'XK_Armenian_RA'                         => 0x100054c,
  'XK_Armenian_ra'                         => 0x100057c,
  'XK_Armenian_SE'                         => 0x100054d,
  'XK_Armenian_se'                         => 0x100057d,
  'XK_Armenian_VEV'                        => 0x100054e,
  'XK_Armenian_vev'                        => 0x100057e,
  'XK_Armenian_TYUN'                       => 0x100054f,
  'XK_Armenian_tyun'                       => 0x100057f,
  'XK_Armenian_RE'                         => 0x1000550,
  'XK_Armenian_re'                         => 0x1000580,
  'XK_Armenian_TSO'                        => 0x1000551,
  'XK_Armenian_tso'                        => 0x1000581,
  'XK_Armenian_VYUN'                       => 0x1000552,
  'XK_Armenian_vyun'                       => 0x1000582,
  'XK_Armenian_PYUR'                       => 0x1000553,
  'XK_Armenian_pyur'                       => 0x1000583,
  'XK_Armenian_KE'                         => 0x1000554,
  'XK_Armenian_ke'                         => 0x1000584,
  'XK_Armenian_O'                          => 0x1000555,
  'XK_Armenian_o'                          => 0x1000585,
  'XK_Armenian_FE'                         => 0x1000556,
  'XK_Armenian_fe'                         => 0x1000586,
  'XK_Armenian_apostrophe'                 => 0x100055a,
  'XK_Georgian_an'                         => 0x10010d0,
  'XK_Georgian_ban'                        => 0x10010d1,
  'XK_Georgian_gan'                        => 0x10010d2,
  'XK_Georgian_don'                        => 0x10010d3,
  'XK_Georgian_en'                         => 0x10010d4,
  'XK_Georgian_vin'                        => 0x10010d5,
  'XK_Georgian_zen'                        => 0x10010d6,
  'XK_Georgian_tan'                        => 0x10010d7,
  'XK_Georgian_in'                         => 0x10010d8,
  'XK_Georgian_kan'                        => 0x10010d9,
  'XK_Georgian_las'                        => 0x10010da,
  'XK_Georgian_man'                        => 0x10010db,
  'XK_Georgian_nar'                        => 0x10010dc,
  'XK_Georgian_on'                         => 0x10010dd,
  'XK_Georgian_par'                        => 0x10010de,
  'XK_Georgian_zhar'                       => 0x10010df,
  'XK_Georgian_rae'                        => 0x10010e0,
  'XK_Georgian_san'                        => 0x10010e1,
  'XK_Georgian_tar'                        => 0x10010e2,
  'XK_Georgian_un'                         => 0x10010e3,
  'XK_Georgian_phar'                       => 0x10010e4,
  'XK_Georgian_khar'                       => 0x10010e5,
  'XK_Georgian_ghan'                       => 0x10010e6,
  'XK_Georgian_qar'                        => 0x10010e7,
  'XK_Georgian_shin'                       => 0x10010e8,
  'XK_Georgian_chin'                       => 0x10010e9,
  'XK_Georgian_can'                        => 0x10010ea,
  'XK_Georgian_jil'                        => 0x10010eb,
  'XK_Georgian_cil'                        => 0x10010ec,
  'XK_Georgian_char'                       => 0x10010ed,
  'XK_Georgian_xan'                        => 0x10010ee,
  'XK_Georgian_jhan'                       => 0x10010ef,
  'XK_Georgian_hae'                        => 0x10010f0,
  'XK_Georgian_he'                         => 0x10010f1,
  'XK_Georgian_hie'                        => 0x10010f2,
  'XK_Georgian_we'                         => 0x10010f3,
  'XK_Georgian_har'                        => 0x10010f4,
  'XK_Georgian_hoe'                        => 0x10010f5,
  'XK_Georgian_fi'                         => 0x10010f6,
  'XK_Xabovedot'                           => 0x1001e8a,
  'XK_Ibreve'                              => 0x100012c,
  'XK_Zstroke'                             => 0x10001b5,
  'XK_Gcaron'                              => 0x10001e6,
  'XK_Ocaron'                              => 0x10001d1,
  'XK_Obarred'                             => 0x100019f,
  'XK_xabovedot'                           => 0x1001e8b,
  'XK_ibreve'                              => 0x100012d,
  'XK_zstroke'                             => 0x10001b6,
  'XK_gcaron'                              => 0x10001e7,
  'XK_ocaron'                              => 0x10001d2,
  'XK_obarred'                             => 0x1000275,
  'XK_SCHWA'                               => 0x100018f,
  'XK_schwa'                               => 0x1000259,
  'XK_Lbelowdot'                           => 0x1001e36,
  'XK_lbelowdot'                           => 0x1001e37,
  'XK_Abelowdot'                           => 0x1001ea0,
  'XK_abelowdot'                           => 0x1001ea1,
  'XK_Ahook'                               => 0x1001ea2,
  'XK_ahook'                               => 0x1001ea3,
  'XK_Acircumflexacute'                    => 0x1001ea4,
  'XK_acircumflexacute'                    => 0x1001ea5,
  'XK_Acircumflexgrave'                    => 0x1001ea6,
  'XK_acircumflexgrave'                    => 0x1001ea7,
  'XK_Acircumflexhook'                     => 0x1001ea8,
  'XK_acircumflexhook'                     => 0x1001ea9,
  'XK_Acircumflextilde'                    => 0x1001eaa,
  'XK_acircumflextilde'                    => 0x1001eab,
  'XK_Acircumflexbelowdot'                 => 0x1001eac,
  'XK_acircumflexbelowdot'                 => 0x1001ead,
  'XK_Abreveacute'                         => 0x1001eae,
  'XK_abreveacute'                         => 0x1001eaf,
  'XK_Abrevegrave'                         => 0x1001eb0,
  'XK_abrevegrave'                         => 0x1001eb1,
  'XK_Abrevehook'                          => 0x1001eb2,
  'XK_abrevehook'                          => 0x1001eb3,
  'XK_Abrevetilde'                         => 0x1001eb4,
  'XK_abrevetilde'                         => 0x1001eb5,
  'XK_Abrevebelowdot'                      => 0x1001eb6,
  'XK_abrevebelowdot'                      => 0x1001eb7,
  'XK_Ebelowdot'                           => 0x1001eb8,
  'XK_ebelowdot'                           => 0x1001eb9,
  'XK_Ehook'                               => 0x1001eba,
  'XK_ehook'                               => 0x1001ebb,
  'XK_Etilde'                              => 0x1001ebc,
  'XK_etilde'                              => 0x1001ebd,
  'XK_Ecircumflexacute'                    => 0x1001ebe,
  'XK_ecircumflexacute'                    => 0x1001ebf,
  'XK_Ecircumflexgrave'                    => 0x1001ec0,
  'XK_ecircumflexgrave'                    => 0x1001ec1,
  'XK_Ecircumflexhook'                     => 0x1001ec2,
  'XK_ecircumflexhook'                     => 0x1001ec3,
  'XK_Ecircumflextilde'                    => 0x1001ec4,
  'XK_ecircumflextilde'                    => 0x1001ec5,
  'XK_Ecircumflexbelowdot'                 => 0x1001ec6,
  'XK_ecircumflexbelowdot'                 => 0x1001ec7,
  'XK_Ihook'                               => 0x1001ec8,
  'XK_ihook'                               => 0x1001ec9,
  'XK_Ibelowdot'                           => 0x1001eca,
  'XK_ibelowdot'                           => 0x1001ecb,
  'XK_Obelowdot'                           => 0x1001ecc,
  'XK_obelowdot'                           => 0x1001ecd,
  'XK_Ohook'                               => 0x1001ece,
  'XK_ohook'                               => 0x1001ecf,
  'XK_Ocircumflexacute'                    => 0x1001ed0,
  'XK_ocircumflexacute'                    => 0x1001ed1,
  'XK_Ocircumflexgrave'                    => 0x1001ed2,
  'XK_ocircumflexgrave'                    => 0x1001ed3,
  'XK_Ocircumflexhook'                     => 0x1001ed4,
  'XK_ocircumflexhook'                     => 0x1001ed5,
  'XK_Ocircumflextilde'                    => 0x1001ed6,
  'XK_ocircumflextilde'                    => 0x1001ed7,
  'XK_Ocircumflexbelowdot'                 => 0x1001ed8,
  'XK_ocircumflexbelowdot'                 => 0x1001ed9,
  'XK_Ohornacute'                          => 0x1001eda,
  'XK_ohornacute'                          => 0x1001edb,
  'XK_Ohorngrave'                          => 0x1001edc,
  'XK_ohorngrave'                          => 0x1001edd,
  'XK_Ohornhook'                           => 0x1001ede,
  'XK_ohornhook'                           => 0x1001edf,
  'XK_Ohorntilde'                          => 0x1001ee0,
  'XK_ohorntilde'                          => 0x1001ee1,
  'XK_Ohornbelowdot'                       => 0x1001ee2,
  'XK_ohornbelowdot'                       => 0x1001ee3,
  'XK_Ubelowdot'                           => 0x1001ee4,
  'XK_ubelowdot'                           => 0x1001ee5,
  'XK_Uhook'                               => 0x1001ee6,
  'XK_uhook'                               => 0x1001ee7,
  'XK_Uhornacute'                          => 0x1001ee8,
  'XK_uhornacute'                          => 0x1001ee9,
  'XK_Uhorngrave'                          => 0x1001eea,
  'XK_uhorngrave'                          => 0x1001eeb,
  'XK_Uhornhook'                           => 0x1001eec,
  'XK_uhornhook'                           => 0x1001eed,
  'XK_Uhorntilde'                          => 0x1001eee,
  'XK_uhorntilde'                          => 0x1001eef,
  'XK_Uhornbelowdot'                       => 0x1001ef0,
  'XK_uhornbelowdot'                       => 0x1001ef1,
  'XK_Ybelowdot'                           => 0x1001ef4,
  'XK_ybelowdot'                           => 0x1001ef5,
  'XK_Yhook'                               => 0x1001ef6,
  'XK_yhook'                               => 0x1001ef7,
  'XK_Ytilde'                              => 0x1001ef8,
  'XK_ytilde'                              => 0x1001ef9,
  'XK_Ohorn'                               => 0x10001a0,
  'XK_ohorn'                               => 0x10001a1,
  'XK_Uhorn'                               => 0x10001af,
  'XK_uhorn'                               => 0x10001b0,
  'XK_EcuSign'                             => 0x10020a0,
  'XK_ColonSign'                           => 0x10020a1,
  'XK_CruzeiroSign'                        => 0x10020a2,
  'XK_FFrancSign'                          => 0x10020a3,
  'XK_LiraSign'                            => 0x10020a4,
  'XK_MillSign'                            => 0x10020a5,
  'XK_NairaSign'                           => 0x10020a6,
  'XK_PesetaSign'                          => 0x10020a7,
  'XK_RupeeSign'                           => 0x10020a8,
  'XK_WonSign'                             => 0x10020a9,
  'XK_NewSheqelSign'                       => 0x10020aa,
  'XK_DongSign'                            => 0x10020ab,
  'XK_EuroSign'                            => 0x20ac,
  'XK_zerosuperior'                        => 0x1002070,
  'XK_foursuperior'                        => 0x1002074,
  'XK_fivesuperior'                        => 0x1002075,
  'XK_sixsuperior'                         => 0x1002076,
  'XK_sevensuperior'                       => 0x1002077,
  'XK_eightsuperior'                       => 0x1002078,
  'XK_ninesuperior'                        => 0x1002079,
  'XK_zerosubscript'                       => 0x1002080,
  'XK_onesubscript'                        => 0x1002081,
  'XK_twosubscript'                        => 0x1002082,
  'XK_threesubscript'                      => 0x1002083,
  'XK_foursubscript'                       => 0x1002084,
  'XK_fivesubscript'                       => 0x1002085,
  'XK_sixsubscript'                        => 0x1002086,
  'XK_sevensubscript'                      => 0x1002087,
  'XK_eightsubscript'                      => 0x1002088,
  'XK_ninesubscript'                       => 0x1002089,
  'XK_partdifferential'                    => 0x1002202,
  'XK_emptyset'                            => 0x1002205,
  'XK_elementof'                           => 0x1002208,
  'XK_notelementof'                        => 0x1002209,
  'XK_containsas'                          => 0x100220,
  'XK_squareroot'                          => 0x100221,
  'XK_cuberoot'                            => 0x100221,
  'XK_fourthroot'                          => 0x100221,
  'XK_dintegral'                           => 0x100222,
  'XK_tintegral'                           => 0x100222,
  'XK_because'                             => 0x1002235,
  'XK_approxeq'                            => 0x1002248,
  'XK_notapproxeq'                         => 0x1002247,
  'XK_notidentical'                        => 0x1002262,
  'XK_stricteq'                            => 0x1002263,
  'XK_braille_dot_1'                       => 0xfff1,
  'XK_braille_dot_2'                       => 0xfff2,
  'XK_braille_dot_3'                       => 0xfff3,
  'XK_braille_dot_4'                       => 0xfff4,
  'XK_braille_dot_5'                       => 0xfff5,
  'XK_braille_dot_6'                       => 0xfff6,
  'XK_braille_dot_7'                       => 0xfff7,
  'XK_braille_dot_8'                       => 0xfff8,
  'XK_braille_dot_9'                       => 0xfff9,
  'XK_braille_dot_10'                      => 0xfffa,
  'XK_braille_blank'                       => 0x1002800,
  'XK_braille_dots_1'                      => 0x1002801,
  'XK_braille_dots_2'                      => 0x1002802,
  'XK_braille_dots_12'                     => 0x1002803,
  'XK_braille_dots_3'                      => 0x1002804,
  'XK_braille_dots_13'                     => 0x1002805,
  'XK_braille_dots_23'                     => 0x1002806,
  'XK_braille_dots_123'                    => 0x1002807,
  'XK_braille_dots_4'                      => 0x1002808,
  'XK_braille_dots_14'                     => 0x1002809,
  'XK_braille_dots_24'                     => 0x100280a,
  'XK_braille_dots_124'                    => 0x100280b,
  'XK_braille_dots_34'                     => 0x100280c,
  'XK_braille_dots_134'                    => 0x100280d,
  'XK_braille_dots_234'                    => 0x100280e,
  'XK_braille_dots_1234'                   => 0x100280f,
  'XK_braille_dots_5'                      => 0x1002810,
  'XK_braille_dots_15'                     => 0x1002811,
  'XK_braille_dots_25'                     => 0x1002812,
  'XK_braille_dots_125'                    => 0x1002813,
  'XK_braille_dots_35'                     => 0x1002814,
  'XK_braille_dots_135'                    => 0x1002815,
  'XK_braille_dots_235'                    => 0x1002816,
  'XK_braille_dots_1235'                   => 0x1002817,
  'XK_braille_dots_45'                     => 0x1002818,
  'XK_braille_dots_145'                    => 0x1002819,
  'XK_braille_dots_245'                    => 0x100281a,
  'XK_braille_dots_1245'                   => 0x100281b,
  'XK_braille_dots_345'                    => 0x100281c,
  'XK_braille_dots_1345'                   => 0x100281d,
  'XK_braille_dots_2345'                   => 0x100281e,
  'XK_braille_dots_12345'                  => 0x100281f,
  'XK_braille_dots_6'                      => 0x1002820,
  'XK_braille_dots_16'                     => 0x1002821,
  'XK_braille_dots_26'                     => 0x1002822,
  'XK_braille_dots_126'                    => 0x1002823,
  'XK_braille_dots_36'                     => 0x1002824,
  'XK_braille_dots_136'                    => 0x1002825,
  'XK_braille_dots_236'                    => 0x1002826,
  'XK_braille_dots_1236'                   => 0x1002827,
  'XK_braille_dots_46'                     => 0x1002828,
  'XK_braille_dots_146'                    => 0x1002829,
  'XK_braille_dots_246'                    => 0x100282a,
  'XK_braille_dots_1246'                   => 0x100282b,
  'XK_braille_dots_346'                    => 0x100282c,
  'XK_braille_dots_1346'                   => 0x100282d,
  'XK_braille_dots_2346'                   => 0x100282e,
  'XK_braille_dots_12346'                  => 0x100282f,
  'XK_braille_dots_56'                     => 0x1002830,
  'XK_braille_dots_156'                    => 0x1002831,
  'XK_braille_dots_256'                    => 0x1002832,
  'XK_braille_dots_1256'                   => 0x1002833,
  'XK_braille_dots_356'                    => 0x1002834,
  'XK_braille_dots_1356'                   => 0x1002835,
  'XK_braille_dots_2356'                   => 0x1002836,
  'XK_braille_dots_12356'                  => 0x1002837,
  'XK_braille_dots_456'                    => 0x1002838,
  'XK_braille_dots_1456'                   => 0x1002839,
  'XK_braille_dots_2456'                   => 0x100283a,
  'XK_braille_dots_12456'                  => 0x100283b,
  'XK_braille_dots_3456'                   => 0x100283c,
  'XK_braille_dots_13456'                  => 0x100283d,
  'XK_braille_dots_23456'                  => 0x100283e,
  'XK_braille_dots_123456'                 => 0x100283f,
  'XK_braille_dots_7'                      => 0x1002840,
  'XK_braille_dots_17'                     => 0x1002841,
  'XK_braille_dots_27'                     => 0x1002842,
  'XK_braille_dots_127'                    => 0x1002843,
  'XK_braille_dots_37'                     => 0x1002844,
  'XK_braille_dots_137'                    => 0x1002845,
  'XK_braille_dots_237'                    => 0x1002846,
  'XK_braille_dots_1237'                   => 0x1002847,
  'XK_braille_dots_47'                     => 0x1002848,
  'XK_braille_dots_147'                    => 0x1002849,
  'XK_braille_dots_247'                    => 0x100284a,
  'XK_braille_dots_1247'                   => 0x100284b,
  'XK_braille_dots_347'                    => 0x100284c,
  'XK_braille_dots_1347'                   => 0x100284d,
  'XK_braille_dots_2347'                   => 0x100284e,
  'XK_braille_dots_12347'                  => 0x100284f,
  'XK_braille_dots_57'                     => 0x1002850,
  'XK_braille_dots_157'                    => 0x1002851,
  'XK_braille_dots_257'                    => 0x1002852,
  'XK_braille_dots_1257'                   => 0x1002853,
  'XK_braille_dots_357'                    => 0x1002854,
  'XK_braille_dots_1357'                   => 0x1002855,
  'XK_braille_dots_2357'                   => 0x1002856,
  'XK_braille_dots_12357'                  => 0x1002857,
  'XK_braille_dots_457'                    => 0x1002858,
  'XK_braille_dots_1457'                   => 0x1002859,
  'XK_braille_dots_2457'                   => 0x100285a,
  'XK_braille_dots_12457'                  => 0x100285b,
  'XK_braille_dots_3457'                   => 0x100285c,
  'XK_braille_dots_13457'                  => 0x100285d,
  'XK_braille_dots_23457'                  => 0x100285e,
  'XK_braille_dots_123457'                 => 0x100285f,
  'XK_braille_dots_67'                     => 0x1002860,
  'XK_braille_dots_167'                    => 0x1002861,
  'XK_braille_dots_267'                    => 0x1002862,
  'XK_braille_dots_1267'                   => 0x1002863,
  'XK_braille_dots_367'                    => 0x1002864,
  'XK_braille_dots_1367'                   => 0x1002865,
  'XK_braille_dots_2367'                   => 0x1002866,
  'XK_braille_dots_12367'                  => 0x1002867,
  'XK_braille_dots_467'                    => 0x1002868,
  'XK_braille_dots_1467'                   => 0x1002869,
  'XK_braille_dots_2467'                   => 0x100286a,
  'XK_braille_dots_12467'                  => 0x100286b,
  'XK_braille_dots_3467'                   => 0x100286c,
  'XK_braille_dots_13467'                  => 0x100286d,
  'XK_braille_dots_23467'                  => 0x100286e,
  'XK_braille_dots_123467'                 => 0x100286f,
  'XK_braille_dots_567'                    => 0x1002870,
  'XK_braille_dots_1567'                   => 0x1002871,
  'XK_braille_dots_2567'                   => 0x1002872,
  'XK_braille_dots_12567'                  => 0x1002873,
  'XK_braille_dots_3567'                   => 0x1002874,
  'XK_braille_dots_13567'                  => 0x1002875,
  'XK_braille_dots_23567'                  => 0x1002876,
  'XK_braille_dots_123567'                 => 0x1002877,
  'XK_braille_dots_4567'                   => 0x1002878,
  'XK_braille_dots_14567'                  => 0x1002879,
  'XK_braille_dots_24567'                  => 0x100287a,
  'XK_braille_dots_124567'                 => 0x100287b,
  'XK_braille_dots_34567'                  => 0x100287c,
  'XK_braille_dots_134567'                 => 0x100287d,
  'XK_braille_dots_234567'                 => 0x100287e,
  'XK_braille_dots_1234567'                => 0x100287f,
  'XK_braille_dots_8'                      => 0x1002880,
  'XK_braille_dots_18'                     => 0x1002881,
  'XK_braille_dots_28'                     => 0x1002882,
  'XK_braille_dots_128'                    => 0x1002883,
  'XK_braille_dots_38'                     => 0x1002884,
  'XK_braille_dots_138'                    => 0x1002885,
  'XK_braille_dots_238'                    => 0x1002886,
  'XK_braille_dots_1238'                   => 0x1002887,
  'XK_braille_dots_48'                     => 0x1002888,
  'XK_braille_dots_148'                    => 0x1002889,
  'XK_braille_dots_248'                    => 0x100288a,
  'XK_braille_dots_1248'                   => 0x100288b,
  'XK_braille_dots_348'                    => 0x100288c,
  'XK_braille_dots_1348'                   => 0x100288d,
  'XK_braille_dots_2348'                   => 0x100288e,
  'XK_braille_dots_12348'                  => 0x100288f,
  'XK_braille_dots_58'                     => 0x1002890,
  'XK_braille_dots_158'                    => 0x1002891,
  'XK_braille_dots_258'                    => 0x1002892,
  'XK_braille_dots_1258'                   => 0x1002893,
  'XK_braille_dots_358'                    => 0x1002894,
  'XK_braille_dots_1358'                   => 0x1002895,
  'XK_braille_dots_2358'                   => 0x1002896,
  'XK_braille_dots_12358'                  => 0x1002897,
  'XK_braille_dots_458'                    => 0x1002898,
  'XK_braille_dots_1458'                   => 0x1002899,
  'XK_braille_dots_2458'                   => 0x100289a,
  'XK_braille_dots_12458'                  => 0x100289b,
  'XK_braille_dots_3458'                   => 0x100289c,
  'XK_braille_dots_13458'                  => 0x100289d,
  'XK_braille_dots_23458'                  => 0x100289e,
  'XK_braille_dots_123458'                 => 0x100289f,
  'XK_braille_dots_68'                     => 0x10028a0,
  'XK_braille_dots_168'                    => 0x10028a1,
  'XK_braille_dots_268'                    => 0x10028a2,
  'XK_braille_dots_1268'                   => 0x10028a3,
  'XK_braille_dots_368'                    => 0x10028a4,
  'XK_braille_dots_1368'                   => 0x10028a5,
  'XK_braille_dots_2368'                   => 0x10028a6,
  'XK_braille_dots_12368'                  => 0x10028a7,
  'XK_braille_dots_468'                    => 0x10028a8,
  'XK_braille_dots_1468'                   => 0x10028a9,
  'XK_braille_dots_2468'                   => 0x10028aa,
  'XK_braille_dots_12468'                  => 0x10028ab,
  'XK_braille_dots_3468'                   => 0x10028ac,
  'XK_braille_dots_13468'                  => 0x10028ad,
  'XK_braille_dots_23468'                  => 0x10028ae,
  'XK_braille_dots_123468'                 => 0x10028af,
  'XK_braille_dots_568'                    => 0x10028b0,
  'XK_braille_dots_1568'                   => 0x10028b1,
  'XK_braille_dots_2568'                   => 0x10028b2,
  'XK_braille_dots_12568'                  => 0x10028b3,
  'XK_braille_dots_3568'                   => 0x10028b4,
  'XK_braille_dots_13568'                  => 0x10028b5,
  'XK_braille_dots_23568'                  => 0x10028b6,
  'XK_braille_dots_123568'                 => 0x10028b7,
  'XK_braille_dots_4568'                   => 0x10028b8,
  'XK_braille_dots_14568'                  => 0x10028b9,
  'XK_braille_dots_24568'                  => 0x10028ba,
  'XK_braille_dots_124568'                 => 0x10028bb,
  'XK_braille_dots_34568'                  => 0x10028bc,
  'XK_braille_dots_134568'                 => 0x10028bd,
  'XK_braille_dots_234568'                 => 0x10028be,
  'XK_braille_dots_1234568'                => 0x10028bf,
  'XK_braille_dots_78'                     => 0x10028c0,
  'XK_braille_dots_178'                    => 0x10028c1,
  'XK_braille_dots_278'                    => 0x10028c2,
  'XK_braille_dots_1278'                   => 0x10028c3,
  'XK_braille_dots_378'                    => 0x10028c4,
  'XK_braille_dots_1378'                   => 0x10028c5,
  'XK_braille_dots_2378'                   => 0x10028c6,
  'XK_braille_dots_12378'                  => 0x10028c7,
  'XK_braille_dots_478'                    => 0x10028c8,
  'XK_braille_dots_1478'                   => 0x10028c9,
  'XK_braille_dots_2478'                   => 0x10028ca,
  'XK_braille_dots_12478'                  => 0x10028cb,
  'XK_braille_dots_3478'                   => 0x10028cc,
  'XK_braille_dots_13478'                  => 0x10028cd,
  'XK_braille_dots_23478'                  => 0x10028ce,
  'XK_braille_dots_123478'                 => 0x10028cf,
  'XK_braille_dots_578'                    => 0x10028d0,
  'XK_braille_dots_1578'                   => 0x10028d1,
  'XK_braille_dots_2578'                   => 0x10028d2,
  'XK_braille_dots_12578'                  => 0x10028d3,
  'XK_braille_dots_3578'                   => 0x10028d4,
  'XK_braille_dots_13578'                  => 0x10028d5,
  'XK_braille_dots_23578'                  => 0x10028d6,
  'XK_braille_dots_123578'                 => 0x10028d7,
  'XK_braille_dots_4578'                   => 0x10028d8,
  'XK_braille_dots_14578'                  => 0x10028d9,
  'XK_braille_dots_24578'                  => 0x10028da,
  'XK_braille_dots_124578'                 => 0x10028db,
  'XK_braille_dots_34578'                  => 0x10028dc,
  'XK_braille_dots_134578'                 => 0x10028dd,
  'XK_braille_dots_234578'                 => 0x10028de,
  'XK_braille_dots_1234578'                => 0x10028df,
  'XK_braille_dots_678'                    => 0x10028e0,
  'XK_braille_dots_1678'                   => 0x10028e1,
  'XK_braille_dots_2678'                   => 0x10028e2,
  'XK_braille_dots_12678'                  => 0x10028e3,
  'XK_braille_dots_3678'                   => 0x10028e4,
  'XK_braille_dots_13678'                  => 0x10028e5,
  'XK_braille_dots_23678'                  => 0x10028e6,
  'XK_braille_dots_123678'                 => 0x10028e7,
  'XK_braille_dots_4678'                   => 0x10028e8,
  'XK_braille_dots_14678'                  => 0x10028e9,
  'XK_braille_dots_24678'                  => 0x10028ea,
  'XK_braille_dots_124678'                 => 0x10028eb,
  'XK_braille_dots_34678'                  => 0x10028ec,
  'XK_braille_dots_134678'                 => 0x10028ed,
  'XK_braille_dots_234678'                 => 0x10028ee,
  'XK_braille_dots_1234678'                => 0x10028ef,
  'XK_braille_dots_5678'                   => 0x10028f0,
  'XK_braille_dots_15678'                  => 0x10028f1,
  'XK_braille_dots_25678'                  => 0x10028f2,
  'XK_braille_dots_125678'                 => 0x10028f3,
  'XK_braille_dots_35678'                  => 0x10028f4,
  'XK_braille_dots_135678'                 => 0x10028f5,
  'XK_braille_dots_235678'                 => 0x10028f6,
  'XK_braille_dots_1235678'                => 0x10028f7,
  'XK_braille_dots_45678'                  => 0x10028f8,
  'XK_braille_dots_145678'                 => 0x10028f9,
  'XK_braille_dots_245678'                 => 0x10028fa,
  'XK_braille_dots_1245678'                => 0x10028fb,
  'XK_braille_dots_345678'                 => 0x10028fc,
  'XK_braille_dots_1345678'                => 0x10028fd,
  'XK_braille_dots_2345678'                => 0x10028fe,
  'XK_braille_dots_12345678'               => 0x10028ff,
  'XK_Sinh_ng'                             => 0x1000d82,
  'XK_Sinh_h2'                             => 0x1000d83,
  'XK_Sinh_a'                              => 0x1000d85,
  'XK_Sinh_aa'                             => 0x1000d86,
  'XK_Sinh_ae'                             => 0x1000d87,
  'XK_Sinh_aee'                            => 0x1000d88,
  'XK_Sinh_i'                              => 0x1000d89,
  'XK_Sinh_ii'                             => 0x1000d8a,
  'XK_Sinh_u'                              => 0x1000d8b,
  'XK_Sinh_uu'                             => 0x1000d8c,
  'XK_Sinh_ri'                             => 0x1000d8d,
  'XK_Sinh_rii'                            => 0x1000d8e,
  'XK_Sinh_lu'                             => 0x1000d8f,
  'XK_Sinh_luu'                            => 0x1000d90,
  'XK_Sinh_e'                              => 0x1000d91,
  'XK_Sinh_ee'                             => 0x1000d92,
  'XK_Sinh_ai'                             => 0x1000d93,
  'XK_Sinh_o'                              => 0x1000d94,
  'XK_Sinh_oo'                             => 0x1000d95,
  'XK_Sinh_au'                             => 0x1000d96,
  'XK_Sinh_ka'                             => 0x1000d9a,
  'XK_Sinh_kha'                            => 0x1000d9b,
  'XK_Sinh_ga'                             => 0x1000d9c,
  'XK_Sinh_gha'                            => 0x1000d9d,
  'XK_Sinh_ng2'                            => 0x1000d9e,
  'XK_Sinh_nga'                            => 0x1000d9f,
  'XK_Sinh_ca'                             => 0x1000da0,
  'XK_Sinh_cha'                            => 0x1000da1,
  'XK_Sinh_ja'                             => 0x1000da2,
  'XK_Sinh_jha'                            => 0x1000da3,
  'XK_Sinh_nya'                            => 0x1000da4,
  'XK_Sinh_jnya'                           => 0x1000da5,
  'XK_Sinh_nja'                            => 0x1000da6,
  'XK_Sinh_tta'                            => 0x1000da7,
  'XK_Sinh_ttha'                           => 0x1000da8,
  'XK_Sinh_dda'                            => 0x1000da9,
  'XK_Sinh_ddha'                           => 0x1000daa,
  'XK_Sinh_nna'                            => 0x1000dab,
  'XK_Sinh_ndda'                           => 0x1000dac,
  'XK_Sinh_tha'                            => 0x1000dad,
  'XK_Sinh_thha'                           => 0x1000dae,
  'XK_Sinh_dha'                            => 0x1000daf,
  'XK_Sinh_dhha'                           => 0x1000db0,
  'XK_Sinh_na'                             => 0x1000db1,
  'XK_Sinh_ndha'                           => 0x1000db3,
  'XK_Sinh_pa'                             => 0x1000db4,
  'XK_Sinh_pha'                            => 0x1000db5,
  'XK_Sinh_ba'                             => 0x1000db6,
  'XK_Sinh_bha'                            => 0x1000db7,
  'XK_Sinh_ma'                             => 0x1000db8,
  'XK_Sinh_mba'                            => 0x1000db9,
  'XK_Sinh_ya'                             => 0x1000dba,
  'XK_Sinh_ra'                             => 0x1000dbb,
  'XK_Sinh_la'                             => 0x1000dbd,
  'XK_Sinh_va'                             => 0x1000dc0,
  'XK_Sinh_sha'                            => 0x1000dc1,
  'XK_Sinh_ssha'                           => 0x1000dc2,
  'XK_Sinh_sa'                             => 0x1000dc3,
  'XK_Sinh_ha'                             => 0x1000dc4,
  'XK_Sinh_lla'                            => 0x1000dc5,
  'XK_Sinh_fa'                             => 0x1000dc6,
  'XK_Sinh_al'                             => 0x1000dca,
  'XK_Sinh_aa2'                            => 0x1000dcf,
  'XK_Sinh_ae2'                            => 0x1000dd0,
  'XK_Sinh_aee2'                           => 0x1000dd1,
  'XK_Sinh_i2'                             => 0x1000dd2,
  'XK_Sinh_ii2'                            => 0x1000dd3,
  'XK_Sinh_u2'                             => 0x1000dd4,
  'XK_Sinh_uu2'                            => 0x1000dd6,
  'XK_Sinh_ru2'                            => 0x1000dd8,
  'XK_Sinh_e2'                             => 0x1000dd9,
  'XK_Sinh_ee2'                            => 0x1000dda,
  'XK_Sinh_ai2'                            => 0x1000ddb,
  'XK_Sinh_o2'                             => 0x1000ddc,
  'XK_Sinh_oo2'                            => 0x1000ddd,
  'XK_Sinh_au2'                            => 0x1000dde,
  'XK_Sinh_lu2'                            => 0x1000ddf,
  'XK_Sinh_ruu2'                           => 0x1000df2,
  'XK_Sinh_luu2'                           => 0x1000df3,
  'XK_Sinh_kunddaliya'                     => 0x1000df4,

  # /usr/include/X11/XF86keysym.h
  'XF86XK_ModeLock'                        => 0x1008,
  'XF86XK_MonBrightnessUp'                 => 0x1008,
  'XF86XK_MonBrightnessDown'               => 0x1008,
  'XF86XK_KbdLightOnOff'                   => 0x1008,
  'XF86XK_KbdBrightnessUp'                 => 0x1008,
  'XF86XK_KbdBrightnessDown'               => 0x1008,
  'XF86XK_Standby'                         => 0x1008,
  'XF86XK_AudioLowerVolume'                => 0x1008,
  'XF86XK_AudioMute'                       => 0x1008,
  'XF86XK_AudioRaiseVolume'                => 0x1008,
  'XF86XK_AudioPlay'                       => 0x1008,
  'XF86XK_AudioStop'                       => 0x1008,
  'XF86XK_AudioPrev'                       => 0x1008,
  'XF86XK_AudioNext'                       => 0x1008,
  'XF86XK_HomePage'                        => 0x1008,
  'XF86XK_Mail'                            => 0x1008,
  'XF86XK_Start'                           => 0x1008,
  'XF86XK_Search'                          => 0x1008,
  'XF86XK_AudioRecord'                     => 0x1008,
  'XF86XK_Calculator'                      => 0x1008,
  'XF86XK_Memo'                            => 0x1008,
  'XF86XK_ToDoList'                        => 0x1008,
  'XF86XK_Calendar'                        => 0x1008,
  'XF86XK_PowerDown'                       => 0x1008,
  'XF86XK_ContrastAdjust'                  => 0x1008,
  'XF86XK_RockerUp'                        => 0x1008,
  'XF86XK_RockerDown'                      => 0x1008,
  'XF86XK_RockerEnter'                     => 0x1008,
  'XF86XK_Back'                            => 0x1008,
  'XF86XK_Forward'                         => 0x1008,
  'XF86XK_Stop'                            => 0x1008,
  'XF86XK_Refresh'                         => 0x1008,
  'XF86XK_PowerOff'                        => 0x1008,
  'XF86XK_WakeUp'                          => 0x1008,
  'XF86XK_Eject'                           => 0x1008,
  'XF86XK_ScreenSaver'                     => 0x1008,
  'XF86XK_WWW'                             => 0x1008,
  'XF86XK_Sleep'                           => 0x1008,
  'XF86XK_Favorites'                       => 0x1008,
  'XF86XK_AudioPause'                      => 0x1008,
  'XF86XK_AudioMedia'                      => 0x1008,
  'XF86XK_MyComputer'                      => 0x1008,
  'XF86XK_VendorHome'                      => 0x1008,
  'XF86XK_LightBulb'                       => 0x1008,
  'XF86XK_Shop'                            => 0x1008,
  'XF86XK_History'                         => 0x1008,
  'XF86XK_OpenURL'                         => 0x1008,
  'XF86XK_AddFavorite'                     => 0x1008,
  'XF86XK_HotLinks'                        => 0x1008,
  'XF86XK_BrightnessAdjust'                => 0x1008,
  'XF86XK_Finance'                         => 0x1008,
  'XF86XK_Community'                       => 0x1008,
  'XF86XK_AudioRewind'                     => 0x1008,
  'XF86XK_BackForward'                     => 0x1008,
  'XF86XK_Launch0'                         => 0x1008,
  'XF86XK_Launch1'                         => 0x1008,
  'XF86XK_Launch2'                         => 0x1008,
  'XF86XK_Launch3'                         => 0x1008,
  'XF86XK_Launch4'                         => 0x1008,
  'XF86XK_Launch5'                         => 0x1008,
  'XF86XK_Launch6'                         => 0x1008,
  'XF86XK_Launch7'                         => 0x1008,
  'XF86XK_Launch8'                         => 0x1008,
  'XF86XK_Launch9'                         => 0x1008,
  'XF86XK_LaunchA'                         => 0x1008,
  'XF86XK_LaunchB'                         => 0x1008,
  'XF86XK_LaunchC'                         => 0x1008,
  'XF86XK_LaunchD'                         => 0x1008,
  'XF86XK_LaunchE'                         => 0x1008,
  'XF86XK_LaunchF'                         => 0x1008,
  'XF86XK_ApplicationLeft'                 => 0x1008,
  'XF86XK_ApplicationRight'                => 0x1008,
  'XF86XK_Book'                            => 0x1008,
  'XF86XK_CD'                              => 0x1008,
  'XF86XK_Calculater'                      => 0x1008,
  'XF86XK_Clear'                           => 0x1008,
  'XF86XK_Close'                           => 0x1008,
  'XF86XK_Copy'                            => 0x1008,
  'XF86XK_Cut'                             => 0x1008,
  'XF86XK_Display'                         => 0x1008,
  'XF86XK_DOS'                             => 0x1008,
  'XF86XK_Documents'                       => 0x1008,
  'XF86XK_Excel'                           => 0x1008,
  'XF86XK_Explorer'                        => 0x1008,
  'XF86XK_Game'                            => 0x1008,
  'XF86XK_Go'                              => 0x1008,
  'XF86XK_iTouch'                          => 0x1008,
  'XF86XK_LogOff'                          => 0x1008,
  'XF86XK_Market'                          => 0x1008,
  'XF86XK_Meeting'                         => 0x1008,
  'XF86XK_MenuKB'                          => 0x1008,
  'XF86XK_MenuPB'                          => 0x1008,
  'XF86XK_MySites'                         => 0x1008,
  'XF86XK_New'                             => 0x1008,
  'XF86XK_News'                            => 0x1008,
  'XF86XK_OfficeHome'                      => 0x1008,
  'XF86XK_Open'                            => 0x1008,
  'XF86XK_Option'                          => 0x1008,
  'XF86XK_Paste'                           => 0x1008,
  'XF86XK_Phone'                           => 0x1008,
  'XF86XK_Q'                               => 0x1008,
  'XF86XK_Reply'                           => 0x1008,
  'XF86XK_Reload'                          => 0x1008,
  'XF86XK_RotateWindows'                   => 0x1008,
  'XF86XK_RotationPB'                      => 0x1008,
  'XF86XK_RotationKB'                      => 0x1008,
  'XF86XK_Save'                            => 0x1008,
  'XF86XK_ScrollUp'                        => 0x1008,
  'XF86XK_ScrollDown'                      => 0x1008,
  'XF86XK_ScrollClick'                     => 0x1008,
  'XF86XK_Send'                            => 0x1008,
  'XF86XK_Spell'                           => 0x1008,
  'XF86XK_SplitScreen'                     => 0x1008,
  'XF86XK_Support'                         => 0x1008,
  'XF86XK_TaskPane'                        => 0x1008,
  'XF86XK_Terminal'                        => 0x1008,
  'XF86XK_Tools'                           => 0x1008,
  'XF86XK_Travel'                          => 0x1008,
  'XF86XK_UserPB'                          => 0x1008,
  'XF86XK_User1KB'                         => 0x1008,
  'XF86XK_User2KB'                         => 0x1008,
  'XF86XK_Video'                           => 0x1008,
  'XF86XK_WheelButton'                     => 0x1008,
  'XF86XK_Word'                            => 0x1008,
  'XF86XK_Xfer'                            => 0x1008,
  'XF86XK_ZoomIn'                          => 0x1008,
  'XF86XK_ZoomOut'                         => 0x1008,
  'XF86XK_Away'                            => 0x1008,
  'XF86XK_Messenger'                       => 0x1008,
  'XF86XK_WebCam'                          => 0x1008,
  'XF86XK_MailForward'                     => 0x1008,
  'XF86XK_Pictures'                        => 0x1008,
  'XF86XK_Music'                           => 0x1008,
  'XF86XK_Battery'                         => 0x1008,
  'XF86XK_Bluetooth'                       => 0x1008,
  'XF86XK_WLAN'                            => 0x1008,
  'XF86XK_UWB'                             => 0x1008,
  'XF86XK_AudioForward'                    => 0x1008,
  'XF86XK_AudioRepeat'                     => 0x1008,
  'XF86XK_AudioRandomPlay'                 => 0x1008,
  'XF86XK_Subtitle'                        => 0x1008,
  'XF86XK_AudioCycleTrack'                 => 0x1008,
  'XF86XK_CycleAngle'                      => 0x1008,
  'XF86XK_FrameBack'                       => 0x1008,
  'XF86XK_FrameForward'                    => 0x1008,
  'XF86XK_Time'                            => 0x1008,
  'XF86XK_Select'                          => 0x1008,
  'XF86XK_View'                            => 0x1008,
  'XF86XK_TopMenu'                         => 0x1008,
  'XF86XK_Red'                             => 0x1008,
  'XF86XK_Green'                           => 0x1008,
  'XF86XK_Yellow'                          => 0x1008,
  'XF86XK_Blue'                            => 0x1008,
  'XF86XK_Suspend'                         => 0x1008,
  'XF86XK_Hibernate'                       => 0x1008,
  'XF86XK_TouchpadToggle'                  => 0x1008,
  'XF86XK_TouchpadOn'                      => 0x1008,
  'XF86XK_TouchpadOff'                     => 0x1008,
  'XF86XK_Switch_VT_1'                     => 0x1008,
  'XF86XK_Switch_VT_2'                     => 0x1008,
  'XF86XK_Switch_VT_3'                     => 0x1008,
  'XF86XK_Switch_VT_4'                     => 0x1008,
  'XF86XK_Switch_VT_5'                     => 0x1008,
  'XF86XK_Switch_VT_6'                     => 0x1008,
  'XF86XK_Switch_VT_7'                     => 0x1008,
  'XF86XK_Switch_VT_8'                     => 0x1008,
  'XF86XK_Switch_VT_9'                     => 0x1008,
  'XF86XK_Switch_VT_10'                    => 0x1008,
  'XF86XK_Switch_VT_11'                    => 0x1008,
  'XF86XK_Switch_VT_12'                    => 0x1008,
  'XF86XK_Ungrab'                          => 0x1008,
  'XF86XK_ClearGrab'                       => 0x1008,
  'XF86XK_Next_VMode'                      => 0x1008,
  'XF86XK_Prev_VMode'                      => 0x1008,
  'XF86XK_LogWindowTree'                   => 0x1008,
  'XF86XK_LogGrabInfo'                     => 0x1008,

  # /usr/include/X11/HPkeysym.h
  'hpXK_ClearLine'                         => 0x1000,
  'hpXK_InsertLine'                        => 0x1000,
  'hpXK_DeleteLine'                        => 0x1000,
  'hpXK_InsertChar'                        => 0x1000,
  'hpXK_DeleteChar'                        => 0x1000,
  'hpXK_BackTab'                           => 0x1000,
  'hpXK_KP_BackTab'                        => 0x1000,
  'hpXK_Modelock1'                         => 0x1000,
  'hpXK_Modelock2'                         => 0x1000,
  'hpXK_Reset'                             => 0x1000,
  'hpXK_System'                            => 0x1000,
  'hpXK_User'                              => 0x1000,
  'hpXK_mute_acute'                        => 0x100000,
  'hpXK_mute_grave'                        => 0x100000,
  'hpXK_mute_asciicircum'                  => 0x100000,
  'hpXK_mute_diaeresis'                    => 0x100000,
  'hpXK_mute_asciitilde'                   => 0x100000,
  'hpXK_lira'                              => 0x100000,
  'hpXK_guilder'                           => 0x100000,
  'hpXK_Ydiaeresis'                        => 0x100000,
  'hpXK_IO'                                => 0x100000,
  'hpXK_longminus'                         => 0x100000,
  'hpXK_block'                             => 0x100000,
  'osfXK_Copy'                             => 0x1004,
  'osfXK_Cut'                              => 0x1004,
  'osfXK_Paste'                            => 0x1004,
  'osfXK_BackTab'                          => 0x1004,
  'osfXK_BackSpace'                        => 0x1004,
  'osfXK_Clear'                            => 0x1004,
  'osfXK_Escape'                           => 0x1004,
  'osfXK_AddMode'                          => 0x1004,
  'osfXK_PrimaryPaste'                     => 0x1004,
  'osfXK_QuickPaste'                       => 0x1004,
  'osfXK_PageLeft'                         => 0x1004,
  'osfXK_PageUp'                           => 0x1004,
  'osfXK_PageDown'                         => 0x1004,
  'osfXK_PageRight'                        => 0x1004,
  'osfXK_Activate'                         => 0x1004,
  'osfXK_MenuBar'                          => 0x1004,
  'osfXK_Left'                             => 0x1004,
  'osfXK_Up'                               => 0x1004,
  'osfXK_Right'                            => 0x1004,
  'osfXK_Down'                             => 0x1004,
  'osfXK_EndLine'                          => 0x1004,
  'osfXK_BeginLine'                        => 0x1004,
  'osfXK_EndData'                          => 0x1004,
  'osfXK_BeginData'                        => 0x1004,
  'osfXK_PrevMenu'                         => 0x1004,
  'osfXK_NextMenu'                         => 0x1004,
  'osfXK_PrevField'                        => 0x1004,
  'osfXK_NextField'                        => 0x1004,
  'osfXK_Select'                           => 0x1004,
  'osfXK_Insert'                           => 0x1004,
  'osfXK_Undo'                             => 0x1004,
  'osfXK_Menu'                             => 0x1004,
  'osfXK_Cancel'                           => 0x1004,
  'osfXK_Help'                             => 0x1004,
  'osfXK_SelectAll'                        => 0x1004,
  'osfXK_DeselectAll'                      => 0x1004,
  'osfXK_Reselect'                         => 0x1004,
  'osfXK_Extend'                           => 0x1004,
  'osfXK_Restore'                          => 0x1004,
  'osfXK_Delete'                           => 0x1004,
  'XK_Reset'                               => 0x1000,
  'XK_System'                              => 0x1000,
  'XK_User'                                => 0x1000,
  'XK_ClearLine'                           => 0x1000,
  'XK_InsertLine'                          => 0x1000,
  'XK_DeleteLine'                          => 0x1000,
  'XK_InsertChar'                          => 0x1000,
  'XK_DeleteChar'                          => 0x1000,
  'XK_BackTab'                             => 0x1000,
  'XK_KP_BackTab'                          => 0x1000,
  'XK_Ext16bit_L'                          => 0x1000,
  'XK_Ext16bit_R'                          => 0x1000,
  'XK_mute_acute'                          => 0x100000a8,
  'XK_mute_grave'                          => 0x100000a9,
  'XK_mute_asciicircum'                    => 0x100000aa,
  'XK_mute_diaeresis'                      => 0x100000ab,
  'XK_mute_asciitilde'                     => 0x100000ac,
  'XK_lira'                                => 0x100000af,
  'XK_guilder'                             => 0x100000be,
  'XK_Ydiaeresis'                          => 0x100000ee,
  'XK_IO'                                  => 0x100000ee,
  'XK_longminus'                           => 0x100000f6,
  'XK_block'                               => 0x100000fc,

  # /usr/include/X11/keysym.h
}

Instance Method Summary collapse

Constructor Details

#initializeObject

Instance Method Details

#close_displayObject

#get_windowObject

#get_window_nameObject

#key(name, time = 0.01) ⇒ Object

Press and release a key

Parameters:

  • name (String)

    a key name

  • time (Float) (defaults to: 0.01)

    sleep time in seconds between actions


54
55
56
57
58
59
# File 'lib/x11_client.rb', line 54

def key(name, time = 0.01)
  keypdown(name)
  sleep(time)
  keyup(name)
  self
end

#key2sym(key) ⇒ Object

Convert X11 key name to symbol (integer)


35
36
37
# File 'lib/x11_client.rb', line 35

def key2sym(key)
  KEYSYM[key] or raise ArgumentError, "Can't convert #{key} key to X11 sym"
end

#keyactionObject

#keypdown(name) ⇒ Object

Press a key

Parameters:

  • name (String)

    a key name


41
42
43
# File 'lib/x11_client.rb', line 41

def keypdown(name)
  keyaction(key2sym(name), true)
end

#keyup(name) ⇒ Object

Release a key

Parameters:

  • name (String)

    a key name


47
48
49
# File 'lib/x11_client.rb', line 47

def keyup(name)
  keyaction(key2sym(name), false)
end

#mouseclickObject

#mousedownObject

#mousemoveObject

#mouseupObject

#open_displayObject

#root_windowObject


22
23
24
# File 'lib/x11_client.rb', line 22

def root_window
  get_window(root_window_id)
end

#root_window_childrenObject


26
27
28
# File 'lib/x11_client.rb', line 26

def root_window_children
  window_children(root_window_id)
end

#root_window_descendantsObject


30
31
32
# File 'lib/x11_client.rb', line 30

def root_window_descendants
  window_descendants(root_window_id)
end

#root_window_idObject

#startObject

#stopObject

#syncObject

#type_word(word) ⇒ Object

Type a word

Parameters:

  • word (SString)

    a string of ASCII characters without spaces etc…


63
64
65
66
67
68
# File 'lib/x11_client.rb', line 63

def type_word(word)
  word.each_char do |char|
    key("XK_#{char}")
  end
  self
end

#window_children(window_id) ⇒ Object


5
6
7
8
9
# File 'lib/x11_client.rb', line 5

def window_children(window_id)
  window_children_ids(window_id).map do |child_id|
    get_window(child_id)
  end.compact
end

#window_children_idsObject

#window_descendants(window_id) ⇒ Object


11
12
13
14
15
16
17
18
19
20
# File 'lib/x11_client.rb', line 11

def window_descendants(window_id)
  windows = []
  ids = [window_id]
  until ids.empty?
    window = get_window(ids.shift)
    windows << window
    ids += window_children_ids(window['id'])
  end
  windows
end