x11
Version:
A pure node.js JavaScript client implementing X Window (X11) protocol and extensions.
722 lines (660 loc) • 214 kB
JavaScript
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
This file is automatically translated from X.Org's xproto/keysymdef.h
Please, do not update this file with your hands, run keysyms.update.sh.
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
module.exports = {
/***********************************************************
Copyright 1987, 1994, 1998 The Open Group
Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation.
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
Except as contained in this notice, the name of The Open Group shall
not be used in advertising or otherwise to promote the sale, use or
other dealings in this Software without prior written authorization
from The Open Group.
Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts
All Rights Reserved
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the name of Digital not be
used in advertising or publicity pertaining to distribution of the
software without specific, written prior permission.
DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.
******************************************************************/
/*
* The "X11 Window System Protocol" standard defines in Appendix A the
* keysym codes. These 29-bit integer values identify characters or
* functions associated with each key (e.g., via the visible
* engraving) of a keyboard layout. This file assigns mnemonic macro
* names for these keysyms.
*
* This file is also compiled (by src/util/makekeys.c in libX11) into
* hash tables that can be accessed with X11 library functions such as
* XStringToKeysym() and XKeysymToString().
*
* Where a keysym corresponds one-to-one to an ISO 10646 / Unicode
* character, this is noted in a comment that provides both the U+xxxx
* Unicode position, as well as the official Unicode name of the
* character.
*
* Where the correspondence is either not one-to-one or semantically
* unclear, the Unicode position and name are enclosed in
* parentheses. Such legacy keysyms should be considered deprecated
* and are not recommended for use in future keyboard mappings.
*
* For any future extension of the keysyms with characters already
* found in ISO 10646 / Unicode, the following algorithm shall be
* used. The new keysym code position will simply be the character's
* Unicode number plus 0x01000000. The keysym values in the range
* 0x01000100 to 0x0110ffff are reserved to represent Unicode
* characters in the range (\u0100) to U+10FFFF.
*
* While most newer Unicode-based X11 clients do already accept
* Unicode-mapped keysyms in the range 0x01000100 to 0x0110ffff, it
* will remain necessary for clients -- in the interest of
* compatibility with existing servers -- to also understand the
* existing legacy keysym values in the range 0x0100 to 0x20ff.
*
* Where several mnemonic names are defined for the same keysym in this
* file, all but the first one listed should be considered deprecated.
*
* Mnemonic names for keysyms are defined in this file with lines
* that match one of these Perl regular expressions:
*
* /^\ XK_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\*: { code: U+([0-9A-F]{4,6}), description: null }, (.*) \*\/\s*$/
* /^\ XK_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*\/\*\(U+([0-9A-F]{4,6}): { code: (.*)\)\*\/\s*$/, description: null },
* /^\#define XK_([a-zA-Z_0-9]+)\s+0x([0-9a-f]+)\s*(\/\*\s*(.*)\s*\*\/)?\s*$/
*
* Before adding new keysyms, please do consider the following: In
* addition to the keysym names defined in this file, the
* XStringToKeysym() and XKeysymToString() functions will also handle
* any keysym string of the form "U0020" to "U007E" and "U00A0" to
* "U10FFFF" for all possible Unicode characters. In other words,
* every possible Unicode character has already a keysym string
* defined algorithmically, even if it is not listed here. Therefore,
* defining an additional keysym macro is only necessary where a
* non-hexadecimal mnemonic name is needed, or where the new keysym
* does not represent any existing Unicode character.
*
* When adding new keysyms to this file, do not forget to also update the
* following as needed:
*
* - the mappings in src/KeyBind.c in the repo
* git://anongit.freedesktop.org/xorg/lib/libX11.git
*
* - the protocol specification in specs/keysyms.xml
* in the repo git://anongit.freedesktop.org/xorg/proto/x11proto.git
*
*/
XK_VoidSymbol: { code: 0xffffff, description: "Void symbol" },
// Group XK_MISCELLANY
/*
* TTY function keys, cleverly chosen to map to ASCII, for convenience of
* programming, but could have been arbitrary (at the cost of lookup
* tables in client code).
*/
XK_BackSpace: { code: 0xff08, description: "Back space, back char" },
XK_Tab: { code: 0xff09, description: null },
XK_Linefeed: { code: 0xff0a, description: "Linefeed, LF" },
XK_Clear: { code: 0xff0b, description: null },
XK_Return: { code: 0xff0d, description: "Return, enter" },
XK_Pause: { code: 0xff13, description: "Pause, hold" },
XK_Scroll_Lock: { code: 0xff14, description: null },
XK_Sys_Req: { code: 0xff15, description: null },
XK_Escape: { code: 0xff1b, description: null },
XK_Delete: { code: 0xffff, description: "Delete, rubout" },
/* International & multi-key character composition */
XK_Multi_key: { code: 0xff20, description: "Multi-key character compose" },
XK_Codeinput: { code: 0xff37, description: null },
XK_SingleCandidate: { code: 0xff3c, description: null },
XK_MultipleCandidate: { code: 0xff3d, description: null },
XK_PreviousCandidate: { code: 0xff3e, description: null },
/* Japanese keyboard support */
XK_Kanji: { code: 0xff21, description: "Kanji, Kanji convert" },
XK_Muhenkan: { code: 0xff22, description: "Cancel Conversion" },
XK_Henkan_Mode: { code: 0xff23, description: "Start/Stop Conversion" },
XK_Henkan: { code: 0xff23, description: "Alias for Henkan_Mode" },
XK_Romaji: { code: 0xff24, description: "to Romaji" },
XK_Hiragana: { code: 0xff25, description: "to Hiragana" },
XK_Katakana: { code: 0xff26, description: "to Katakana" },
XK_Hiragana_Katakana: { code: 0xff27, description: "Hiragana/Katakana toggle" },
XK_Zenkaku: { code: 0xff28, description: "to Zenkaku" },
XK_Hankaku: { code: 0xff29, description: "to Hankaku" },
XK_Zenkaku_Hankaku: { code: 0xff2a, description: "Zenkaku/Hankaku toggle" },
XK_Touroku: { code: 0xff2b, description: "Add to Dictionary" },
XK_Massyo: { code: 0xff2c, description: "Delete from Dictionary" },
XK_Kana_Lock: { code: 0xff2d, description: "Kana Lock" },
XK_Kana_Shift: { code: 0xff2e, description: "Kana Shift" },
XK_Eisu_Shift: { code: 0xff2f, description: "Alphanumeric Shift" },
XK_Eisu_toggle: { code: 0xff30, description: "Alphanumeric toggle" },
XK_Kanji_Bangou: { code: 0xff37, description: "Codeinput" },
XK_Zen_Koho: { code: 0xff3d, description: "Multiple/All Candidate(s)" },
XK_Mae_Koho: { code: 0xff3e, description: "Previous Candidate" },
/* 0xff31 thru 0xff3f are under XK_KOREAN */
/* Cursor control & motion */
XK_Home: { code: 0xff50, description: null },
XK_Left: { code: 0xff51, description: "Move left, left arrow" },
XK_Up: { code: 0xff52, description: "Move up, up arrow" },
XK_Right: { code: 0xff53, description: "Move right, right arrow" },
XK_Down: { code: 0xff54, description: "Move down, down arrow" },
XK_Prior: { code: 0xff55, description: "Prior, previous" },
XK_Page_Up: { code: 0xff55, description: null },
XK_Next: { code: 0xff56, description: "Next" },
XK_Page_Down: { code: 0xff56, description: null },
XK_End: { code: 0xff57, description: "EOL" },
XK_Begin: { code: 0xff58, description: "BOL" },
/* Misc functions */
XK_Select: { code: 0xff60, description: "Select, mark" },
XK_Print: { code: 0xff61, description: null },
XK_Execute: { code: 0xff62, description: "Execute, run, do" },
XK_Insert: { code: 0xff63, description: "Insert, insert here" },
XK_Undo: { code: 0xff65, description: null },
XK_Redo: { code: 0xff66, description: "Redo, again" },
XK_Menu: { code: 0xff67, description: null },
XK_Find: { code: 0xff68, description: "Find, search" },
XK_Cancel: { code: 0xff69, description: "Cancel, stop, abort, exit" },
XK_Help: { code: 0xff6a, description: "Help" },
XK_Break: { code: 0xff6b, description: null },
XK_Mode_switch: { code: 0xff7e, description: "Character set switch" },
XK_script_switch: { code: 0xff7e, description: "Alias for mode_switch" },
XK_Num_Lock: { code: 0xff7f, description: null },
/* Keypad functions, keypad numbers cleverly chosen to map to ASCII */
XK_KP_Space: { code: 0xff80, description: "Space" },
XK_KP_Tab: { code: 0xff89, description: null },
XK_KP_Enter: { code: 0xff8d, description: "Enter" },
XK_KP_F1: { code: 0xff91, description: "PF1, KP_A, ..." },
XK_KP_F2: { code: 0xff92, description: null },
XK_KP_F3: { code: 0xff93, description: null },
XK_KP_F4: { code: 0xff94, description: null },
XK_KP_Home: { code: 0xff95, description: null },
XK_KP_Left: { code: 0xff96, description: null },
XK_KP_Up: { code: 0xff97, description: null },
XK_KP_Right: { code: 0xff98, description: null },
XK_KP_Down: { code: 0xff99, description: null },
XK_KP_Prior: { code: 0xff9a, description: null },
XK_KP_Page_Up: { code: 0xff9a, description: null },
XK_KP_Next: { code: 0xff9b, description: null },
XK_KP_Page_Down: { code: 0xff9b, description: null },
XK_KP_End: { code: 0xff9c, description: null },
XK_KP_Begin: { code: 0xff9d, description: null },
XK_KP_Insert: { code: 0xff9e, description: null },
XK_KP_Delete: { code: 0xff9f, description: null },
XK_KP_Equal: { code: 0xffbd, description: "Equals" },
XK_KP_Multiply: { code: 0xffaa, description: null },
XK_KP_Add: { code: 0xffab, description: null },
XK_KP_Separator: { code: 0xffac, description: "Separator, often comma" },
XK_KP_Subtract: { code: 0xffad, description: null },
XK_KP_Decimal: { code: 0xffae, description: null },
XK_KP_Divide: { code: 0xffaf, description: null },
XK_KP_0: { code: 0xffb0, description: null },
XK_KP_1: { code: 0xffb1, description: null },
XK_KP_2: { code: 0xffb2, description: null },
XK_KP_3: { code: 0xffb3, description: null },
XK_KP_4: { code: 0xffb4, description: null },
XK_KP_5: { code: 0xffb5, description: null },
XK_KP_6: { code: 0xffb6, description: null },
XK_KP_7: { code: 0xffb7, description: null },
XK_KP_8: { code: 0xffb8, description: null },
XK_KP_9: { code: 0xffb9, description: null },
/*
* Auxiliary functions; note the duplicate definitions for left and right
* function keys; Sun keyboards and a few other manufacturers have such
* function key groups on the left and/or right sides of the keyboard.
* We've not found a keyboard with more than 35 function keys total.
*/
XK_F1: { code: 0xffbe, description: null },
XK_F2: { code: 0xffbf, description: null },
XK_F3: { code: 0xffc0, description: null },
XK_F4: { code: 0xffc1, description: null },
XK_F5: { code: 0xffc2, description: null },
XK_F6: { code: 0xffc3, description: null },
XK_F7: { code: 0xffc4, description: null },
XK_F8: { code: 0xffc5, description: null },
XK_F9: { code: 0xffc6, description: null },
XK_F10: { code: 0xffc7, description: null },
XK_F11: { code: 0xffc8, description: null },
XK_L1: { code: 0xffc8, description: null },
XK_F12: { code: 0xffc9, description: null },
XK_L2: { code: 0xffc9, description: null },
XK_F13: { code: 0xffca, description: null },
XK_L3: { code: 0xffca, description: null },
XK_F14: { code: 0xffcb, description: null },
XK_L4: { code: 0xffcb, description: null },
XK_F15: { code: 0xffcc, description: null },
XK_L5: { code: 0xffcc, description: null },
XK_F16: { code: 0xffcd, description: null },
XK_L6: { code: 0xffcd, description: null },
XK_F17: { code: 0xffce, description: null },
XK_L7: { code: 0xffce, description: null },
XK_F18: { code: 0xffcf, description: null },
XK_L8: { code: 0xffcf, description: null },
XK_F19: { code: 0xffd0, description: null },
XK_L9: { code: 0xffd0, description: null },
XK_F20: { code: 0xffd1, description: null },
XK_L10: { code: 0xffd1, description: null },
XK_F21: { code: 0xffd2, description: null },
XK_R1: { code: 0xffd2, description: null },
XK_F22: { code: 0xffd3, description: null },
XK_R2: { code: 0xffd3, description: null },
XK_F23: { code: 0xffd4, description: null },
XK_R3: { code: 0xffd4, description: null },
XK_F24: { code: 0xffd5, description: null },
XK_R4: { code: 0xffd5, description: null },
XK_F25: { code: 0xffd6, description: null },
XK_R5: { code: 0xffd6, description: null },
XK_F26: { code: 0xffd7, description: null },
XK_R6: { code: 0xffd7, description: null },
XK_F27: { code: 0xffd8, description: null },
XK_R7: { code: 0xffd8, description: null },
XK_F28: { code: 0xffd9, description: null },
XK_R8: { code: 0xffd9, description: null },
XK_F29: { code: 0xffda, description: null },
XK_R9: { code: 0xffda, description: null },
XK_F30: { code: 0xffdb, description: null },
XK_R10: { code: 0xffdb, description: null },
XK_F31: { code: 0xffdc, description: null },
XK_R11: { code: 0xffdc, description: null },
XK_F32: { code: 0xffdd, description: null },
XK_R12: { code: 0xffdd, description: null },
XK_F33: { code: 0xffde, description: null },
XK_R13: { code: 0xffde, description: null },
XK_F34: { code: 0xffdf, description: null },
XK_R14: { code: 0xffdf, description: null },
XK_F35: { code: 0xffe0, description: null },
XK_R15: { code: 0xffe0, description: null },
/* Modifiers */
XK_Shift_L: { code: 0xffe1, description: "Left shift" },
XK_Shift_R: { code: 0xffe2, description: "Right shift" },
XK_Control_L: { code: 0xffe3, description: "Left control" },
XK_Control_R: { code: 0xffe4, description: "Right control" },
XK_Caps_Lock: { code: 0xffe5, description: "Caps lock" },
XK_Shift_Lock: { code: 0xffe6, description: "Shift lock" },
XK_Meta_L: { code: 0xffe7, description: "Left meta" },
XK_Meta_R: { code: 0xffe8, description: "Right meta" },
XK_Alt_L: { code: 0xffe9, description: "Left alt" },
XK_Alt_R: { code: 0xffea, description: "Right alt" },
XK_Super_L: { code: 0xffeb, description: "Left super" },
XK_Super_R: { code: 0xffec, description: "Right super" },
XK_Hyper_L: { code: 0xffed, description: "Left hyper" },
XK_Hyper_R: { code: 0xffee, description: "Right hyper" },
/*
* Keyboard (XKB) Extension function and modifier keys
* (from Appendix C of "The X Keyboard Extension: Protocol Specification")
* Byte 3 = 0xfe
*/
// Group XK_XKB_KEYS
XK_ISO_Lock: { code: 0xfe01, description: null },
XK_ISO_Level2_Latch: { code: 0xfe02, description: null },
XK_ISO_Level3_Shift: { code: 0xfe03, description: null },
XK_ISO_Level3_Latch: { code: 0xfe04, description: null },
XK_ISO_Level3_Lock: { code: 0xfe05, description: null },
XK_ISO_Level5_Shift: { code: 0xfe11, description: null },
XK_ISO_Level5_Latch: { code: 0xfe12, description: null },
XK_ISO_Level5_Lock: { code: 0xfe13, description: null },
XK_ISO_Group_Shift: { code: 0xff7e, description: "Alias for mode_switch" },
XK_ISO_Group_Latch: { code: 0xfe06, description: null },
XK_ISO_Group_Lock: { code: 0xfe07, description: null },
XK_ISO_Next_Group: { code: 0xfe08, description: null },
XK_ISO_Next_Group_Lock: { code: 0xfe09, description: null },
XK_ISO_Prev_Group: { code: 0xfe0a, description: null },
XK_ISO_Prev_Group_Lock: { code: 0xfe0b, description: null },
XK_ISO_First_Group: { code: 0xfe0c, description: null },
XK_ISO_First_Group_Lock: { code: 0xfe0d, description: null },
XK_ISO_Last_Group: { code: 0xfe0e, description: null },
XK_ISO_Last_Group_Lock: { code: 0xfe0f, description: null },
XK_ISO_Left_Tab: { code: 0xfe20, description: null },
XK_ISO_Move_Line_Up: { code: 0xfe21, description: null },
XK_ISO_Move_Line_Down: { code: 0xfe22, description: null },
XK_ISO_Partial_Line_Up: { code: 0xfe23, description: null },
XK_ISO_Partial_Line_Down: { code: 0xfe24, description: null },
XK_ISO_Partial_Space_Left: { code: 0xfe25, description: null },
XK_ISO_Partial_Space_Right: { code: 0xfe26, description: null },
XK_ISO_Set_Margin_Left: { code: 0xfe27, description: null },
XK_ISO_Set_Margin_Right: { code: 0xfe28, description: null },
XK_ISO_Release_Margin_Left: { code: 0xfe29, description: null },
XK_ISO_Release_Margin_Right: { code: 0xfe2a, description: null },
XK_ISO_Release_Both_Margins: { code: 0xfe2b, description: null },
XK_ISO_Fast_Cursor_Left: { code: 0xfe2c, description: null },
XK_ISO_Fast_Cursor_Right: { code: 0xfe2d, description: null },
XK_ISO_Fast_Cursor_Up: { code: 0xfe2e, description: null },
XK_ISO_Fast_Cursor_Down: { code: 0xfe2f, description: null },
XK_ISO_Continuous_Underline: { code: 0xfe30, description: null },
XK_ISO_Discontinuous_Underline: { code: 0xfe31, description: null },
XK_ISO_Emphasize: { code: 0xfe32, description: null },
XK_ISO_Center_Object: { code: 0xfe33, description: null },
XK_ISO_Enter: { code: 0xfe34, description: null },
XK_dead_grave: { code: 0xfe50, description: null },
XK_dead_acute: { code: 0xfe51, description: null },
XK_dead_circumflex: { code: 0xfe52, description: null },
XK_dead_tilde: { code: 0xfe53, description: null },
XK_dead_perispomeni: { code: 0xfe53, description: "alias for dead_tilde" },
XK_dead_macron: { code: 0xfe54, description: null },
XK_dead_breve: { code: 0xfe55, description: null },
XK_dead_abovedot: { code: 0xfe56, description: null },
XK_dead_diaeresis: { code: 0xfe57, description: null },
XK_dead_abovering: { code: 0xfe58, description: null },
XK_dead_doubleacute: { code: 0xfe59, description: null },
XK_dead_caron: { code: 0xfe5a, description: null },
XK_dead_cedilla: { code: 0xfe5b, description: null },
XK_dead_ogonek: { code: 0xfe5c, description: null },
XK_dead_iota: { code: 0xfe5d, description: null },
XK_dead_voiced_sound: { code: 0xfe5e, description: null },
XK_dead_semivoiced_sound: { code: 0xfe5f, description: null },
XK_dead_belowdot: { code: 0xfe60, description: null },
XK_dead_hook: { code: 0xfe61, description: null },
XK_dead_horn: { code: 0xfe62, description: null },
XK_dead_stroke: { code: 0xfe63, description: null },
XK_dead_abovecomma: { code: 0xfe64, description: null },
XK_dead_psili: { code: 0xfe64, description: "alias for dead_abovecomma" },
XK_dead_abovereversedcomma: { code: 0xfe65, description: null },
XK_dead_dasia: { code: 0xfe65, description: "alias for dead_abovereversedcomma" },
XK_dead_doublegrave: { code: 0xfe66, description: null },
XK_dead_belowring: { code: 0xfe67, description: null },
XK_dead_belowmacron: { code: 0xfe68, description: null },
XK_dead_belowcircumflex: { code: 0xfe69, description: null },
XK_dead_belowtilde: { code: 0xfe6a, description: null },
XK_dead_belowbreve: { code: 0xfe6b, description: null },
XK_dead_belowdiaeresis: { code: 0xfe6c, description: null },
XK_dead_invertedbreve: { code: 0xfe6d, description: null },
XK_dead_belowcomma: { code: 0xfe6e, description: null },
XK_dead_currency: { code: 0xfe6f, description: null },
/* extra dead elements for German T3 layout */
XK_dead_lowline: { code: 0xfe90, description: null },
XK_dead_aboveverticalline: { code: 0xfe91, description: null },
XK_dead_belowverticalline: { code: 0xfe92, description: null },
XK_dead_longsolidusoverlay: { code: 0xfe93, description: null },
/* dead vowels for universal syllable entry */
XK_dead_a: { code: 0xfe80, description: null },
XK_dead_A: { code: 0xfe81, description: null },
XK_dead_e: { code: 0xfe82, description: null },
XK_dead_E: { code: 0xfe83, description: null },
XK_dead_i: { code: 0xfe84, description: null },
XK_dead_I: { code: 0xfe85, description: null },
XK_dead_o: { code: 0xfe86, description: null },
XK_dead_O: { code: 0xfe87, description: null },
XK_dead_u: { code: 0xfe88, description: null },
XK_dead_U: { code: 0xfe89, description: null },
XK_dead_small_schwa: { code: 0xfe8a, description: null },
XK_dead_capital_schwa: { code: 0xfe8b, description: null },
XK_dead_greek: { code: 0xfe8c, description: null },
XK_First_Virtual_Screen: { code: 0xfed0, description: null },
XK_Prev_Virtual_Screen: { code: 0xfed1, description: null },
XK_Next_Virtual_Screen: { code: 0xfed2, description: null },
XK_Last_Virtual_Screen: { code: 0xfed4, description: null },
XK_Terminate_Server: { code: 0xfed5, description: null },
XK_AccessX_Enable: { code: 0xfe70, description: null },
XK_AccessX_Feedback_Enable: { code: 0xfe71, description: null },
XK_RepeatKeys_Enable: { code: 0xfe72, description: null },
XK_SlowKeys_Enable: { code: 0xfe73, description: null },
XK_BounceKeys_Enable: { code: 0xfe74, description: null },
XK_StickyKeys_Enable: { code: 0xfe75, description: null },
XK_MouseKeys_Enable: { code: 0xfe76, description: null },
XK_MouseKeys_Accel_Enable: { code: 0xfe77, description: null },
XK_Overlay1_Enable: { code: 0xfe78, description: null },
XK_Overlay2_Enable: { code: 0xfe79, description: null },
XK_AudibleBell_Enable: { code: 0xfe7a, description: null },
XK_Pointer_Left: { code: 0xfee0, description: null },
XK_Pointer_Right: { code: 0xfee1, description: null },
XK_Pointer_Up: { code: 0xfee2, description: null },
XK_Pointer_Down: { code: 0xfee3, description: null },
XK_Pointer_UpLeft: { code: 0xfee4, description: null },
XK_Pointer_UpRight: { code: 0xfee5, description: null },
XK_Pointer_DownLeft: { code: 0xfee6, description: null },
XK_Pointer_DownRight: { code: 0xfee7, description: null },
XK_Pointer_Button_Dflt: { code: 0xfee8, description: null },
XK_Pointer_Button1: { code: 0xfee9, description: null },
XK_Pointer_Button2: { code: 0xfeea, description: null },
XK_Pointer_Button3: { code: 0xfeeb, description: null },
XK_Pointer_Button4: { code: 0xfeec, description: null },
XK_Pointer_Button5: { code: 0xfeed, description: null },
XK_Pointer_DblClick_Dflt: { code: 0xfeee, description: null },
XK_Pointer_DblClick1: { code: 0xfeef, description: null },
XK_Pointer_DblClick2: { code: 0xfef0, description: null },
XK_Pointer_DblClick3: { code: 0xfef1, description: null },
XK_Pointer_DblClick4: { code: 0xfef2, description: null },
XK_Pointer_DblClick5: { code: 0xfef3, description: null },
XK_Pointer_Drag_Dflt: { code: 0xfef4, description: null },
XK_Pointer_Drag1: { code: 0xfef5, description: null },
XK_Pointer_Drag2: { code: 0xfef6, description: null },
XK_Pointer_Drag3: { code: 0xfef7, description: null },
XK_Pointer_Drag4: { code: 0xfef8, description: null },
XK_Pointer_Drag5: { code: 0xfefd, description: null },
XK_Pointer_EnableKeys: { code: 0xfef9, description: null },
XK_Pointer_Accelerate: { code: 0xfefa, description: null },
XK_Pointer_DfltBtnNext: { code: 0xfefb, description: null },
XK_Pointer_DfltBtnPrev: { code: 0xfefc, description: null },
/* Single-Stroke Multiple-Character N-Graph Keysyms For The X Input Method */
XK_ch: { code: 0xfea0, description: null },
XK_Ch: { code: 0xfea1, description: null },
XK_CH: { code: 0xfea2, description: null },
XK_c_h: { code: 0xfea3, description: null },
XK_C_h: { code: 0xfea4, description: null },
XK_C_H: { code: 0xfea5, description: null },
/*
* 3270 Terminal Keys
* Byte 3 = 0xfd
*/
// Group XK_3270
XK_3270_Duplicate: { code: 0xfd01, description: null },
XK_3270_FieldMark: { code: 0xfd02, description: null },
XK_3270_Right2: { code: 0xfd03, description: null },
XK_3270_Left2: { code: 0xfd04, description: null },
XK_3270_BackTab: { code: 0xfd05, description: null },
XK_3270_EraseEOF: { code: 0xfd06, description: null },
XK_3270_EraseInput: { code: 0xfd07, description: null },
XK_3270_Reset: { code: 0xfd08, description: null },
XK_3270_Quit: { code: 0xfd09, description: null },
XK_3270_PA1: { code: 0xfd0a, description: null },
XK_3270_PA2: { code: 0xfd0b, description: null },
XK_3270_PA3: { code: 0xfd0c, description: null },
XK_3270_Test: { code: 0xfd0d, description: null },
XK_3270_Attn: { code: 0xfd0e, description: null },
XK_3270_CursorBlink: { code: 0xfd0f, description: null },
XK_3270_AltCursor: { code: 0xfd10, description: null },
XK_3270_KeyClick: { code: 0xfd11, description: null },
XK_3270_Jump: { code: 0xfd12, description: null },
XK_3270_Ident: { code: 0xfd13, description: null },
XK_3270_Rule: { code: 0xfd14, description: null },
XK_3270_Copy: { code: 0xfd15, description: null },
XK_3270_Play: { code: 0xfd16, description: null },
XK_3270_Setup: { code: 0xfd17, description: null },
XK_3270_Record: { code: 0xfd18, description: null },
XK_3270_ChangeScreen: { code: 0xfd19, description: null },
XK_3270_DeleteWord: { code: 0xfd1a, description: null },
XK_3270_ExSelect: { code: 0xfd1b, description: null },
XK_3270_CursorSelect: { code: 0xfd1c, description: null },
XK_3270_PrintScreen: { code: 0xfd1d, description: null },
XK_3270_Enter: { code: 0xfd1e, description: null },
/*
* Latin 1
* (ISO/IEC 8859-1 = Unicode (\u0020)..U+00FF)
* Byte 3 = 0
*/
// Group XK_LATIN1
XK_space: { code: 0x0020, description: "(\u0020) SPACE" },
XK_exclam: { code: 0x0021, description: "(\u0021) EXCLAMATION MARK" },
XK_quotedbl: { code: 0x0022, description: "(\u0022) QUOTATION MARK" },
XK_numbersign: { code: 0x0023, description: "(\u0023) NUMBER SIGN" },
XK_dollar: { code: 0x0024, description: "(\u0024) DOLLAR SIGN" },
XK_percent: { code: 0x0025, description: "(\u0025) PERCENT SIGN" },
XK_ampersand: { code: 0x0026, description: "(\u0026) AMPERSAND" },
XK_apostrophe: { code: 0x0027, description: "(\u0027) APOSTROPHE" },
XK_quoteright: { code: 0x0027, description: "deprecated" },
XK_parenleft: { code: 0x0028, description: "(\u0028) LEFT PARENTHESIS" },
XK_parenright: { code: 0x0029, description: "(\u0029) RIGHT PARENTHESIS" },
XK_asterisk: { code: 0x002a, description: "(\u002A) ASTERISK" },
XK_plus: { code: 0x002b, description: "(\u002B) PLUS SIGN" },
XK_comma: { code: 0x002c, description: "(\u002C) COMMA" },
XK_minus: { code: 0x002d, description: "(\u002D) HYPHEN-MINUS" },
XK_period: { code: 0x002e, description: "(\u002E) FULL STOP" },
XK_slash: { code: 0x002f, description: "(\u002F) SOLIDUS" },
XK_0: { code: 0x0030, description: "(\u0030) DIGIT ZERO" },
XK_1: { code: 0x0031, description: "(\u0031) DIGIT ONE" },
XK_2: { code: 0x0032, description: "(\u0032) DIGIT TWO" },
XK_3: { code: 0x0033, description: "(\u0033) DIGIT THREE" },
XK_4: { code: 0x0034, description: "(\u0034) DIGIT FOUR" },
XK_5: { code: 0x0035, description: "(\u0035) DIGIT FIVE" },
XK_6: { code: 0x0036, description: "(\u0036) DIGIT SIX" },
XK_7: { code: 0x0037, description: "(\u0037) DIGIT SEVEN" },
XK_8: { code: 0x0038, description: "(\u0038) DIGIT EIGHT" },
XK_9: { code: 0x0039, description: "(\u0039) DIGIT NINE" },
XK_colon: { code: 0x003a, description: "(\u003A) COLON" },
XK_semicolon: { code: 0x003b, description: "(\u003B) SEMICOLON" },
XK_less: { code: 0x003c, description: "(\u003C) LESS-THAN SIGN" },
XK_equal: { code: 0x003d, description: "(\u003D) EQUALS SIGN" },
XK_greater: { code: 0x003e, description: "(\u003E) GREATER-THAN SIGN" },
XK_question: { code: 0x003f, description: "(\u003F) QUESTION MARK" },
XK_at: { code: 0x0040, description: "(\u0040) COMMERCIAL AT" },
XK_A: { code: 0x0041, description: "(\u0041) LATIN CAPITAL LETTER A" },
XK_B: { code: 0x0042, description: "(\u0042) LATIN CAPITAL LETTER B" },
XK_C: { code: 0x0043, description: "(\u0043) LATIN CAPITAL LETTER C" },
XK_D: { code: 0x0044, description: "(\u0044) LATIN CAPITAL LETTER D" },
XK_E: { code: 0x0045, description: "(\u0045) LATIN CAPITAL LETTER E" },
XK_F: { code: 0x0046, description: "(\u0046) LATIN CAPITAL LETTER F" },
XK_G: { code: 0x0047, description: "(\u0047) LATIN CAPITAL LETTER G" },
XK_H: { code: 0x0048, description: "(\u0048) LATIN CAPITAL LETTER H" },
XK_I: { code: 0x0049, description: "(\u0049) LATIN CAPITAL LETTER I" },
XK_J: { code: 0x004a, description: "(\u004A) LATIN CAPITAL LETTER J" },
XK_K: { code: 0x004b, description: "(\u004B) LATIN CAPITAL LETTER K" },
XK_L: { code: 0x004c, description: "(\u004C) LATIN CAPITAL LETTER L" },
XK_M: { code: 0x004d, description: "(\u004D) LATIN CAPITAL LETTER M" },
XK_N: { code: 0x004e, description: "(\u004E) LATIN CAPITAL LETTER N" },
XK_O: { code: 0x004f, description: "(\u004F) LATIN CAPITAL LETTER O" },
XK_P: { code: 0x0050, description: "(\u0050) LATIN CAPITAL LETTER P" },
XK_Q: { code: 0x0051, description: "(\u0051) LATIN CAPITAL LETTER Q" },
XK_R: { code: 0x0052, description: "(\u0052) LATIN CAPITAL LETTER R" },
XK_S: { code: 0x0053, description: "(\u0053) LATIN CAPITAL LETTER S" },
XK_T: { code: 0x0054, description: "(\u0054) LATIN CAPITAL LETTER T" },
XK_U: { code: 0x0055, description: "(\u0055) LATIN CAPITAL LETTER U" },
XK_V: { code: 0x0056, description: "(\u0056) LATIN CAPITAL LETTER V" },
XK_W: { code: 0x0057, description: "(\u0057) LATIN CAPITAL LETTER W" },
XK_X: { code: 0x0058, description: "(\u0058) LATIN CAPITAL LETTER X" },
XK_Y: { code: 0x0059, description: "(\u0059) LATIN CAPITAL LETTER Y" },
XK_Z: { code: 0x005a, description: "(\u005A) LATIN CAPITAL LETTER Z" },
XK_bracketleft: { code: 0x005b, description: "(\u005B) LEFT SQUARE BRACKET" },
XK_backslash: { code: 0x005c, description: "(\u005C) REVERSE SOLIDUS" },
XK_bracketright: { code: 0x005d, description: "(\u005D) RIGHT SQUARE BRACKET" },
XK_asciicircum: { code: 0x005e, description: "(\u005E) CIRCUMFLEX ACCENT" },
XK_underscore: { code: 0x005f, description: "(\u005F) LOW LINE" },
XK_grave: { code: 0x0060, description: "(\u0060) GRAVE ACCENT" },
XK_quoteleft: { code: 0x0060, description: "deprecated" },
XK_a: { code: 0x0061, description: "(\u0061) LATIN SMALL LETTER A" },
XK_b: { code: 0x0062, description: "(\u0062) LATIN SMALL LETTER B" },
XK_c: { code: 0x0063, description: "(\u0063) LATIN SMALL LETTER C" },
XK_d: { code: 0x0064, description: "(\u0064) LATIN SMALL LETTER D" },
XK_e: { code: 0x0065, description: "(\u0065) LATIN SMALL LETTER E" },
XK_f: { code: 0x0066, description: "(\u0066) LATIN SMALL LETTER F" },
XK_g: { code: 0x0067, description: "(\u0067) LATIN SMALL LETTER G" },
XK_h: { code: 0x0068, description: "(\u0068) LATIN SMALL LETTER H" },
XK_i: { code: 0x0069, description: "(\u0069) LATIN SMALL LETTER I" },
XK_j: { code: 0x006a, description: "(\u006A) LATIN SMALL LETTER J" },
XK_k: { code: 0x006b, description: "(\u006B) LATIN SMALL LETTER K" },
XK_l: { code: 0x006c, description: "(\u006C) LATIN SMALL LETTER L" },
XK_m: { code: 0x006d, description: "(\u006D) LATIN SMALL LETTER M" },
XK_n: { code: 0x006e, description: "(\u006E) LATIN SMALL LETTER N" },
XK_o: { code: 0x006f, description: "(\u006F) LATIN SMALL LETTER O" },
XK_p: { code: 0x0070, description: "(\u0070) LATIN SMALL LETTER P" },
XK_q: { code: 0x0071, description: "(\u0071) LATIN SMALL LETTER Q" },
XK_r: { code: 0x0072, description: "(\u0072) LATIN SMALL LETTER R" },
XK_s: { code: 0x0073, description: "(\u0073) LATIN SMALL LETTER S" },
XK_t: { code: 0x0074, description: "(\u0074) LATIN SMALL LETTER T" },
XK_u: { code: 0x0075, description: "(\u0075) LATIN SMALL LETTER U" },
XK_v: { code: 0x0076, description: "(\u0076) LATIN SMALL LETTER V" },
XK_w: { code: 0x0077, description: "(\u0077) LATIN SMALL LETTER W" },
XK_x: { code: 0x0078, description: "(\u0078) LATIN SMALL LETTER X" },
XK_y: { code: 0x0079, description: "(\u0079) LATIN SMALL LETTER Y" },
XK_z: { code: 0x007a, description: "(\u007A) LATIN SMALL LETTER Z" },
XK_braceleft: { code: 0x007b, description: "(\u007B) LEFT CURLY BRACKET" },
XK_bar: { code: 0x007c, description: "(\u007C) VERTICAL LINE" },
XK_braceright: { code: 0x007d, description: "(\u007D) RIGHT CURLY BRACKET" },
XK_asciitilde: { code: 0x007e, description: "(\u007E) TILDE" },
XK_nobreakspace: { code: 0x00a0, description: "(\u00A0) NO-BREAK SPACE" },
XK_exclamdown: { code: 0x00a1, description: "(\u00A1) INVERTED EXCLAMATION MARK" },
XK_cent: { code: 0x00a2, description: "(\u00A2) CENT SIGN" },
XK_sterling: { code: 0x00a3, description: "(\u00A3) POUND SIGN" },
XK_currency: { code: 0x00a4, description: "(\u00A4) CURRENCY SIGN" },
XK_yen: { code: 0x00a5, description: "(\u00A5) YEN SIGN" },
XK_brokenbar: { code: 0x00a6, description: "(\u00A6) BROKEN BAR" },
XK_section: { code: 0x00a7, description: "(\u00A7) SECTION SIGN" },
XK_diaeresis: { code: 0x00a8, description: "(\u00A8) DIAERESIS" },
XK_copyright: { code: 0x00a9, description: "(\u00A9) COPYRIGHT SIGN" },
XK_ordfeminine: { code: 0x00aa, description: "(\u00AA) FEMININE ORDINAL INDICATOR" },
XK_guillemotleft: { code: 0x00ab, description: "(\u00AB) LEFT-POINTING DOUBLE ANGLE QUOTATION MARK" },
XK_notsign: { code: 0x00ac, description: "(\u00AC) NOT SIGN" },
XK_hyphen: { code: 0x00ad, description: "(\u00AD) SOFT HYPHEN" },
XK_registered: { code: 0x00ae, description: "(\u00AE) REGISTERED SIGN" },
XK_macron: { code: 0x00af, description: "(\u00AF) MACRON" },
XK_degree: { code: 0x00b0, description: "(\u00B0) DEGREE SIGN" },
XK_plusminus: { code: 0x00b1, description: "(\u00B1) PLUS-MINUS SIGN" },
XK_twosuperior: { code: 0x00b2, description: "(\u00B2) SUPERSCRIPT TWO" },
XK_threesuperior: { code: 0x00b3, description: "(\u00B3) SUPERSCRIPT THREE" },
XK_acute: { code: 0x00b4, description: "(\u00B4) ACUTE ACCENT" },
XK_mu: { code: 0x00b5, description: "(\u00B5) MICRO SIGN" },
XK_paragraph: { code: 0x00b6, description: "(\u00B6) PILCROW SIGN" },
XK_periodcentered: { code: 0x00b7, description: "(\u00B7) MIDDLE DOT" },
XK_cedilla: { code: 0x00b8, description: "(\u00B8) CEDILLA" },
XK_onesuperior: { code: 0x00b9, description: "(\u00B9) SUPERSCRIPT ONE" },
XK_masculine: { code: 0x00ba, description: "(\u00BA) MASCULINE ORDINAL INDICATOR" },
XK_guillemotright: { code: 0x00bb, description: "(\u00BB) RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK" },
XK_onequarter: { code: 0x00bc, description: "(\u00BC) VULGAR FRACTION ONE QUARTER" },
XK_onehalf: { code: 0x00bd, description: "(\u00BD) VULGAR FRACTION ONE HALF" },
XK_threequarters: { code: 0x00be, description: "(\u00BE) VULGAR FRACTION THREE QUARTERS" },
XK_questiondown: { code: 0x00bf, description: "(\u00BF) INVERTED QUESTION MARK" },
XK_Agrave: { code: 0x00c0, description: "(\u00C0) LATIN CAPITAL LETTER A WITH GRAVE" },
XK_Aacute: { code: 0x00c1, description: "(\u00C1) LATIN CAPITAL LETTER A WITH ACUTE" },
XK_Acircumflex: { code: 0x00c2, description: "(\u00C2) LATIN CAPITAL LETTER A WITH CIRCUMFLEX" },
XK_Atilde: { code: 0x00c3, description: "(\u00C3) LATIN CAPITAL LETTER A WITH TILDE" },
XK_Adiaeresis: { code: 0x00c4, description: "(\u00C4) LATIN CAPITAL LETTER A WITH DIAERESIS" },
XK_Aring: { code: 0x00c5, description: "(\u00C5) LATIN CAPITAL LETTER A WITH RING ABOVE" },
XK_AE: { code: 0x00c6, description: "(\u00C6) LATIN CAPITAL LETTER AE" },
XK_Ccedilla: { code: 0x00c7, description: "(\u00C7) LATIN CAPITAL LETTER C WITH CEDILLA" },
XK_Egrave: { code: 0x00c8, description: "(\u00C8) LATIN CAPITAL LETTER E WITH GRAVE" },
XK_Eacute: { code: 0x00c9, description: "(\u00C9) LATIN CAPITAL LETTER E WITH ACUTE" },
XK_Ecircumflex: { code: 0x00ca, description: "(\u00CA) LATIN CAPITAL LETTER E WITH CIRCUMFLEX" },
XK_Ediaeresis: { code: 0x00cb, description: "(\u00CB) LATIN CAPITAL LETTER E WITH DIAERESIS" },
XK_Igrave: { code: 0x00cc, description: "(\u00CC) LATIN CAPITAL LETTER I WITH GRAVE" },
XK_Iacute: { code: 0x00cd, description: "(\u00CD) LATIN CAPITAL LETTER I WITH ACUTE" },
XK_Icircumflex: { code: 0x00ce, description: "(\u00CE) LATIN CAPITAL LETTER I WITH CIRCUMFLEX" },
XK_Idiaeresis: { code: 0x00cf, description: "(\u00CF) LATIN CAPITAL LETTER I WITH DIAERESIS" },
XK_ETH: { code: 0x00d0, description: "(\u00D0) LATIN CAPITAL LETTER ETH" },
XK_Eth: { code: 0x00d0, description: "deprecated" },
XK_Ntilde: { code: 0x00d1, description: "(\u00D1) LATIN CAPITAL LETTER N WITH TILDE" },
XK_Ograve: { code: 0x00d2, description: "(\u00D2) LATIN CAPITAL LETTER O WITH GRAVE" },
XK_Oacute: { code: 0x00d3, description: "(\u00D3) LATIN CAPITAL LETTER O WITH ACUTE" },
XK_Ocircumflex: { code: 0x00d4, description: "(\u00D4) LATIN CAPITAL LETTER O WITH CIRCUMFLEX" },
XK_Otilde: { code: 0x00d5, description: "(\u00D5) LATIN CAPITAL LETTER O WITH TILDE" },
XK_Odiaeresis: { code: 0x00d6, description: "(\u00D6) LATIN CAPITAL LETTER O WITH DIAERESIS" },
XK_multiply: { code: 0x00d7, description: "(\u00D7) MULTIPLICATION SIGN" },
XK_Oslash: { code: 0x00d8, description: "(\u00D8) LATIN CAPITAL LETTER O WITH STROKE" },
XK_Ooblique: { code: 0x00d8, description: "(\u00D8) LATIN CAPITAL LETTER O WITH STROKE" },
XK_Ugrave: { code: 0x00d9, description: "(\u00D9) LATIN CAPITAL LETTER U WITH GRAVE" },
XK_Uacute: { code: 0x00da, description: "(\u00DA) LATIN CAPITAL LETTER U WITH ACUTE" },
XK_Ucircumflex: { code: 0x00db, description: "(\u00DB) LATIN CAPITAL LETTER U WITH CIRCUMFLEX" },
XK_Udiaeresis: { code: 0x00dc, description: "(\u00DC) LATIN CAPITAL LETTER U WITH DIAERESIS" },
XK_Yacute: { code: 0x00dd, description: "(\u00DD) LATIN CAPITAL LETTER Y WITH ACUTE" },
XK_THORN: { code: 0x00de, description: "(\u00DE) LATIN CAPITAL LETTER THORN" },
XK_Thorn: { code: 0x00de, description: "deprecated" },
XK_ssharp: { code: 0x00df, description: "(\u00DF) LATIN SMALL LETTER SHARP S" },
XK_agrave: { code: 0x00e0, description: "(\u00E0) LATIN SMALL LETTER A WITH GRAVE" },
XK_aacute: { code: 0x00e1, description: "(\u00E1) LATIN SMALL LETTER A WITH ACUTE" },
XK_acircumflex: { code: 0x00e2, description: "(\u00E2) LATIN SMALL LETTER A WITH CIRCUMFLEX" },
XK_atilde: