aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--KEY.h398
-rw-r--r--fbi.c124
-rw-r--r--fbpdf.c22
-rw-r--r--kbd.c268
-rw-r--r--kbd.h1
-rw-r--r--kbdtest.c56
-rw-r--r--meson.build3
-rw-r--r--scripts/xkbname.sh7
-rw-r--r--xkbname.h2402
9 files changed, 2685 insertions, 596 deletions
diff --git a/KEY.h b/KEY.h
deleted file mode 100644
index 9587b0c..0000000
--- a/KEY.h
+++ /dev/null
@@ -1,398 +0,0 @@
- [ KEY_RESERVED ] = "RESERVED",
- [ KEY_ESC ] = "ESC",
- [ KEY_1 ] = "1",
- [ KEY_2 ] = "2",
- [ KEY_3 ] = "3",
- [ KEY_4 ] = "4",
- [ KEY_5 ] = "5",
- [ KEY_6 ] = "6",
- [ KEY_7 ] = "7",
- [ KEY_8 ] = "8",
- [ KEY_9 ] = "9",
- [ KEY_0 ] = "0",
- [ KEY_MINUS ] = "MINUS",
- [ KEY_EQUAL ] = "EQUAL",
- [ KEY_BACKSPACE ] = "BACKSPACE",
- [ KEY_TAB ] = "TAB",
- [ KEY_Q ] = "Q",
- [ KEY_W ] = "W",
- [ KEY_E ] = "E",
- [ KEY_R ] = "R",
- [ KEY_T ] = "T",
- [ KEY_Y ] = "Y",
- [ KEY_U ] = "U",
- [ KEY_I ] = "I",
- [ KEY_O ] = "O",
- [ KEY_P ] = "P",
- [ KEY_LEFTBRACE ] = "LEFTBRACE",
- [ KEY_RIGHTBRACE ] = "RIGHTBRACE",
- [ KEY_ENTER ] = "ENTER",
- [ KEY_LEFTCTRL ] = "LEFTCTRL",
- [ KEY_A ] = "A",
- [ KEY_S ] = "S",
- [ KEY_D ] = "D",
- [ KEY_F ] = "F",
- [ KEY_G ] = "G",
- [ KEY_H ] = "H",
- [ KEY_J ] = "J",
- [ KEY_K ] = "K",
- [ KEY_L ] = "L",
- [ KEY_SEMICOLON ] = "SEMICOLON",
- [ KEY_APOSTROPHE ] = "APOSTROPHE",
- [ KEY_GRAVE ] = "GRAVE",
- [ KEY_LEFTSHIFT ] = "LEFTSHIFT",
- [ KEY_BACKSLASH ] = "BACKSLASH",
- [ KEY_Z ] = "Z",
- [ KEY_X ] = "X",
- [ KEY_C ] = "C",
- [ KEY_V ] = "V",
- [ KEY_B ] = "B",
- [ KEY_N ] = "N",
- [ KEY_M ] = "M",
- [ KEY_COMMA ] = "COMMA",
- [ KEY_DOT ] = "DOT",
- [ KEY_SLASH ] = "SLASH",
- [ KEY_RIGHTSHIFT ] = "RIGHTSHIFT",
- [ KEY_KPASTERISK ] = "KPASTERISK",
- [ KEY_LEFTALT ] = "LEFTALT",
- [ KEY_SPACE ] = "SPACE",
- [ KEY_CAPSLOCK ] = "CAPSLOCK",
- [ KEY_F1 ] = "F1",
- [ KEY_F2 ] = "F2",
- [ KEY_F3 ] = "F3",
- [ KEY_F4 ] = "F4",
- [ KEY_F5 ] = "F5",
- [ KEY_F6 ] = "F6",
- [ KEY_F7 ] = "F7",
- [ KEY_F8 ] = "F8",
- [ KEY_F9 ] = "F9",
- [ KEY_F10 ] = "F10",
- [ KEY_NUMLOCK ] = "NUMLOCK",
- [ KEY_SCROLLLOCK ] = "SCROLLLOCK",
- [ KEY_KP7 ] = "KP7",
- [ KEY_KP8 ] = "KP8",
- [ KEY_KP9 ] = "KP9",
- [ KEY_KPMINUS ] = "KPMINUS",
- [ KEY_KP4 ] = "KP4",
- [ KEY_KP5 ] = "KP5",
- [ KEY_KP6 ] = "KP6",
- [ KEY_KPPLUS ] = "KPPLUS",
- [ KEY_KP1 ] = "KP1",
- [ KEY_KP2 ] = "KP2",
- [ KEY_KP3 ] = "KP3",
- [ KEY_KP0 ] = "KP0",
- [ KEY_KPDOT ] = "KPDOT",
- [ KEY_ZENKAKUHANKAKU ] = "ZENKAKUHANKAKU",
- [ KEY_102ND ] = "102ND",
- [ KEY_F11 ] = "F11",
- [ KEY_F12 ] = "F12",
- [ KEY_RO ] = "RO",
- [ KEY_KATAKANA ] = "KATAKANA",
- [ KEY_HIRAGANA ] = "HIRAGANA",
- [ KEY_HENKAN ] = "HENKAN",
- [ KEY_KATAKANAHIRAGANA ] = "KATAKANAHIRAGANA",
- [ KEY_MUHENKAN ] = "MUHENKAN",
- [ KEY_KPJPCOMMA ] = "KPJPCOMMA",
- [ KEY_KPENTER ] = "KPENTER",
- [ KEY_RIGHTCTRL ] = "RIGHTCTRL",
- [ KEY_KPSLASH ] = "KPSLASH",
- [ KEY_SYSRQ ] = "SYSRQ",
- [ KEY_RIGHTALT ] = "RIGHTALT",
- [ KEY_LINEFEED ] = "LINEFEED",
- [ KEY_HOME ] = "HOME",
- [ KEY_UP ] = "UP",
- [ KEY_PAGEUP ] = "PAGEUP",
- [ KEY_LEFT ] = "LEFT",
- [ KEY_RIGHT ] = "RIGHT",
- [ KEY_END ] = "END",
- [ KEY_DOWN ] = "DOWN",
- [ KEY_PAGEDOWN ] = "PAGEDOWN",
- [ KEY_INSERT ] = "INSERT",
- [ KEY_DELETE ] = "DELETE",
- [ KEY_MACRO ] = "MACRO",
- [ KEY_MUTE ] = "MUTE",
- [ KEY_VOLUMEDOWN ] = "VOLUMEDOWN",
- [ KEY_VOLUMEUP ] = "VOLUMEUP",
- [ KEY_POWER ] = "POWER",
- [ KEY_KPEQUAL ] = "KPEQUAL",
- [ KEY_KPPLUSMINUS ] = "KPPLUSMINUS",
- [ KEY_PAUSE ] = "PAUSE",
- [ KEY_SCALE ] = "SCALE",
- [ KEY_KPCOMMA ] = "KPCOMMA",
- [ KEY_HANGEUL ] = "HANGEUL",
- [ KEY_HANGUEL ] = "HANGUEL",
- [ KEY_HANJA ] = "HANJA",
- [ KEY_YEN ] = "YEN",
- [ KEY_LEFTMETA ] = "LEFTMETA",
- [ KEY_RIGHTMETA ] = "RIGHTMETA",
- [ KEY_COMPOSE ] = "COMPOSE",
- [ KEY_STOP ] = "STOP",
- [ KEY_AGAIN ] = "AGAIN",
- [ KEY_PROPS ] = "PROPS",
- [ KEY_UNDO ] = "UNDO",
- [ KEY_FRONT ] = "FRONT",
- [ KEY_COPY ] = "COPY",
- [ KEY_OPEN ] = "OPEN",
- [ KEY_PASTE ] = "PASTE",
- [ KEY_FIND ] = "FIND",
- [ KEY_CUT ] = "CUT",
- [ KEY_HELP ] = "HELP",
- [ KEY_MENU ] = "MENU",
- [ KEY_CALC ] = "CALC",
- [ KEY_SETUP ] = "SETUP",
- [ KEY_SLEEP ] = "SLEEP",
- [ KEY_WAKEUP ] = "WAKEUP",
- [ KEY_FILE ] = "FILE",
- [ KEY_SENDFILE ] = "SENDFILE",
- [ KEY_DELETEFILE ] = "DELETEFILE",
- [ KEY_XFER ] = "XFER",
- [ KEY_PROG1 ] = "PROG1",
- [ KEY_PROG2 ] = "PROG2",
- [ KEY_WWW ] = "WWW",
- [ KEY_MSDOS ] = "MSDOS",
- [ KEY_COFFEE ] = "COFFEE",
- [ KEY_SCREENLOCK ] = "SCREENLOCK",
- [ KEY_DIRECTION ] = "DIRECTION",
- [ KEY_CYCLEWINDOWS ] = "CYCLEWINDOWS",
- [ KEY_MAIL ] = "MAIL",
- [ KEY_BOOKMARKS ] = "BOOKMARKS",
- [ KEY_COMPUTER ] = "COMPUTER",
- [ KEY_BACK ] = "BACK",
- [ KEY_FORWARD ] = "FORWARD",
- [ KEY_CLOSECD ] = "CLOSECD",
- [ KEY_EJECTCD ] = "EJECTCD",
- [ KEY_EJECTCLOSECD ] = "EJECTCLOSECD",
- [ KEY_NEXTSONG ] = "NEXTSONG",
- [ KEY_PLAYPAUSE ] = "PLAYPAUSE",
- [ KEY_PREVIOUSSONG ] = "PREVIOUSSONG",
- [ KEY_STOPCD ] = "STOPCD",
- [ KEY_RECORD ] = "RECORD",
- [ KEY_REWIND ] = "REWIND",
- [ KEY_PHONE ] = "PHONE",
- [ KEY_ISO ] = "ISO",
- [ KEY_CONFIG ] = "CONFIG",
- [ KEY_HOMEPAGE ] = "HOMEPAGE",
- [ KEY_REFRESH ] = "REFRESH",
- [ KEY_EXIT ] = "EXIT",
- [ KEY_MOVE ] = "MOVE",
- [ KEY_EDIT ] = "EDIT",
- [ KEY_SCROLLUP ] = "SCROLLUP",
- [ KEY_SCROLLDOWN ] = "SCROLLDOWN",
- [ KEY_KPLEFTPAREN ] = "KPLEFTPAREN",
- [ KEY_KPRIGHTPAREN ] = "KPRIGHTPAREN",
- [ KEY_NEW ] = "NEW",
- [ KEY_REDO ] = "REDO",
- [ KEY_F13 ] = "F13",
- [ KEY_F14 ] = "F14",
- [ KEY_F15 ] = "F15",
- [ KEY_F16 ] = "F16",
- [ KEY_F17 ] = "F17",
- [ KEY_F18 ] = "F18",
- [ KEY_F19 ] = "F19",
- [ KEY_F20 ] = "F20",
- [ KEY_F21 ] = "F21",
- [ KEY_F22 ] = "F22",
- [ KEY_F23 ] = "F23",
- [ KEY_F24 ] = "F24",
- [ KEY_PLAYCD ] = "PLAYCD",
- [ KEY_PAUSECD ] = "PAUSECD",
- [ KEY_PROG3 ] = "PROG3",
- [ KEY_PROG4 ] = "PROG4",
- [ KEY_DASHBOARD ] = "DASHBOARD",
- [ KEY_SUSPEND ] = "SUSPEND",
- [ KEY_CLOSE ] = "CLOSE",
- [ KEY_PLAY ] = "PLAY",
- [ KEY_FASTFORWARD ] = "FASTFORWARD",
- [ KEY_BASSBOOST ] = "BASSBOOST",
- [ KEY_PRINT ] = "PRINT",
- [ KEY_HP ] = "HP",
- [ KEY_CAMERA ] = "CAMERA",
- [ KEY_SOUND ] = "SOUND",
- [ KEY_QUESTION ] = "QUESTION",
- [ KEY_EMAIL ] = "EMAIL",
- [ KEY_CHAT ] = "CHAT",
- [ KEY_SEARCH ] = "SEARCH",
- [ KEY_CONNECT ] = "CONNECT",
- [ KEY_FINANCE ] = "FINANCE",
- [ KEY_SPORT ] = "SPORT",
- [ KEY_SHOP ] = "SHOP",
- [ KEY_ALTERASE ] = "ALTERASE",
- [ KEY_CANCEL ] = "CANCEL",
- [ KEY_BRIGHTNESSDOWN ] = "BRIGHTNESSDOWN",
- [ KEY_BRIGHTNESSUP ] = "BRIGHTNESSUP",
- [ KEY_MEDIA ] = "MEDIA",
- [ KEY_SWITCHVIDEOMODE ] = "SWITCHVIDEOMODE",
- [ KEY_KBDILLUMTOGGLE ] = "KBDILLUMTOGGLE",
- [ KEY_KBDILLUMDOWN ] = "KBDILLUMDOWN",
- [ KEY_KBDILLUMUP ] = "KBDILLUMUP",
- [ KEY_SEND ] = "SEND",
- [ KEY_REPLY ] = "REPLY",
- [ KEY_FORWARDMAIL ] = "FORWARDMAIL",
- [ KEY_SAVE ] = "SAVE",
- [ KEY_DOCUMENTS ] = "DOCUMENTS",
- [ KEY_BATTERY ] = "BATTERY",
- [ KEY_BLUETOOTH ] = "BLUETOOTH",
- [ KEY_WLAN ] = "WLAN",
- [ KEY_UWB ] = "UWB",
- [ KEY_UNKNOWN ] = "UNKNOWN",
- [ KEY_VIDEO_NEXT ] = "VIDEO_NEXT",
- [ KEY_VIDEO_PREV ] = "VIDEO_PREV",
- [ KEY_BRIGHTNESS_CYCLE ] = "BRIGHTNESS_CYCLE",
- [ KEY_BRIGHTNESS_ZERO ] = "BRIGHTNESS_ZERO",
- [ KEY_DISPLAY_OFF ] = "DISPLAY_OFF",
- [ KEY_WIMAX ] = "WIMAX",
- [ KEY_RFKILL ] = "RFKILL",
- [ KEY_MICMUTE ] = "MICMUTE",
- [ KEY_OK ] = "OK",
- [ KEY_SELECT ] = "SELECT",
- [ KEY_GOTO ] = "GOTO",
- [ KEY_CLEAR ] = "CLEAR",
- [ KEY_POWER2 ] = "POWER2",
- [ KEY_OPTION ] = "OPTION",
- [ KEY_INFO ] = "INFO",
- [ KEY_TIME ] = "TIME",
- [ KEY_VENDOR ] = "VENDOR",
- [ KEY_ARCHIVE ] = "ARCHIVE",
- [ KEY_PROGRAM ] = "PROGRAM",
- [ KEY_CHANNEL ] = "CHANNEL",
- [ KEY_FAVORITES ] = "FAVORITES",
- [ KEY_EPG ] = "EPG",
- [ KEY_PVR ] = "PVR",
- [ KEY_MHP ] = "MHP",
- [ KEY_LANGUAGE ] = "LANGUAGE",
- [ KEY_TITLE ] = "TITLE",
- [ KEY_SUBTITLE ] = "SUBTITLE",
- [ KEY_ANGLE ] = "ANGLE",
- [ KEY_ZOOM ] = "ZOOM",
- [ KEY_MODE ] = "MODE",
- [ KEY_KEYBOARD ] = "KEYBOARD",
- [ KEY_SCREEN ] = "SCREEN",
- [ KEY_PC ] = "PC",
- [ KEY_TV ] = "TV",
- [ KEY_TV2 ] = "TV2",
- [ KEY_VCR ] = "VCR",
- [ KEY_VCR2 ] = "VCR2",
- [ KEY_SAT ] = "SAT",
- [ KEY_SAT2 ] = "SAT2",
- [ KEY_CD ] = "CD",
- [ KEY_TAPE ] = "TAPE",
- [ KEY_RADIO ] = "RADIO",
- [ KEY_TUNER ] = "TUNER",
- [ KEY_PLAYER ] = "PLAYER",
- [ KEY_TEXT ] = "TEXT",
- [ KEY_DVD ] = "DVD",
- [ KEY_AUX ] = "AUX",
- [ KEY_MP3 ] = "MP3",
- [ KEY_AUDIO ] = "AUDIO",
- [ KEY_VIDEO ] = "VIDEO",
- [ KEY_DIRECTORY ] = "DIRECTORY",
- [ KEY_LIST ] = "LIST",
- [ KEY_MEMO ] = "MEMO",
- [ KEY_CALENDAR ] = "CALENDAR",
- [ KEY_RED ] = "RED",
- [ KEY_GREEN ] = "GREEN",
- [ KEY_YELLOW ] = "YELLOW",
- [ KEY_BLUE ] = "BLUE",
- [ KEY_CHANNELUP ] = "CHANNELUP",
- [ KEY_CHANNELDOWN ] = "CHANNELDOWN",
- [ KEY_FIRST ] = "FIRST",
- [ KEY_LAST ] = "LAST",
- [ KEY_AB ] = "AB",
- [ KEY_NEXT ] = "NEXT",
- [ KEY_RESTART ] = "RESTART",
- [ KEY_SLOW ] = "SLOW",
- [ KEY_SHUFFLE ] = "SHUFFLE",
- [ KEY_BREAK ] = "BREAK",
- [ KEY_PREVIOUS ] = "PREVIOUS",
- [ KEY_DIGITS ] = "DIGITS",
- [ KEY_TEEN ] = "TEEN",
- [ KEY_TWEN ] = "TWEN",
- [ KEY_VIDEOPHONE ] = "VIDEOPHONE",
- [ KEY_GAMES ] = "GAMES",
- [ KEY_ZOOMIN ] = "ZOOMIN",
- [ KEY_ZOOMOUT ] = "ZOOMOUT",
- [ KEY_ZOOMRESET ] = "ZOOMRESET",
- [ KEY_WORDPROCESSOR ] = "WORDPROCESSOR",
- [ KEY_EDITOR ] = "EDITOR",
- [ KEY_SPREADSHEET ] = "SPREADSHEET",
- [ KEY_GRAPHICSEDITOR ] = "GRAPHICSEDITOR",
- [ KEY_PRESENTATION ] = "PRESENTATION",
- [ KEY_DATABASE ] = "DATABASE",
- [ KEY_NEWS ] = "NEWS",
- [ KEY_VOICEMAIL ] = "VOICEMAIL",
- [ KEY_ADDRESSBOOK ] = "ADDRESSBOOK",
- [ KEY_MESSENGER ] = "MESSENGER",
- [ KEY_DISPLAYTOGGLE ] = "DISPLAYTOGGLE",
- [ KEY_SPELLCHECK ] = "SPELLCHECK",
- [ KEY_LOGOFF ] = "LOGOFF",
- [ KEY_DOLLAR ] = "DOLLAR",
- [ KEY_EURO ] = "EURO",
- [ KEY_FRAMEBACK ] = "FRAMEBACK",
- [ KEY_FRAMEFORWARD ] = "FRAMEFORWARD",
- [ KEY_CONTEXT_MENU ] = "CONTEXT_MENU",
- [ KEY_MEDIA_REPEAT ] = "MEDIA_REPEAT",
- [ KEY_10CHANNELSUP ] = "10CHANNELSUP",
- [ KEY_10CHANNELSDOWN ] = "10CHANNELSDOWN",
- [ KEY_IMAGES ] = "IMAGES",
- [ KEY_DEL_EOL ] = "DEL_EOL",
- [ KEY_DEL_EOS ] = "DEL_EOS",
- [ KEY_INS_LINE ] = "INS_LINE",
- [ KEY_DEL_LINE ] = "DEL_LINE",
- [ KEY_FN ] = "FN",
- [ KEY_FN_ESC ] = "FN_ESC",
- [ KEY_FN_F1 ] = "FN_F1",
- [ KEY_FN_F2 ] = "FN_F2",
- [ KEY_FN_F3 ] = "FN_F3",
- [ KEY_FN_F4 ] = "FN_F4",
- [ KEY_FN_F5 ] = "FN_F5",
- [ KEY_FN_F6 ] = "FN_F6",
- [ KEY_FN_F7 ] = "FN_F7",
- [ KEY_FN_F8 ] = "FN_F8",
- [ KEY_FN_F9 ] = "FN_F9",
- [ KEY_FN_F10 ] = "FN_F10",
- [ KEY_FN_F11 ] = "FN_F11",
- [ KEY_FN_F12 ] = "FN_F12",
- [ KEY_FN_1 ] = "FN_1",
- [ KEY_FN_2 ] = "FN_2",
- [ KEY_FN_D ] = "FN_D",
- [ KEY_FN_E ] = "FN_E",
- [ KEY_FN_F ] = "FN_F",
- [ KEY_FN_S ] = "FN_S",
- [ KEY_FN_B ] = "FN_B",
- [ KEY_BRL_DOT1 ] = "BRL_DOT1",
- [ KEY_BRL_DOT2 ] = "BRL_DOT2",
- [ KEY_BRL_DOT3 ] = "BRL_DOT3",
- [ KEY_BRL_DOT4 ] = "BRL_DOT4",
- [ KEY_BRL_DOT5 ] = "BRL_DOT5",
- [ KEY_BRL_DOT6 ] = "BRL_DOT6",
- [ KEY_BRL_DOT7 ] = "BRL_DOT7",
- [ KEY_BRL_DOT8 ] = "BRL_DOT8",
- [ KEY_BRL_DOT9 ] = "BRL_DOT9",
- [ KEY_BRL_DOT10 ] = "BRL_DOT10",
- [ KEY_NUMERIC_0 ] = "NUMERIC_0",
- [ KEY_NUMERIC_1 ] = "NUMERIC_1",
- [ KEY_NUMERIC_2 ] = "NUMERIC_2",
- [ KEY_NUMERIC_3 ] = "NUMERIC_3",
- [ KEY_NUMERIC_4 ] = "NUMERIC_4",
- [ KEY_NUMERIC_5 ] = "NUMERIC_5",
- [ KEY_NUMERIC_6 ] = "NUMERIC_6",
- [ KEY_NUMERIC_7 ] = "NUMERIC_7",
- [ KEY_NUMERIC_8 ] = "NUMERIC_8",
- [ KEY_NUMERIC_9 ] = "NUMERIC_9",
- [ KEY_NUMERIC_STAR ] = "NUMERIC_STAR",
- [ KEY_NUMERIC_POUND ] = "NUMERIC_POUND",
- [ KEY_CAMERA_FOCUS ] = "CAMERA_FOCUS",
- [ KEY_WPS_BUTTON ] = "WPS_BUTTON",
- [ KEY_TOUCHPAD_TOGGLE ] = "TOUCHPAD_TOGGLE",
- [ KEY_TOUCHPAD_ON ] = "TOUCHPAD_ON",
- [ KEY_TOUCHPAD_OFF ] = "TOUCHPAD_OFF",
- [ KEY_CAMERA_ZOOMIN ] = "CAMERA_ZOOMIN",
- [ KEY_CAMERA_ZOOMOUT ] = "CAMERA_ZOOMOUT",
- [ KEY_CAMERA_UP ] = "CAMERA_UP",
- [ KEY_CAMERA_DOWN ] = "CAMERA_DOWN",
- [ KEY_CAMERA_LEFT ] = "CAMERA_LEFT",
- [ KEY_CAMERA_RIGHT ] = "CAMERA_RIGHT",
- [ KEY_ATTENDANT_ON ] = "ATTENDANT_ON",
- [ KEY_ATTENDANT_OFF ] = "ATTENDANT_OFF",
- [ KEY_ATTENDANT_TOGGLE ] = "ATTENDANT_TOGGLE",
- [ KEY_LIGHTS_TOGGLE ] = "LIGHTS_TOGGLE",
diff --git a/fbi.c b/fbi.c
index e3a537b..ce3464c 100644
--- a/fbi.c
+++ b/fbi.c
@@ -798,74 +798,74 @@ svga_show(struct flist *f, struct flist *prev,
rc = kbd_read(key, sizeof(key), &keycode, &keymod);
if (rc < 0)
- return KEY_ESC; /* EOF */
+ return XKB_KEY_Escape; /* EOF */
switch (keycode) {
- case KEY_SPACE:
+ case XKB_KEY_space:
if (textreading && f->top < (int)(img->i.height - gfx->vdisplay)) {
redraw = 1;
f->top += f->text_steps;
} else {
- skip = KEY_SPACE;
- return KEY_SPACE;
+ skip = XKB_KEY_space;
+ return XKB_KEY_space;
}
break;
- case KEY_UP:
+ case XKB_KEY_UP:
redraw = 1;
f->top -= v_steps;
break;
- case KEY_DOWN:
+ case XKB_KEY_DOWN:
redraw = 1;
f->top += v_steps;
break;
- case KEY_HOME:
+ case XKB_KEY_Home:
redraw = 1;
f->top = 0;
break;
- case KEY_END:
+ case XKB_KEY_End:
redraw = 1;
f->top = img->i.height - gfx->vdisplay;
break;
- case KEY_LEFT:
+ case XKB_KEY_Left:
redraw = 1;
f->left -= h_steps;
break;
- case KEY_RIGHT:
+ case XKB_KEY_Right:
redraw = 1;
f->left += h_steps;
break;
- case KEY_PAGEUP:
- case KEY_K:
+ case XKB_KEY_Page_Up:
+ case XKB_KEY_K:
if (textreading && f->top > 0) {
redraw = 1;
f->top -= f->text_steps;
} else {
- skip = KEY_PAGEUP;
- return KEY_PAGEUP;
+ skip = XKB_KEY_Page_Up;
+ return XKB_KEY_Page_Up;
}
break;
- case KEY_PAGEDOWN:
- case KEY_J:
- case KEY_N:
+ case XKB_KEY_Page_Down:
+ case XKB_KEY_J:
+ case XKB_KEY_N:
if (textreading && f->top < (int)(img->i.height - gfx->vdisplay)) {
redraw = 1;
f->top += f->text_steps;
} else {
- skip = KEY_PAGEDOWN;
- return KEY_PAGEDOWN;
+ skip = XKB_KEY_Page_Down;
+ return XKB_KEY_Page_Down;
}
break;
- case KEY_P:
+ case XKB_KEY_P:
if (0 != timeout) {
paused = !paused;
status_update(paused ? "pause on " : "pause off", NULL);
}
break;
- case KEY_H:
+ case XKB_KEY_H:
if (!help) {
show_help();
help = 1;
@@ -876,7 +876,7 @@ svga_show(struct flist *f, struct flist *prev,
exif = 0;
break;
- case KEY_I:
+ case XKB_KEY_I:
if (!exif) {
show_exif(fcurrent);
exif = 1;
@@ -887,28 +887,28 @@ svga_show(struct flist *f, struct flist *prev,
help = 0;
break;
- case KEY_0:
- case KEY_1:
- case KEY_2:
- case KEY_3:
- case KEY_4:
- case KEY_5:
- case KEY_6:
- case KEY_7:
- case KEY_8:
- case KEY_9:
+ case XKB_KEY_0:
+ case XKB_KEY_1:
+ case XKB_KEY_2:
+ case XKB_KEY_3:
+ case XKB_KEY_4:
+ case XKB_KEY_5:
+ case XKB_KEY_6:
+ case XKB_KEY_7:
+ case XKB_KEY_8:
+ case XKB_KEY_9:
*nr = *nr * 10;
- if (keycode != KEY_0)
- *nr += keycode - KEY_1 + 1;
+ if (keycode != XKB_KEY_0)
+ *nr += keycode - XKB_KEY_1 + 1;
snprintf(linebuffer, sizeof(linebuffer), "> %d",*nr);
status_update(linebuffer, NULL);
break;
- case KEY_D:
+ case XKB_KEY_D:
/* need shift state for this one */
- return KEY_D | (keymod << 16);
+ return XKB_KEY_D | (keymod << 16);
- case KEY_RESERVED:
+ case XKB_KEY_VoidSymbol:
/* ignored event */
break;
@@ -1375,7 +1375,7 @@ int main(int argc, char *argv[])
key = svga_show(fcurrent, fprev, timeout, desc, info, &arg);
fprev = fcurrent;
switch (key) {
- case KEY_D | (KEY_MOD_SHIFT << 16):
+ case XKB_KEY_D | (KEY_MOD_SHIFT << 16):
if (editable) {
struct flist *fdel = fcurrent;
if (flist_islast(fcurrent))
@@ -1394,8 +1394,8 @@ int main(int argc, char *argv[])
status_error("readonly mode, sorry [start with --edit?]");
}
break;
- case KEY_R:
- case KEY_L:
+ case XKB_KEY_R:
+ case XKB_KEY_L:
{
if (editable) {
snprintf(linebuffer,sizeof(linebuffer),
@@ -1403,7 +1403,7 @@ int main(int argc, char *argv[])
status_update(linebuffer, NULL);
jpeg_transform_inplace
(fcurrent->name,
- (key == KEY_R) ? JXFORM_ROT_90 : JXFORM_ROT_270,
+ (key == XKB_KEY_R) ? JXFORM_ROT_90 : JXFORM_ROT_270,
NULL,
NULL,0,
(backup ? JFLAG_FILE_BACKUP : 0) |
@@ -1418,8 +1418,8 @@ int main(int argc, char *argv[])
}
break;
}
- case KEY_X:
- case KEY_Y:
+ case XKB_KEY_X:
+ case XKB_KEY_Y:
{
if (editable) {
snprintf(linebuffer,sizeof(linebuffer),
@@ -1427,7 +1427,7 @@ int main(int argc, char *argv[])
status_update(linebuffer, NULL);
jpeg_transform_inplace
(fcurrent->name,
- (key == KEY_X) ? JXFORM_FLIP_V : JXFORM_FLIP_H,
+ (key == XKB_KEY_X) ? JXFORM_FLIP_V : JXFORM_FLIP_H,
NULL,
NULL,0,
(backup ? JFLAG_FILE_BACKUP : 0) |
@@ -1442,25 +1442,23 @@ int main(int argc, char *argv[])
}
break;
}
- case KEY_ENTER:
+ case XKB_KEY_Return:
fcurrent->tag = !fcurrent->tag;
/* fall throuth */
- case KEY_SPACE:
+ case XKB_KEY_space:
fcurrent = flist_next(fcurrent,1,0);
if (NULL != fcurrent)
break;
/* else fall */
- case KEY_ESC:
- case KEY_Q:
- case KEY_E:
+ case XKB_KEY_Escape:
+ case XKB_KEY_Q:
+ case XKB_KEY_E:
cleanup_and_exit(0);
break;
- case KEY_PAGEDOWN:
- case BTN_LEFT:
+ case XKB_KEY_Page_Down:
fcurrent = flist_next(fcurrent,0,1);
break;
- case KEY_PAGEUP:
- case BTN_RIGHT:
+ case XKB_KEY_Page_Up:
fcurrent = flist_prev(fcurrent,1);
break;
case -1: /* timeout */
@@ -1475,18 +1473,18 @@ int main(int argc, char *argv[])
}
/* FIXME: wrap around */
break;
- case KEY_KPPLUS:
- case KEY_KPMINUS:
- case KEY_A:
- case KEY_S:
+ case XKB_KEY_KP_Add:
+ case XKB_KEY_KP_Subtract:
+ case XKB_KEY_A:
+ case XKB_KEY_S:
{
float newscale, oldscale = fcurrent->scale;
- if (key == KEY_KPPLUS) {
+ if (key == XKB_KEY_KP_Add) {
newscale = fcurrent->scale * 1.6;
- } else if (key == KEY_KPMINUS) {
+ } else if (key == XKB_KEY_KP_Subtract) {
newscale = fcurrent->scale / 1.6;
- } else if (key == KEY_A) {
+ } else if (key == XKB_KEY_A) {
newscale = auto_scale(fcurrent->fimg);
} else {
newscale = arg / 100.0;
@@ -1499,16 +1497,16 @@ int main(int argc, char *argv[])
scale_fix_top_left(fcurrent, oldscale, newscale);
break;
}
- case KEY_G:
+ case XKB_KEY_G:
if (arg > 0 && arg <= fcount)
fcurrent = flist_goto(arg);
break;
#if 0 /* FIXME */
- case KEY_DELAY:
+ case XKB_KEY_DELAY:
timeout = arg;
break;
#endif
- case KEY_V:
+ case XKB_KEY_V:
statusline = !statusline;
break;
}
diff --git a/fbpdf.c b/fbpdf.c
index a48d7d6..b43733b 100644
--- a/fbpdf.c
+++ b/fbpdf.c
@@ -382,41 +382,41 @@ int main(int argc, char *argv[])
kbd_read(key, sizeof(key), &keycode, &keymod);
switch (keycode) {
- case KEY_ESC:
- case KEY_Q:
+ case XKB_KEY_Escape:
+ case XKB_KEY_Q:
quit = true;
break;
- case KEY_PAGEUP:
+ case XKB_KEY_Page_Up:
if (index > 0) {
index--;
newpage = true;
}
break;
- case KEY_PAGEDOWN:
+ case XKB_KEY_Page_Down:
if (index+1 < poppler_document_get_n_pages(doc)) {
index++;
newpage = true;
}
break;
- case KEY_UP:
+ case XKB_KEY_Up:
page_move(0, 0.2);
break;
- case KEY_DOWN:
+ case XKB_KEY_Down:
page_move(0, -0.2);
break;
- case KEY_LEFT:
+ case XKB_KEY_Left:
page_move(0.2, 0);
break;
- case KEY_RIGHT:
+ case XKB_KEY_Right:
page_move(-0.2, 0);
break;
- case KEY_KPMINUS:
+ case XKB_KEY_KP_Subtract:
page_scale(0.7);
break;
- case KEY_KPPLUS:
+ case XKB_KEY_KP_Add:
page_scale(1.5);
break;
- case KEY_SPACE:
+ case XKB_KEY_space:
if (ty > gfx->vdisplay - sh) {
page_move(0, -0.75);
break;
diff --git a/kbd.c b/kbd.c
index 9398b8f..6b3b207 100644
--- a/kbd.c
+++ b/kbd.c
@@ -13,6 +13,10 @@
#include "kbd.h"
+#ifdef SYSTEM_LINUX
+# include <linux/input.h>
+#endif
+
/* ---------------------------------------------------------------------- */
struct xkb_context *xkb_ctx;
@@ -81,117 +85,117 @@ struct termctrl {
};
static struct termctrl termctrl[] = {
- { .seq = "a", .code = KEY_A },
- { .seq = "b", .code = KEY_B },
- { .seq = "c", .code = KEY_C },
- { .seq = "d", .code = KEY_D },
- { .seq = "e", .code = KEY_E },
- { .seq = "f", .code = KEY_F },
- { .seq = "g", .code = KEY_G },
- { .seq = "h", .code = KEY_H },
- { .seq = "i", .code = KEY_I },
- { .seq = "j", .code = KEY_J },
- { .seq = "k", .code = KEY_K },
- { .seq = "l", .code = KEY_L },
- { .seq = "m", .code = KEY_M },
- { .seq = "n", .code = KEY_N },
- { .seq = "o", .code = KEY_O },
- { .seq = "p", .code = KEY_P },
- { .seq = "q", .code = KEY_Q },
- { .seq = "r", .code = KEY_R },
- { .seq = "s", .code = KEY_S },
- { .seq = "t", .code = KEY_T },
- { .seq = "u", .code = KEY_U },
- { .seq = "v", .code = KEY_V },
- { .seq = "w", .code = KEY_W },
- { .seq = "x", .code = KEY_X },
- { .seq = "y", .code = KEY_Y },
- { .seq = "z", .code = KEY_Z },
-
- { .seq = "A", .code = KEY_A, .mod = KEY_MOD_SHIFT },
- { .seq = "B", .code = KEY_B, .mod = KEY_MOD_SHIFT },
- { .seq = "C", .code = KEY_C, .mod = KEY_MOD_SHIFT },
- { .seq = "D", .code = KEY_D, .mod = KEY_MOD_SHIFT },
- { .seq = "E", .code = KEY_E, .mod = KEY_MOD_SHIFT },
- { .seq = "F", .code = KEY_F, .mod = KEY_MOD_SHIFT },
- { .seq = "G", .code = KEY_G, .mod = KEY_MOD_SHIFT },
- { .seq = "H", .code = KEY_H, .mod = KEY_MOD_SHIFT },
- { .seq = "I", .code = KEY_I, .mod = KEY_MOD_SHIFT },
- { .seq = "J", .code = KEY_J, .mod = KEY_MOD_SHIFT },
- { .seq = "K", .code = KEY_K, .mod = KEY_MOD_SHIFT },
- { .seq = "L", .code = KEY_L, .mod = KEY_MOD_SHIFT },
- { .seq = "M", .code = KEY_M, .mod = KEY_MOD_SHIFT },
- { .seq = "N", .code = KEY_N, .mod = KEY_MOD_SHIFT },
- { .seq = "O", .code = KEY_O, .mod = KEY_MOD_SHIFT },
- { .seq = "P", .code = KEY_P, .mod = KEY_MOD_SHIFT },
- { .seq = "Q", .code = KEY_Q, .mod = KEY_MOD_SHIFT },
- { .seq = "R", .code = KEY_R, .mod = KEY_MOD_SHIFT },
- { .seq = "S", .code = KEY_S, .mod = KEY_MOD_SHIFT },
- { .seq = "T", .code = KEY_T, .mod = KEY_MOD_SHIFT },
- { .seq = "U", .code = KEY_U, .mod = KEY_MOD_SHIFT },
- { .seq = "V", .code = KEY_V, .mod = KEY_MOD_SHIFT },
- { .seq = "W", .code = KEY_W, .mod = KEY_MOD_SHIFT },
- { .seq = "X", .code = KEY_X, .mod = KEY_MOD_SHIFT },
- { .seq = "Y", .code = KEY_Y, .mod = KEY_MOD_SHIFT },
- { .seq = "Z", .code = KEY_Z, .mod = KEY_MOD_SHIFT },
-
- { .seq = "\x01", .code = KEY_A, .mod = KEY_MOD_CTRL },
- { .seq = "\x02", .code = KEY_B, .mod = KEY_MOD_CTRL },
- { .seq = "\x03", .code = KEY_C, .mod = KEY_MOD_CTRL },
- { .seq = "\x04", .code = KEY_D, .mod = KEY_MOD_CTRL },
- { .seq = "\x05", .code = KEY_E, .mod = KEY_MOD_CTRL },
- { .seq = "\x06", .code = KEY_F, .mod = KEY_MOD_CTRL },
- { .seq = "\x07", .code = KEY_G, .mod = KEY_MOD_CTRL },
- { .seq = "\x08", .code = KEY_H, .mod = KEY_MOD_CTRL },
- { .seq = "\x09", .code = KEY_I, .mod = KEY_MOD_CTRL },
- { .seq = "\x0a", .code = KEY_ENTER },
- { .seq = "\x0b", .code = KEY_K, .mod = KEY_MOD_CTRL },
- { .seq = "\x0c", .code = KEY_L, .mod = KEY_MOD_CTRL },
- { .seq = "\x0d", .code = KEY_M, .mod = KEY_MOD_CTRL },
- { .seq = "\x0e", .code = KEY_N, .mod = KEY_MOD_CTRL },
- { .seq = "\x0f", .code = KEY_O, .mod = KEY_MOD_CTRL },
- { .seq = "\x10", .code = KEY_P, .mod = KEY_MOD_CTRL },
- { .seq = "\x11", .code = KEY_Q, .mod = KEY_MOD_CTRL },
- { .seq = "\x12", .code = KEY_R, .mod = KEY_MOD_CTRL },
- { .seq = "\x13", .code = KEY_S, .mod = KEY_MOD_CTRL },
- { .seq = "\x14", .code = KEY_T, .mod = KEY_MOD_CTRL },
- { .seq = "\x15", .code = KEY_U, .mod = KEY_MOD_CTRL },
- { .seq = "\x16", .code = KEY_V, .mod = KEY_MOD_CTRL },
- { .seq = "\x17", .code = KEY_W, .mod = KEY_MOD_CTRL },
- { .seq = "\x18", .code = KEY_X, .mod = KEY_MOD_CTRL },
- { .seq = "\x19", .code = KEY_Y, .mod = KEY_MOD_CTRL },
- { .seq = "\x1a", .code = KEY_Z, .mod = KEY_MOD_CTRL },
-
- { .seq = "0", .code = KEY_0 },
- { .seq = "1", .code = KEY_1 },
- { .seq = "2", .code = KEY_2 },
- { .seq = "3", .code = KEY_3 },
- { .seq = "4", .code = KEY_4 },
- { .seq = "5", .code = KEY_5 },
- { .seq = "6", .code = KEY_6 },
- { .seq = "7", .code = KEY_7 },
- { .seq = "8", .code = KEY_8 },
- { .seq = "9", .code = KEY_9 },
-
- { .seq = " ", .code = KEY_SPACE },
- { .seq = "\x1b", .code = KEY_ESC },
- { .seq = "+", .code = KEY_KPPLUS },
- { .seq = "-", .code = KEY_KPMINUS },
- { .seq = "\x7f", .code = KEY_BACKSPACE},
-
- { .seq = "\x1b[A", .code = KEY_UP },
- { .seq = "\x1b[B", .code = KEY_DOWN },
- { .seq = "\x1b[C", .code = KEY_RIGHT },
- { .seq = "\x1b[D", .code = KEY_LEFT },
- { .seq = "\x1b[F", .code = KEY_END },
- { .seq = "\x1b[H", .code = KEY_HOME },
-
- { .seq = "\x1b[1~", .code = KEY_HOME },
- { .seq = "\x1b[2~", .code = KEY_INSERT },
- { .seq = "\x1b[3~", .code = KEY_DELETE },
- { .seq = "\x1b[4~", .code = KEY_END },
- { .seq = "\x1b[5~", .code = KEY_PAGEUP },
- { .seq = "\x1b[6~", .code = KEY_PAGEDOWN },
+ { .seq = "a", .code = XKB_KEY_A },
+ { .seq = "b", .code = XKB_KEY_B },
+ { .seq = "c", .code = XKB_KEY_C },
+ { .seq = "d", .code = XKB_KEY_D },
+ { .seq = "e", .code = XKB_KEY_E },
+ { .seq = "f", .code = XKB_KEY_F },
+ { .seq = "g", .code = XKB_KEY_G },
+ { .seq = "h", .code = XKB_KEY_H },
+ { .seq = "i", .code = XKB_KEY_I },
+ { .seq = "j", .code = XKB_KEY_J },
+ { .seq = "k", .code = XKB_KEY_K },
+ { .seq = "l", .code = XKB_KEY_L },
+ { .seq = "m", .code = XKB_KEY_M },
+ { .seq = "n", .code = XKB_KEY_N },
+ { .seq = "o", .code = XKB_KEY_O },
+ { .seq = "p", .code = XKB_KEY_P },
+ { .seq = "q", .code = XKB_KEY_Q },
+ { .seq = "r", .code = XKB_KEY_R },
+ { .seq = "s", .code = XKB_KEY_S },
+ { .seq = "t", .code = XKB_KEY_T },
+ { .seq = "u", .code = XKB_KEY_U },
+ { .seq = "v", .code = XKB_KEY_V },
+ { .seq = "w", .code = XKB_KEY_W },
+ { .seq = "x", .code = XKB_KEY_X },
+ { .seq = "y", .code = XKB_KEY_Y },
+ { .seq = "z", .code = XKB_KEY_Z },
+
+ { .seq = "A", .code = XKB_KEY_A, .mod = KEY_MOD_SHIFT },
+ { .seq = "B", .code = XKB_KEY_B, .mod = KEY_MOD_SHIFT },
+ { .seq = "C", .code = XKB_KEY_C, .mod = KEY_MOD_SHIFT },
+ { .seq = "D", .code = XKB_KEY_D, .mod = KEY_MOD_SHIFT },
+ { .seq = "E", .code = XKB_KEY_E, .mod = KEY_MOD_SHIFT },
+ { .seq = "F", .code = XKB_KEY_F, .mod = KEY_MOD_SHIFT },
+ { .seq = "G", .code = XKB_KEY_G, .mod = KEY_MOD_SHIFT },
+ { .seq = "H", .code = XKB_KEY_H, .mod = KEY_MOD_SHIFT },
+ { .seq = "I", .code = XKB_KEY_I, .mod = KEY_MOD_SHIFT },
+ { .seq = "J", .code = XKB_KEY_J, .mod = KEY_MOD_SHIFT },
+ { .seq = "K", .code = XKB_KEY_K, .mod = KEY_MOD_SHIFT },
+ { .seq = "L", .code = XKB_KEY_L, .mod = KEY_MOD_SHIFT },
+ { .seq = "M", .code = XKB_KEY_M, .mod = KEY_MOD_SHIFT },
+ { .seq = "N", .code = XKB_KEY_N, .mod = KEY_MOD_SHIFT },
+ { .seq = "O", .code = XKB_KEY_O, .mod = KEY_MOD_SHIFT },
+ { .seq = "P", .code = XKB_KEY_P, .mod = KEY_MOD_SHIFT },
+ { .seq = "Q", .code = XKB_KEY_Q, .mod = KEY_MOD_SHIFT },
+ { .seq = "R", .code = XKB_KEY_R, .mod = KEY_MOD_SHIFT },
+ { .seq = "S", .code = XKB_KEY_S, .mod = KEY_MOD_SHIFT },
+ { .seq = "T", .code = XKB_KEY_T, .mod = KEY_MOD_SHIFT },
+ { .seq = "U", .code = XKB_KEY_U, .mod = KEY_MOD_SHIFT },
+ { .seq = "V", .code = XKB_KEY_V, .mod = KEY_MOD_SHIFT },
+ { .seq = "W", .code = XKB_KEY_W, .mod = KEY_MOD_SHIFT },
+ { .seq = "X", .code = XKB_KEY_X, .mod = KEY_MOD_SHIFT },
+ { .seq = "Y", .code = XKB_KEY_Y, .mod = KEY_MOD_SHIFT },
+ { .seq = "Z", .code = XKB_KEY_Z, .mod = KEY_MOD_SHIFT },
+
+ { .seq = "\x01", .code = XKB_KEY_A, .mod = KEY_MOD_CTRL },
+ { .seq = "\x02", .code = XKB_KEY_B, .mod = KEY_MOD_CTRL },
+ { .seq = "\x03", .code = XKB_KEY_C, .mod = KEY_MOD_CTRL },
+ { .seq = "\x04", .code = XKB_KEY_D, .mod = KEY_MOD_CTRL },
+ { .seq = "\x05", .code = XKB_KEY_E, .mod = KEY_MOD_CTRL },
+ { .seq = "\x06", .code = XKB_KEY_F, .mod = KEY_MOD_CTRL },
+ { .seq = "\x07", .code = XKB_KEY_G, .mod = KEY_MOD_CTRL },
+ { .seq = "\x08", .code = XKB_KEY_H, .mod = KEY_MOD_CTRL },
+ { .seq = "\x09", .code = XKB_KEY_I, .mod = KEY_MOD_CTRL },
+ { .seq = "\x0a", .code = XKB_KEY_Return },
+ { .seq = "\x0b", .code = XKB_KEY_K, .mod = KEY_MOD_CTRL },
+ { .seq = "\x0c", .code = XKB_KEY_L, .mod = KEY_MOD_CTRL },
+ { .seq = "\x0d", .code = XKB_KEY_M, .mod = KEY_MOD_CTRL },
+ { .seq = "\x0e", .code = XKB_KEY_N, .mod = KEY_MOD_CTRL },
+ { .seq = "\x0f", .code = XKB_KEY_O, .mod = KEY_MOD_CTRL },
+ { .seq = "\x10", .code = XKB_KEY_P, .mod = KEY_MOD_CTRL },
+ { .seq = "\x11", .code = XKB_KEY_Q, .mod = KEY_MOD_CTRL },
+ { .seq = "\x12", .code = XKB_KEY_R, .mod = KEY_MOD_CTRL },
+ { .seq = "\x13", .code = XKB_KEY_S, .mod = KEY_MOD_CTRL },
+ { .seq = "\x14", .code = XKB_KEY_T, .mod = KEY_MOD_CTRL },
+ { .seq = "\x15", .code = XKB_KEY_U, .mod = KEY_MOD_CTRL },
+ { .seq = "\x16", .code = XKB_KEY_V, .mod = KEY_MOD_CTRL },
+ { .seq = "\x17", .code = XKB_KEY_W, .mod = KEY_MOD_CTRL },
+ { .seq = "\x18", .code = XKB_KEY_X, .mod = KEY_MOD_CTRL },
+ { .seq = "\x19", .code = XKB_KEY_Y, .mod = KEY_MOD_CTRL },
+ { .seq = "\x1a", .code = XKB_KEY_Z, .mod = KEY_MOD_CTRL },
+
+ { .seq = "0", .code = XKB_KEY_0 },
+ { .seq = "1", .code = XKB_KEY_1 },
+ { .seq = "2", .code = XKB_KEY_2 },
+ { .seq = "3", .code = XKB_KEY_3 },
+ { .seq = "4", .code = XKB_KEY_4 },
+ { .seq = "5", .code = XKB_KEY_5 },
+ { .seq = "6", .code = XKB_KEY_6 },
+ { .seq = "7", .code = XKB_KEY_7 },
+ { .seq = "8", .code = XKB_KEY_8 },
+ { .seq = "9", .code = XKB_KEY_9 },
+
+ { .seq = " ", .code = XKB_KEY_space },
+ { .seq = "\x1b", .code = XKB_KEY_Escape },
+ { .seq = "+", .code = XKB_KEY_KP_Add },
+ { .seq = "-", .code = XKB_KEY_KP_Subtract },
+ { .seq = "\x7f", .code = XKB_KEY_BackSpace },
+
+ { .seq = "\x1b[A", .code = XKB_KEY_Up },
+ { .seq = "\x1b[B", .code = XKB_KEY_Down },
+ { .seq = "\x1b[C", .code = XKB_KEY_Right },
+ { .seq = "\x1b[D", .code = XKB_KEY_Left },
+ { .seq = "\x1b[F", .code = XKB_KEY_End },
+ { .seq = "\x1b[H", .code = XKB_KEY_Home },
+
+ { .seq = "\x1b[1~", .code = XKB_KEY_Home },
+ { .seq = "\x1b[2~", .code = XKB_KEY_Insert },
+ { .seq = "\x1b[3~", .code = XKB_KEY_Delete },
+ { .seq = "\x1b[4~", .code = XKB_KEY_End },
+ { .seq = "\x1b[5~", .code = XKB_KEY_Page_Up },
+ { .seq = "\x1b[6~", .code = XKB_KEY_Page_Down },
{ /* EOF */ }
};
@@ -207,7 +211,7 @@ static uint32_t tty_parse(const char *key, uint32_t *mod)
}
}
*mod = 0;
- return KEY_RESERVED;
+ return XKB_KEY_VoidSymbol;
}
/* ---------------------------------------------------------------------- */
@@ -268,14 +272,18 @@ static int open_restricted(const char *path, int flags, void *user_data)
}
fprintf(stderr, "kbd: using %s\n", path);
+#ifdef EVIOCGRAB
ioctl(fd, EVIOCGRAB, 1);
+#endif
libinput_devcount++;
return fd;
}
static void close_restricted(int fd, void *user_data)
{
+#ifdef EVIOCGRAB
ioctl(fd, EVIOCGRAB, 0);
+#endif
close(fd);
libinput_devcount--;
}
@@ -304,6 +312,13 @@ void kbd_init(int use_libinput, dev_t gfx)
libinput_udev_assign_seat(ctx, seat);
fprintf(stderr, "kbd: using libinput (%d devices, %s)\n",
libinput_devcount, seat);
+ if (libinput_deverror != 0 || libinput_devcount == 0) {
+ fprintf(stderr, "ERROR: failed to open input devices (%d ok, %d failed)\n",
+ libinput_devcount, libinput_deverror);
+ return;
+ }
+ xkb_configure();
+ xkb_init();
} else {
fprintf(stderr, "kbd: using stdin from terminal\n");
tty_raw();
@@ -333,11 +348,15 @@ int kbd_read(char *buf, uint32_t len,
{
struct libinput_event *evt;
struct libinput_event_keyboard *kbd;
+#if 0
struct libinput_event_pointer *ptr;
- int rc;
+#endif
+ xkb_keycode_t key;
+ bool down;
+ int rc, events = 0;
memset(buf, 0, len);
- *keycode = KEY_RESERVED;
+ *keycode = XKB_KEY_VoidSymbol;
*modifier = 0;
if (ctx) {
@@ -348,22 +367,35 @@ int kbd_read(char *buf, uint32_t len,
switch (libinput_event_get_type(evt)) {
case LIBINPUT_EVENT_KEYBOARD_KEY:
kbd = libinput_event_get_keyboard_event(evt);
- if (libinput_event_keyboard_get_key_state(kbd))
- *keycode = libinput_event_keyboard_get_key(kbd);
- /* TODO: track modifier state */
- /* TODO: fill buf with typed chars */
+ key = libinput_event_keyboard_get_key(kbd) + 8;
+ down = libinput_event_keyboard_get_key_state(kbd);
+ xkb_state_update_key(xkb_state, key, down);
+ if (down) {
+ *keycode = xkb_state_key_get_one_sym(xkb_state, key);
+ if (xkb_state_mod_name_is_active(xkb_state, XKB_MOD_NAME_SHIFT,
+ XKB_STATE_MODS_EFFECTIVE))
+ *modifier |= KEY_MOD_SHIFT;
+ if (xkb_state_mod_name_is_active(xkb_state, XKB_MOD_NAME_CTRL,
+ XKB_STATE_MODS_EFFECTIVE))
+ *modifier |= KEY_MOD_CTRL;
+ }
break;
+#if 0
case LIBINPUT_EVENT_POINTER_BUTTON:
ptr = libinput_event_get_pointer_event(evt);
if (libinput_event_pointer_get_button_state(ptr))
*keycode = libinput_event_pointer_get_button(ptr);
break;
+#endif
default:
/* ignore event */
break;
}
libinput_event_destroy(evt);
+ events++;
}
+ if (!events)
+ return -1;
return 0;
} else {
rc = read(STDIN_FILENO, buf, len-1);
diff --git a/kbd.h b/kbd.h
index f99aa2a..81e32d8 100644
--- a/kbd.h
+++ b/kbd.h
@@ -1,6 +1,5 @@
#include <stdbool.h>
#include <inttypes.h>
-#include <linux/input.h>
#include <libudev.h>
#include <libinput.h>
diff --git a/kbdtest.c b/kbdtest.c
index d1768c2..215a216 100644
--- a/kbdtest.c
+++ b/kbdtest.c
@@ -13,17 +13,61 @@
/* ---------------------------------------------------------------------- */
-static const char *keyname[KEY_CNT] = {
-#include "KEY.h"
+static struct {
+ uint32_t code;
+ const char *name;
+} xkbname_list[] = {
+#include "xkbname.h"
};
+const char *xkbname(uint32_t code)
+{
+ int keycount = sizeof(xkbname_list)/sizeof(xkbname_list[0]);
+ int i;
+
+ for (i = 0; i < keycount; i++)
+ if (xkbname_list[i].code == code)
+ return xkbname_list[i].name;
+ return "unknown";
+}
+
+static void usage(FILE *fp)
+{
+ fprintf(fp,
+ "\n"
+ "usage: kbdtest [ options ]\n"
+ "\n"
+ "options:\n"
+ " -h print this text\n"
+ " -i use libinput\n"
+ "\n");
+}
+
int main(int argc, char *argv[])
{
uint32_t code, mod;
char key[32];
- int rc,i;
+ bool use_libinput = false;
+ int rc, i, c;
+
+ for (;;) {
+ c = getopt(argc, argv, "hi");
+ if (c == -1)
+ break;
+ switch (c) {
+ case 'i':
+ use_libinput = true;
+ break;
+ case 'h':
+ usage(stdout);
+ exit(0);
+ default:
+ usage(stderr);
+ exit(1);
+ }
+ }
- kbd_init(0, 0);
+ kbd_init(use_libinput, 0);
for (;;) {
kbd_wait(10);
@@ -33,12 +77,14 @@ int main(int argc, char *argv[])
/* EOF */
break;
}
+ if (code == XKB_KEY_VoidSymbol)
+ continue;
fprintf(stderr, "key: \"");
for (i = 0; key[i] != 0; i++) {
fprintf(stderr, "%c", isprint(key[i]) ? key[i] : '.');
}
- fprintf(stderr, "\" -> %s", keyname[code]);
+ fprintf(stderr, "\" -> %s", xkbname(code));
if (mod & KEY_MOD_SHIFT)
fprintf(stderr, " +shift");
if (mod & KEY_MOD_CTRL)
diff --git a/meson.build b/meson.build
index 49d29d8..6516aae 100644
--- a/meson.build
+++ b/meson.build
@@ -80,6 +80,9 @@ trans_inc = include_directories(''.join(['jpeg/', jpeg_ver]))
if motif_dep.found()
config.set('HAVE_MOTIF', true)
endif
+if target_machine.system() == 'linux'
+ config.set('SYSTEM_LINUX', true)
+endif
configure_file(output : 'config.h', configuration : config)
add_global_arguments(['-include', 'config.h'], language : 'c')
diff --git a/scripts/xkbname.sh b/scripts/xkbname.sh
new file mode 100644
index 0000000..903c829
--- /dev/null
+++ b/scripts/xkbname.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+cat /usr/include/xkbcommon/xkbcommon-keysyms.h \
+ | awk '{ print $2 }' \
+ | grep -e '^XKB_KEY_' \
+ | while read key; do
+printf '{ .code = %-24s, .name = "%s" },\n' "${key}" "${key#XKB_KEY_}"
+done > xkbname.h
diff --git a/xkbname.h b/xkbname.h
new file mode 100644
index 0000000..21cd652
--- /dev/null
+++ b/xkbname.h
@@ -0,0 +1,2402 @@
+{ .code = XKB_KEY_NoSymbol , .name = "NoSymbol" },
+{ .code = XKB_KEY_VoidSymbol , .name = "VoidSymbol" },
+{ .code = XKB_KEY_BackSpace , .name = "BackSpace" },
+{ .code = XKB_KEY_Tab , .name = "Tab" },
+{ .code = XKB_KEY_Linefeed , .name = "Linefeed" },
+{ .code = XKB_KEY_Clear , .name = "Clear" },
+{ .code = XKB_KEY_Return , .name = "Return" },
+{ .code = XKB_KEY_Pause , .name = "Pause" },
+{ .code = XKB_KEY_Scroll_Lock , .name = "Scroll_Lock" },
+{ .code = XKB_KEY_Sys_Req , .name = "Sys_Req" },
+{ .code = XKB_KEY_Escape , .name = "Escape" },
+{ .code = XKB_KEY_Delete , .name = "Delete" },
+{ .code = XKB_KEY_Multi_key , .name = "Multi_key" },
+{ .code = XKB_KEY_Codeinput , .name = "Codeinput" },
+{ .code = XKB_KEY_SingleCandidate , .name = "SingleCandidate" },
+{ .code = XKB_KEY_MultipleCandidate, .name = "MultipleCandidate" },
+{ .code = XKB_KEY_PreviousCandidate, .name = "PreviousCandidate" },
+{ .code = XKB_KEY_Kanji , .name = "Kanji" },
+{ .code = XKB_KEY_Muhenkan , .name = "Muhenkan" },
+{ .code = XKB_KEY_Henkan_Mode , .name = "Henkan_Mode" },
+{ .code = XKB_KEY_Henkan , .name = "Henkan" },
+{ .code = XKB_KEY_Romaji , .name = "Romaji" },
+{ .code = XKB_KEY_Hiragana , .name = "Hiragana" },
+{ .code = XKB_KEY_Katakana , .name = "Katakana" },
+{ .code = XKB_KEY_Hiragana_Katakana, .name = "Hiragana_Katakana" },
+{ .code = XKB_KEY_Zenkaku , .name = "Zenkaku" },
+{ .code = XKB_KEY_Hankaku , .name = "Hankaku" },
+{ .code = XKB_KEY_Zenkaku_Hankaku , .name = "Zenkaku_Hankaku" },
+{ .code = XKB_KEY_Touroku , .name = "Touroku" },
+{ .code = XKB_KEY_Massyo , .name = "Massyo" },
+{ .code = XKB_KEY_Kana_Lock , .name = "Kana_Lock" },
+{ .code = XKB_KEY_Kana_Shift , .name = "Kana_Shift" },
+{ .code = XKB_KEY_Eisu_Shift , .name = "Eisu_Shift" },
+{ .code = XKB_KEY_Eisu_toggle , .name = "Eisu_toggle" },
+{ .code = XKB_KEY_Kanji_Bangou , .name = "Kanji_Bangou" },
+{ .code = XKB_KEY_Zen_Koho , .name = "Zen_Koho" },
+{ .code = XKB_KEY_Mae_Koho , .name = "Mae_Koho" },
+{ .code = XKB_KEY_Home , .name = "Home" },
+{ .code = XKB_KEY_Left , .name = "Left" },
+{ .code = XKB_KEY_Up , .name = "Up" },
+{ .code = XKB_KEY_Right , .name = "Right" },
+{ .code = XKB_KEY_Down , .name = "Down" },
+{ .code = XKB_KEY_Prior , .name = "Prior" },
+{ .code = XKB_KEY_Page_Up , .name = "Page_Up" },
+{ .code = XKB_KEY_Next , .name = "Next" },
+{ .code = XKB_KEY_Page_Down , .name = "Page_Down" },
+{ .code = XKB_KEY_End , .name = "End" },
+{ .code = XKB_KEY_Begin , .name = "Begin" },
+{ .code = XKB_KEY_Select , .name = "Select" },
+{ .code = XKB_KEY_Print , .name = "Print" },
+{ .code = XKB_KEY_Execute , .name = "Execute" },
+{ .code = XKB_KEY_Insert , .name = "Insert" },
+{ .code = XKB_KEY_Undo , .name = "Undo" },
+{ .code = XKB_KEY_Redo , .name = "Redo" },
+{ .code = XKB_KEY_Menu , .name = "Menu" },
+{ .code = XKB_KEY_Find , .name = "Find" },
+{ .code = XKB_KEY_Cancel , .name = "Cancel" },
+{ .code = XKB_KEY_Help , .name = "Help" },
+{ .code = XKB_KEY_Break , .name = "Break" },
+{ .code = XKB_KEY_Mode_switch , .name = "Mode_switch" },
+{ .code = XKB_KEY_script_switch , .name = "script_switch" },
+{ .code = XKB_KEY_Num_Lock , .name = "Num_Lock" },
+{ .code = XKB_KEY_KP_Space , .name = "KP_Space" },
+{ .code = XKB_KEY_KP_Tab , .name = "KP_Tab" },
+{ .code = XKB_KEY_KP_Enter , .name = "KP_Enter" },
+{ .code = XKB_KEY_KP_F1 , .name = "KP_F1" },
+{ .code = XKB_KEY_KP_F2 , .name = "KP_F2" },
+{ .code = XKB_KEY_KP_F3 , .name = "KP_F3" },
+{ .code = XKB_KEY_KP_F4 , .name = "KP_F4" },
+{ .code = XKB_KEY_KP_Home , .name = "KP_Home" },
+{ .code = XKB_KEY_KP_Left , .name = "KP_Left" },
+{ .code = XKB_KEY_KP_Up , .name = "KP_Up" },
+{ .code = XKB_KEY_KP_Right , .name = "KP_Right" },
+{ .code = XKB_KEY_KP_Down , .name = "KP_Down" },
+{ .code = XKB_KEY_KP_Prior , .name = "KP_Prior" },
+{ .code = XKB_KEY_KP_Page_Up , .name = "KP_Page_Up" },
+{ .code = XKB_KEY_KP_Next , .name = "KP_Next" },
+{ .code = XKB_KEY_KP_Page_Down , .name = "KP_Page_Down" },
+{ .code = XKB_KEY_KP_End , .name = "KP_End" },
+{ .code = XKB_KEY_KP_Begin , .name = "KP_Begin" },
+{ .code = XKB_KEY_KP_Insert , .name = "KP_Insert" },
+{ .code = XKB_KEY_KP_Delete , .name = "KP_Delete" },
+{ .code = XKB_KEY_KP_Equal , .name = "KP_Equal" },
+{ .code = XKB_KEY_KP_Multiply , .name = "KP_Multiply" },
+{ .code = XKB_KEY_KP_Add , .name = "KP_Add" },
+{ .code = XKB_KEY_KP_Separator , .name = "KP_Separator" },
+{ .code = XKB_KEY_KP_Subtract , .name = "KP_Subtract" },
+{ .code = XKB_KEY_KP_Decimal , .name = "KP_Decimal" },
+{ .code = XKB_KEY_KP_Divide , .name = "KP_Divide" },
+{ .code = XKB_KEY_KP_0 , .name = "KP_0" },
+{ .code = XKB_KEY_KP_1 , .name = "KP_1" },
+{ .code = XKB_KEY_KP_2 , .name = "KP_2" },
+{ .code = XKB_KEY_KP_3 , .name = "KP_3" },
+{ .code = XKB_KEY_KP_4 , .name = "KP_4" },
+{ .code = XKB_KEY_KP_5 , .name = "KP_5" },
+{ .code = XKB_KEY_KP_6 , .name = "KP_6" },
+{ .code = XKB_KEY_KP_7 , .name = "KP_7" },
+{ .code = XKB_KEY_KP_8 , .name = "KP_8" },
+{ .code = XKB_KEY_KP_9 , .name = "KP_9" },
+{ .code = XKB_KEY_F1 , .name = "F1" },
+{ .code = XKB_KEY_F2 , .name = "F2" },
+{ .code = XKB_KEY_F3 , .name = "F3" },
+{ .code = XKB_KEY_F4 , .name = "F4" },
+{ .code = XKB_KEY_F5 , .name = "F5" },
+{ .code = XKB_KEY_F6 , .name = "F6" },
+{ .code = XKB_KEY_F7 , .name = "F7" },
+{ .code = XKB_KEY_F8 , .name = "F8" },
+{ .code = XKB_KEY_F9 , .name = "F9" },
+{ .code = XKB_KEY_F10 , .name = "F10" },
+{ .code = XKB_KEY_F11 , .name = "F11" },
+{ .code = XKB_KEY_L1 , .name = "L1" },
+{ .code = XKB_KEY_F12 , .name = "F12" },
+{ .code = XKB_KEY_L2 , .name = "L2" },
+{ .code = XKB_KEY_F13 , .name = "F13" },
+{ .code = XKB_KEY_L3 , .name = "L3" },
+{ .code = XKB_KEY_F14 , .name = "F14" },
+{ .code = XKB_KEY_L4 , .name = "L4" },
+{ .code = XKB_KEY_F15 , .name = "F15" },
+{ .code = XKB_KEY_L5 , .name = "L5" },
+{ .code = XKB_KEY_F16 , .name = "F16" },
+{ .code = XKB_KEY_L6 , .name = "L6" },
+{ .code = XKB_KEY_F17 , .name = "F17" },
+{ .code = XKB_KEY_L7 , .name = "L7" },
+{ .code = XKB_KEY_F18 , .name = "F18" },
+{ .code = XKB_KEY_L8 , .name = "L8" },
+{ .code = XKB_KEY_F19 , .name = "F19" },
+{ .code = XKB_KEY_L9 , .name = "L9" },
+{ .code = XKB_KEY_F20 , .name = "F20" },
+{ .code = XKB_KEY_L10 , .name = "L10" },
+{ .code = XKB_KEY_F21 , .name = "F21" },
+{ .code = XKB_KEY_R1 , .name = "R1" },
+{ .code = XKB_KEY_F22 , .name = "F22" },
+{ .code = XKB_KEY_R2 , .name = "R2" },
+{ .code = XKB_KEY_F23 , .name = "F23" },
+{ .code = XKB_KEY_R3 , .name = "R3" },
+{ .code = XKB_KEY_F24 , .name = "F24" },
+{ .code = XKB_KEY_R4 , .name = "R4" },
+{ .code = XKB_KEY_F25 , .name = "F25" },
+{ .code = XKB_KEY_R5 , .name = "R5" },
+{ .code = XKB_KEY_F26 , .name = "F26" },
+{ .code = XKB_KEY_R6 , .name = "R6" },
+{ .code = XKB_KEY_F27 , .name = "F27" },
+{ .code = XKB_KEY_R7 , .name = "R7" },
+{ .code = XKB_KEY_F28 , .name = "F28" },
+{ .code = XKB_KEY_R8 , .name = "R8" },
+{ .code = XKB_KEY_F29 , .name = "F29" },
+{ .code = XKB_KEY_R9 , .name = "R9" },
+{ .code = XKB_KEY_F30 , .name = "F30" },
+{ .code = XKB_KEY_R10 , .name = "R10" },
+{ .code = XKB_KEY_F31 , .name = "F31" },
+{ .code = XKB_KEY_R11 , .name = "R11" },
+{ .code = XKB_KEY_F32 , .name = "F32" },
+{ .code = XKB_KEY_R12 , .name = "R12" },
+{ .code = XKB_KEY_F33 , .name = "F33" },
+{ .code = XKB_KEY_R13 , .name = "R13" },
+{ .code = XKB_KEY_F34 , .name = "F34" },
+{ .code = XKB_KEY_R14 , .name = "R14" },
+{ .code = XKB_KEY_F35 , .name = "F35" },
+{ .code = XKB_KEY_R15 , .name = "R15" },
+{ .code = XKB_KEY_Shift_L , .name = "Shift_L" },
+{ .code = XKB_KEY_Shift_R , .name = "Shift_R" },
+{ .code = XKB_KEY_Control_L , .name = "Control_L" },
+{ .code = XKB_KEY_Control_R , .name = "Control_R" },
+{ .code = XKB_KEY_Caps_Lock , .name = "Caps_Lock" },
+{ .code = XKB_KEY_Shift_Lock , .name = "Shift_Lock" },
+{ .code = XKB_KEY_Meta_L , .name = "Meta_L" },
+{ .code = XKB_KEY_Meta_R , .name = "Meta_R" },
+{ .code = XKB_KEY_Alt_L , .name = "Alt_L" },
+{ .code = XKB_KEY_Alt_R , .name = "Alt_R" },
+{ .code = XKB_KEY_Super_L , .name = "Super_L" },
+{ .code = XKB_KEY_Super_R , .name = "Super_R" },
+{ .code = XKB_KEY_Hyper_L , .name = "Hyper_L" },
+{ .code = XKB_KEY_Hyper_R , .name = "Hyper_R" },
+{ .code = XKB_KEY_ISO_Lock , .name = "ISO_Lock" },
+{ .code = XKB_KEY_ISO_Level2_Latch, .name = "ISO_Level2_Latch" },
+{ .code = XKB_KEY_ISO_Level3_Shift, .name = "ISO_Level3_Shift" },
+{ .code = XKB_KEY_ISO_Level3_Latch, .name = "ISO_Level3_Latch" },
+{ .code = XKB_KEY_ISO_Level3_Lock , .name = "ISO_Level3_Lock" },
+{ .code = XKB_KEY_ISO_Level5_Shift, .name = "ISO_Level5_Shift" },
+{ .code = XKB_KEY_ISO_Level5_Latch, .name = "ISO_Level5_Latch" },
+{ .code = XKB_KEY_ISO_Level5_Lock , .name = "ISO_Level5_Lock" },
+{ .code = XKB_KEY_ISO_Group_Shift , .name = "ISO_Group_Shift" },
+{ .code = XKB_KEY_ISO_Group_Latch , .name = "ISO_Group_Latch" },
+{ .code = XKB_KEY_ISO_Group_Lock , .name = "ISO_Group_Lock" },
+{ .code = XKB_KEY_ISO_Next_Group , .name = "ISO_Next_Group" },
+{ .code = XKB_KEY_ISO_Next_Group_Lock, .name = "ISO_Next_Group_Lock" },
+{ .code = XKB_KEY_ISO_Prev_Group , .name = "ISO_Prev_Group" },
+{ .code = XKB_KEY_ISO_Prev_Group_Lock, .name = "ISO_Prev_Group_Lock" },
+{ .code = XKB_KEY_ISO_First_Group , .name = "ISO_First_Group" },
+{ .code = XKB_KEY_ISO_First_Group_Lock, .name = "ISO_First_Group_Lock" },
+{ .code = XKB_KEY_ISO_Last_Group , .name = "ISO_Last_Group" },
+{ .code = XKB_KEY_ISO_Last_Group_Lock, .name = "ISO_Last_Group_Lock" },
+{ .code = XKB_KEY_ISO_Left_Tab , .name = "ISO_Left_Tab" },
+{ .code = XKB_KEY_ISO_Move_Line_Up, .name = "ISO_Move_Line_Up" },
+{ .code = XKB_KEY_ISO_Move_Line_Down, .name = "ISO_Move_Line_Down" },
+{ .code = XKB_KEY_ISO_Partial_Line_Up, .name = "ISO_Partial_Line_Up" },
+{ .code = XKB_KEY_ISO_Partial_Line_Down, .name = "ISO_Partial_Line_Down" },
+{ .code = XKB_KEY_ISO_Partial_Space_Left, .name = "ISO_Partial_Space_Left" },
+{ .code = XKB_KEY_ISO_Partial_Space_Right, .name = "ISO_Partial_Space_Right" },
+{ .code = XKB_KEY_ISO_Set_Margin_Left, .name = "ISO_Set_Margin_Left" },
+{ .code = XKB_KEY_ISO_Set_Margin_Right, .name = "ISO_Set_Margin_Right" },
+{ .code = XKB_KEY_ISO_Release_Margin_Left, .name = "ISO_Release_Margin_Left" },
+{ .code = XKB_KEY_ISO_Release_Margin_Right, .name = "ISO_Release_Margin_Right" },
+{ .code = XKB_KEY_ISO_Release_Both_Margins, .name = "ISO_Release_Both_Margins" },
+{ .code = XKB_KEY_ISO_Fast_Cursor_Left, .name = "ISO_Fast_Cursor_Left" },
+{ .code = XKB_KEY_ISO_Fast_Cursor_Right, .name = "ISO_Fast_Cursor_Right" },
+{ .code = XKB_KEY_ISO_Fast_Cursor_Up, .name = "ISO_Fast_Cursor_Up" },
+{ .code = XKB_KEY_ISO_Fast_Cursor_Down, .name = "ISO_Fast_Cursor_Down" },
+{ .code = XKB_KEY_ISO_Continuous_Underline, .name = "ISO_Continuous_Underline" },
+{ .code = XKB_KEY_ISO_Discontinuous_Underline, .name = "ISO_Discontinuous_Underline" },
+{ .code = XKB_KEY_ISO_Emphasize , .name = "ISO_Emphasize" },
+{ .code = XKB_KEY_ISO_Center_Object, .name = "ISO_Center_Object" },
+{ .code = XKB_KEY_ISO_Enter , .name = "ISO_Enter" },
+{ .code = XKB_KEY_dead_grave , .name = "dead_grave" },
+{ .code = XKB_KEY_dead_acute , .name = "dead_acute" },
+{ .code = XKB_KEY_dead_circumflex , .name = "dead_circumflex" },
+{ .code = XKB_KEY_dead_tilde , .name = "dead_tilde" },
+{ .code = XKB_KEY_dead_perispomeni, .name = "dead_perispomeni" },
+{ .code = XKB_KEY_dead_macron , .name = "dead_macron" },
+{ .code = XKB_KEY_dead_breve , .name = "dead_breve" },
+{ .code = XKB_KEY_dead_abovedot , .name = "dead_abovedot" },
+{ .code = XKB_KEY_dead_diaeresis , .name = "dead_diaeresis" },
+{ .code = XKB_KEY_dead_abovering , .name = "dead_abovering" },
+{ .code = XKB_KEY_dead_doubleacute, .name = "dead_doubleacute" },
+{ .code = XKB_KEY_dead_caron , .name = "dead_caron" },
+{ .code = XKB_KEY_dead_cedilla , .name = "dead_cedilla" },
+{ .code = XKB_KEY_dead_ogonek , .name = "dead_ogonek" },
+{ .code = XKB_KEY_dead_iota , .name = "dead_iota" },
+{ .code = XKB_KEY_dead_voiced_sound, .name = "dead_voiced_sound" },
+{ .code = XKB_KEY_dead_semivoiced_sound, .name = "dead_semivoiced_sound" },
+{ .code = XKB_KEY_dead_belowdot , .name = "dead_belowdot" },
+{ .code = XKB_KEY_dead_hook , .name = "dead_hook" },
+{ .code = XKB_KEY_dead_horn , .name = "dead_horn" },
+{ .code = XKB_KEY_dead_stroke , .name = "dead_stroke" },
+{ .code = XKB_KEY_dead_abovecomma , .name = "dead_abovecomma" },
+{ .code = XKB_KEY_dead_psili , .name = "dead_psili" },
+{ .code = XKB_KEY_dead_abovereversedcomma, .name = "dead_abovereversedcomma" },
+{ .code = XKB_KEY_dead_dasia , .name = "dead_dasia" },
+{ .code = XKB_KEY_dead_doublegrave, .name = "dead_doublegrave" },
+{ .code = XKB_KEY_dead_belowring , .name = "dead_belowring" },
+{ .code = XKB_KEY_dead_belowmacron, .name = "dead_belowmacron" },
+{ .code = XKB_KEY_dead_belowcircumflex, .name = "dead_belowcircumflex" },
+{ .code = XKB_KEY_dead_belowtilde , .name = "dead_belowtilde" },
+{ .code = XKB_KEY_dead_belowbreve , .name = "dead_belowbreve" },
+{ .code = XKB_KEY_dead_belowdiaeresis, .name = "dead_belowdiaeresis" },
+{ .code = XKB_KEY_dead_invertedbreve, .name = "dead_invertedbreve" },
+{ .code = XKB_KEY_dead_belowcomma , .name = "dead_belowcomma" },
+{ .code = XKB_KEY_dead_currency , .name = "dead_currency" },
+{ .code = XKB_KEY_dead_lowline , .name = "dead_lowline" },
+{ .code = XKB_KEY_dead_aboveverticalline, .name = "dead_aboveverticalline" },
+{ .code = XKB_KEY_dead_belowverticalline, .name = "dead_belowverticalline" },
+{ .code = XKB_KEY_dead_longsolidusoverlay, .name = "dead_longsolidusoverlay" },
+{ .code = XKB_KEY_dead_a , .name = "dead_a" },
+{ .code = XKB_KEY_dead_A , .name = "dead_A" },
+{ .code = XKB_KEY_dead_e , .name = "dead_e" },
+{ .code = XKB_KEY_dead_E , .name = "dead_E" },
+{ .code = XKB_KEY_dead_i , .name = "dead_i" },
+{ .code = XKB_KEY_dead_I , .name = "dead_I" },
+{ .code = XKB_KEY_dead_o , .name = "dead_o" },
+{ .code = XKB_KEY_dead_O , .name = "dead_O" },
+{ .code = XKB_KEY_dead_u , .name = "dead_u" },
+{ .code = XKB_KEY_dead_U , .name = "dead_U" },
+{ .code = XKB_KEY_dead_small_schwa, .name = "dead_small_schwa" },
+{ .code = XKB_KEY_dead_capital_schwa, .name = "dead_capital_schwa" },
+{ .code = XKB_KEY_dead_greek , .name = "dead_greek" },
+{ .code = XKB_KEY_First_Virtual_Screen, .name = "First_Virtual_Screen" },
+{ .code = XKB_KEY_Prev_Virtual_Screen, .name = "Prev_Virtual_Screen" },
+{ .code = XKB_KEY_Next_Virtual_Screen, .name = "Next_Virtual_Screen" },
+{ .code = XKB_KEY_Last_Virtual_Screen, .name = "Last_Virtual_Screen" },
+{ .code = XKB_KEY_Terminate_Server, .name = "Terminate_Server" },
+{ .code = XKB_KEY_AccessX_Enable , .name = "AccessX_Enable" },
+{ .code = XKB_KEY_AccessX_Feedback_Enable, .name = "AccessX_Feedback_Enable" },
+{ .code = XKB_KEY_RepeatKeys_Enable, .name = "RepeatKeys_Enable" },
+{ .code = XKB_KEY_SlowKeys_Enable , .name = "SlowKeys_Enable" },
+{ .code = XKB_KEY_BounceKeys_Enable, .name = "BounceKeys_Enable" },
+{ .code = XKB_KEY_StickyKeys_Enable, .name = "StickyKeys_Enable" },
+{ .code = XKB_KEY_MouseKeys_Enable, .name = "MouseKeys_Enable" },
+{ .code = XKB_KEY_MouseKeys_Accel_Enable, .name = "MouseKeys_Accel_Enable" },
+{ .code = XKB_KEY_Overlay1_Enable , .name = "Overlay1_Enable" },
+{ .code = XKB_KEY_Overlay2_Enable , .name = "Overlay2_Enable" },
+{ .code = XKB_KEY_AudibleBell_Enable, .name = "AudibleBell_Enable" },
+{ .code = XKB_KEY_Pointer_Left , .name = "Pointer_Left" },
+{ .code = XKB_KEY_Pointer_Right , .name = "Pointer_Right" },
+{ .code = XKB_KEY_Pointer_Up , .name = "Pointer_Up" },
+{ .code = XKB_KEY_Pointer_Down , .name = "Pointer_Down" },
+{ .code = XKB_KEY_Pointer_UpLeft , .name = "Pointer_UpLeft" },
+{ .code = XKB_KEY_Pointer_UpRight , .name = "Pointer_UpRight" },
+{ .code = XKB_KEY_Pointer_DownLeft, .name = "Pointer_DownLeft" },
+{ .code = XKB_KEY_Pointer_DownRight, .name = "Pointer_DownRight" },
+{ .code = XKB_KEY_Pointer_Button_Dflt, .name = "Pointer_Button_Dflt" },
+{ .code = XKB_KEY_Pointer_Button1 , .name = "Pointer_Button1" },
+{ .code = XKB_KEY_Pointer_Button2 , .name = "Pointer_Button2" },
+{ .code = XKB_KEY_Pointer_Button3 , .name = "Pointer_Button3" },
+{ .code = XKB_KEY_Pointer_Button4 , .name = "Pointer_Button4" },
+{ .code = XKB_KEY_Pointer_Button5 , .name = "Pointer_Button5" },
+{ .code = XKB_KEY_Pointer_DblClick_Dflt, .name = "Pointer_DblClick_Dflt" },
+{ .code = XKB_KEY_Pointer_DblClick1, .name = "Pointer_DblClick1" },
+{ .code = XKB_KEY_Pointer_DblClick2, .name = "Pointer_DblClick2" },
+{ .code = XKB_KEY_Pointer_DblClick3, .name = "Pointer_DblClick3" },
+{ .code = XKB_KEY_Pointer_DblClick4, .name = "Pointer_DblClick4" },
+{ .code = XKB_KEY_Pointer_DblClick5, .name = "Pointer_DblClick5" },
+{ .code = XKB_KEY_Pointer_Drag_Dflt, .name = "Pointer_Drag_Dflt" },
+{ .code = XKB_KEY_Pointer_Drag1 , .name = "Pointer_Drag1" },
+{ .code = XKB_KEY_Pointer_Drag2 , .name = "Pointer_Drag2" },
+{ .code = XKB_KEY_Pointer_Drag3 , .name = "Pointer_Drag3" },
+{ .code = XKB_KEY_Pointer_Drag4 , .name = "Pointer_Drag4" },
+{ .code = XKB_KEY_Pointer_Drag5 , .name = "Pointer_Drag5" },
+{ .code = XKB_KEY_Pointer_EnableKeys, .name = "Pointer_EnableKeys" },
+{ .code = XKB_KEY_Pointer_Accelerate, .name = "Pointer_Accelerate" },
+{ .code = XKB_KEY_Pointer_DfltBtnNext, .name = "Pointer_DfltBtnNext" },
+{ .code = XKB_KEY_Pointer_DfltBtnPrev, .name = "Pointer_DfltBtnPrev" },
+{ .code = XKB_KEY_ch , .name = "ch" },
+{ .code = XKB_KEY_Ch , .name = "Ch" },
+{ .code = XKB_KEY_CH , .name = "CH" },
+{ .code = XKB_KEY_c_h , .name = "c_h" },
+{ .code = XKB_KEY_C_h , .name = "C_h" },
+{ .code = XKB_KEY_C_H , .name = "C_H" },
+{ .code = XKB_KEY_3270_Duplicate , .name = "3270_Duplicate" },
+{ .code = XKB_KEY_3270_FieldMark , .name = "3270_FieldMark" },
+{ .code = XKB_KEY_3270_Right2 , .name = "3270_Right2" },
+{ .code = XKB_KEY_3270_Left2 , .name = "3270_Left2" },
+{ .code = XKB_KEY_3270_BackTab , .name = "3270_BackTab" },
+{ .code = XKB_KEY_3270_EraseEOF , .name = "3270_EraseEOF" },
+{ .code = XKB_KEY_3270_EraseInput , .name = "3270_EraseInput" },
+{ .code = XKB_KEY_3270_Reset , .name = "3270_Reset" },
+{ .code = XKB_KEY_3270_Quit , .name = "3270_Quit" },
+{ .code = XKB_KEY_3270_PA1 , .name = "3270_PA1" },
+{ .code = XKB_KEY_3270_PA2 , .name = "3270_PA2" },
+{ .code = XKB_KEY_3270_PA3 , .name = "3270_PA3" },
+{ .code = XKB_KEY_3270_Test , .name = "3270_Test" },
+{ .code = XKB_KEY_3270_Attn , .name = "3270_Attn" },
+{ .code = XKB_KEY_3270_CursorBlink, .name = "3270_CursorBlink" },
+{ .code = XKB_KEY_3270_AltCursor , .name = "3270_AltCursor" },
+{ .code = XKB_KEY_3270_KeyClick , .name = "3270_KeyClick" },
+{ .code = XKB_KEY_3270_Jump , .name = "3270_Jump" },
+{ .code = XKB_KEY_3270_Ident , .name = "3270_Ident" },
+{ .code = XKB_KEY_3270_Rule , .name = "3270_Rule" },
+{ .code = XKB_KEY_3270_Copy , .name = "3270_Copy" },
+{ .code = XKB_KEY_3270_Play , .name = "3270_Play" },
+{ .code = XKB_KEY_3270_Setup , .name = "3270_Setup" },
+{ .code = XKB_KEY_3270_Record , .name = "3270_Record" },
+{ .code = XKB_KEY_3270_ChangeScreen, .name = "3270_ChangeScreen" },
+{ .code = XKB_KEY_3270_DeleteWord , .name = "3270_DeleteWord" },
+{ .code = XKB_KEY_3270_ExSelect , .name = "3270_ExSelect" },
+{ .code = XKB_KEY_3270_CursorSelect, .name = "3270_CursorSelect" },
+{ .code = XKB_KEY_3270_PrintScreen, .name = "3270_PrintScreen" },
+{ .code = XKB_KEY_3270_Enter , .name = "3270_Enter" },
+{ .code = XKB_KEY_space , .name = "space" },
+{ .code = XKB_KEY_exclam , .name = "exclam" },
+{ .code = XKB_KEY_quotedbl , .name = "quotedbl" },
+{ .code = XKB_KEY_numbersign , .name = "numbersign" },
+{ .code = XKB_KEY_dollar , .name = "dollar" },
+{ .code = XKB_KEY_percent , .name = "percent" },
+{ .code = XKB_KEY_ampersand , .name = "ampersand" },
+{ .code = XKB_KEY_apostrophe , .name = "apostrophe" },
+{ .code = XKB_KEY_quoteright , .name = "quoteright" },
+{ .code = XKB_KEY_parenleft , .name = "parenleft" },
+{ .code = XKB_KEY_parenright , .name = "parenright" },
+{ .code = XKB_KEY_asterisk , .name = "asterisk" },
+{ .code = XKB_KEY_plus , .name = "plus" },
+{ .code = XKB_KEY_comma , .name = "comma" },
+{ .code = XKB_KEY_minus , .name = "minus" },
+{ .code = XKB_KEY_period , .name = "period" },
+{ .code = XKB_KEY_slash , .name = "slash" },
+{ .code = XKB_KEY_0 , .name = "0" },
+{ .code = XKB_KEY_1 , .name = "1" },
+{ .code = XKB_KEY_2 , .name = "2" },
+{ .code = XKB_KEY_3 , .name = "3" },
+{ .code = XKB_KEY_4 , .name = "4" },
+{ .code = XKB_KEY_5 , .name = "5" },
+{ .code = XKB_KEY_6 , .name = "6" },
+{ .code = XKB_KEY_7 , .name = "7" },
+{ .code = XKB_KEY_8 , .name = "8" },
+{ .code = XKB_KEY_9 , .name = "9" },
+{ .code = XKB_KEY_colon , .name = "colon" },
+{ .code = XKB_KEY_semicolon , .name = "semicolon" },
+{ .code = XKB_KEY_less , .name = "less" },
+{ .code = XKB_KEY_equal , .name = "equal" },
+{ .code = XKB_KEY_greater , .name = "greater" },
+{ .code = XKB_KEY_question , .name = "question" },
+{ .code = XKB_KEY_at , .name = "at" },
+{ .code = XKB_KEY_A , .name = "A" },
+{ .code = XKB_KEY_B , .name = "B" },
+{ .code = XKB_KEY_C , .name = "C" },
+{ .code = XKB_KEY_D , .name = "D" },
+{ .code = XKB_KEY_E , .name = "E" },
+{ .code = XKB_KEY_F , .name = "F" },
+{ .code = XKB_KEY_G , .name = "G" },
+{ .code = XKB_KEY_H , .name = "H" },
+{ .code = XKB_KEY_I , .name = "I" },
+{ .code = XKB_KEY_J , .name = "J" },
+{ .code = XKB_KEY_K , .name = "K" },
+{ .code = XKB_KEY_L , .name = "L" },
+{ .code = XKB_KEY_M , .name = "M" },
+{ .code = XKB_KEY_N , .name = "N" },
+{ .code = XKB_KEY_O , .name = "O" },
+{ .code = XKB_KEY_P , .name = "P" },
+{ .code = XKB_KEY_Q , .name = "Q" },
+{ .code = XKB_KEY_R , .name = "R" },
+{ .code = XKB_KEY_S , .name = "S" },
+{ .code = XKB_KEY_T , .name = "T" },
+{ .code = XKB_KEY_U , .name = "U" },
+{ .code = XKB_KEY_V , .name = "V" },
+{ .code = XKB_KEY_W , .name = "W" },
+{ .code = XKB_KEY_X , .name = "X" },
+{ .code = XKB_KEY_Y , .name = "Y" },
+{ .code = XKB_KEY_Z , .name = "Z" },
+{ .code = XKB_KEY_bracketleft , .name = "bracketleft" },
+{ .code = XKB_KEY_backslash , .name = "backslash" },
+{ .code = XKB_KEY_bracketright , .name = "bracketright" },
+{ .code = XKB_KEY_asciicircum , .name = "asciicircum" },
+{ .code = XKB_KEY_underscore , .name = "underscore" },
+{ .code = XKB_KEY_grave , .name = "grave" },
+{ .code = XKB_KEY_quoteleft , .name = "quoteleft" },
+{ .code = XKB_KEY_a , .name = "a" },
+{ .code = XKB_KEY_b , .name = "b" },
+{ .code = XKB_KEY_c , .name = "c" },
+{ .code = XKB_KEY_d , .name = "d" },
+{ .code = XKB_KEY_e , .name = "e" },
+{ .code = XKB_KEY_f , .name = "f" },
+{ .code = XKB_KEY_g , .name = "g" },
+{ .code = XKB_KEY_h , .name = "h" },
+{ .code = XKB_KEY_i , .name = "i" },
+{ .code = XKB_KEY_j , .name = "j" },
+{ .code = XKB_KEY_k , .name = "k" },
+{ .code = XKB_KEY_l , .name = "l" },
+{ .code = XKB_KEY_m , .name = "m" },
+{ .code = XKB_KEY_n , .name = "n" },
+{ .code = XKB_KEY_o , .name = "o" },
+{ .code = XKB_KEY_p , .name = "p" },
+{ .code = XKB_KEY_q , .name = "q" },
+{ .code = XKB_KEY_r , .name = "r" },
+{ .code = XKB_KEY_s , .name = "s" },
+{ .code = XKB_KEY_t , .name = "t" },
+{ .code = XKB_KEY_u , .name = "u" },
+{ .code = XKB_KEY_v , .name = "v" },
+{ .code = XKB_KEY_w , .name = "w" },
+{ .code = XKB_KEY_x , .name = "x" },
+{ .code = XKB_KEY_y , .name = "y" },
+{ .code = XKB_KEY_z , .name = "z" },
+{ .code = XKB_KEY_braceleft , .name = "braceleft" },
+{ .code = XKB_KEY_bar , .name = "bar" },
+{ .code = XKB_KEY_braceright , .name = "braceright" },
+{ .code = XKB_KEY_asciitilde , .name = "asciitilde" },
+{ .code = XKB_KEY_nobreakspace , .name = "nobreakspace" },
+{ .code = XKB_KEY_exclamdown , .name = "exclamdown" },
+{ .code = XKB_KEY_cent , .name = "cent" },
+{ .code = XKB_KEY_sterling , .name = "sterling" },
+{ .code = XKB_KEY_currency , .name = "currency" },
+{ .code = XKB_KEY_yen , .name = "yen" },
+{ .code = XKB_KEY_brokenbar , .name = "brokenbar" },
+{ .code = XKB_KEY_section , .name = "section" },
+{ .code = XKB_KEY_diaeresis , .name = "diaeresis" },
+{ .code = XKB_KEY_copyright , .name = "copyright" },
+{ .code = XKB_KEY_ordfeminine , .name = "ordfeminine" },
+{ .code = XKB_KEY_guillemotleft , .name = "guillemotleft" },
+{ .code = XKB_KEY_notsign , .name = "notsign" },
+{ .code = XKB_KEY_hyphen , .name = "hyphen" },
+{ .code = XKB_KEY_registered , .name = "registered" },
+{ .code = XKB_KEY_macron , .name = "macron" },
+{ .code = XKB_KEY_degree , .name = "degree" },
+{ .code = XKB_KEY_plusminus , .name = "plusminus" },
+{ .code = XKB_KEY_twosuperior , .name = "twosuperior" },
+{ .code = XKB_KEY_threesuperior , .name = "threesuperior" },
+{ .code = XKB_KEY_acute , .name = "acute" },
+{ .code = XKB_KEY_mu , .name = "mu" },
+{ .code = XKB_KEY_paragraph , .name = "paragraph" },
+{ .code = XKB_KEY_periodcentered , .name = "periodcentered" },
+{ .code = XKB_KEY_cedilla , .name = "cedilla" },
+{ .code = XKB_KEY_onesuperior , .name = "onesuperior" },
+{ .code = XKB_KEY_masculine , .name = "masculine" },
+{ .code = XKB_KEY_guillemotright , .name = "guillemotright" },
+{ .code = XKB_KEY_onequarter , .name = "onequarter" },
+{ .code = XKB_KEY_onehalf , .name = "onehalf" },
+{ .code = XKB_KEY_threequarters , .name = "threequarters" },
+{ .code = XKB_KEY_questiondown , .name = "questiondown" },
+{ .code = XKB_KEY_Agrave , .name = "Agrave" },
+{ .code = XKB_KEY_Aacute , .name = "Aacute" },
+{ .code = XKB_KEY_Acircumflex , .name = "Acircumflex" },
+{ .code = XKB_KEY_Atilde , .name = "Atilde" },
+{ .code = XKB_KEY_Adiaeresis , .name = "Adiaeresis" },
+{ .code = XKB_KEY_Aring , .name = "Aring" },
+{ .code = XKB_KEY_AE , .name = "AE" },
+{ .code = XKB_KEY_Ccedilla , .name = "Ccedilla" },
+{ .code = XKB_KEY_Egrave , .name = "Egrave" },
+{ .code = XKB_KEY_Eacute , .name = "Eacute" },
+{ .code = XKB_KEY_Ecircumflex , .name = "Ecircumflex" },
+{ .code = XKB_KEY_Ediaeresis , .name = "Ediaeresis" },
+{ .code = XKB_KEY_Igrave , .name = "Igrave" },
+{ .code = XKB_KEY_Iacute , .name = "Iacute" },
+{ .code = XKB_KEY_Icircumflex , .name = "Icircumflex" },
+{ .code = XKB_KEY_Idiaeresis , .name = "Idiaeresis" },
+{ .code = XKB_KEY_ETH , .name = "ETH" },
+{ .code = XKB_KEY_Eth , .name = "Eth" },
+{ .code = XKB_KEY_Ntilde , .name = "Ntilde" },
+{ .code = XKB_KEY_Ograve , .name = "Ograve" },
+{ .code = XKB_KEY_Oacute , .name = "Oacute" },
+{ .code = XKB_KEY_Ocircumflex , .name = "Ocircumflex" },
+{ .code = XKB_KEY_Otilde , .name = "Otilde" },
+{ .code = XKB_KEY_Odiaeresis , .name = "Odiaeresis" },
+{ .code = XKB_KEY_multiply , .name = "multiply" },
+{ .code = XKB_KEY_Oslash , .name = "Oslash" },
+{ .code = XKB_KEY_Ooblique , .name = "Ooblique" },
+{ .code = XKB_KEY_Ugrave , .name = "Ugrave" },
+{ .code = XKB_KEY_Uacute , .name = "Uacute" },
+{ .code = XKB_KEY_Ucircumflex , .name = "Ucircumflex" },
+{ .code = XKB_KEY_Udiaeresis , .name = "Udiaeresis" },
+{ .code = XKB_KEY_Yacute , .name = "Yacute" },
+{ .code = XKB_KEY_THORN , .name = "THORN" },
+{ .code = XKB_KEY_Thorn , .name = "Thorn" },
+{ .code = XKB_KEY_ssharp , .name = "ssharp" },
+{ .code = XKB_KEY_agrave , .name = "agrave" },
+{ .code = XKB_KEY_aacute , .name = "aacute" },
+{ .code = XKB_KEY_acircumflex , .name = "acircumflex" },
+{ .code = XKB_KEY_atilde , .name = "atilde" },
+{ .code = XKB_KEY_adiaeresis , .name = "adiaeresis" },
+{ .code = XKB_KEY_aring , .name = "aring" },
+{ .code = XKB_KEY_ae , .name = "ae" },
+{ .code = XKB_KEY_ccedilla , .name = "ccedilla" },
+{ .code = XKB_KEY_egrave , .name = "egrave" },
+{ .code = XKB_KEY_eacute , .name = "eacute" },
+{ .code = XKB_KEY_ecircumflex , .name = "ecircumflex" },
+{ .code = XKB_KEY_ediaeresis , .name = "ediaeresis" },
+{ .code = XKB_KEY_igrave , .name = "igrave" },
+{ .code = XKB_KEY_iacute , .name = "iacute" },
+{ .code = XKB_KEY_icircumflex , .name = "icircumflex" },
+{ .code = XKB_KEY_idiaeresis , .name = "idiaeresis" },
+{ .code = XKB_KEY_eth , .name = "eth" },
+{ .code = XKB_KEY_ntilde , .name = "ntilde" },
+{ .code = XKB_KEY_ograve , .name = "ograve" },
+{ .code = XKB_KEY_oacute , .name = "oacute" },
+{ .code = XKB_KEY_ocircumflex , .name = "ocircumflex" },
+{ .code = XKB_KEY_otilde , .name = "otilde" },
+{ .code = XKB_KEY_odiaeresis , .name = "odiaeresis" },
+{ .code = XKB_KEY_division , .name = "division" },
+{ .code = XKB_KEY_oslash , .name = "oslash" },
+{ .code = XKB_KEY_ooblique , .name = "ooblique" },
+{ .code = XKB_KEY_ugrave , .name = "ugrave" },
+{ .code = XKB_KEY_uacute , .name = "uacute" },
+{ .code = XKB_KEY_ucircumflex , .name = "ucircumflex" },
+{ .code = XKB_KEY_udiaeresis , .name = "udiaeresis" },
+{ .code = XKB_KEY_yacute , .name = "yacute" },
+{ .code = XKB_KEY_thorn , .name = "thorn" },
+{ .code = XKB_KEY_ydiaeresis , .name = "ydiaeresis" },
+{ .code = XKB_KEY_Aogonek , .name = "Aogonek" },
+{ .code = XKB_KEY_breve , .name = "breve" },
+{ .code = XKB_KEY_Lstroke , .name = "Lstroke" },
+{ .code = XKB_KEY_Lcaron , .name = "Lcaron" },
+{ .code = XKB_KEY_Sacute , .name = "Sacute" },
+{ .code = XKB_KEY_Scaron , .name = "Scaron" },
+{ .code = XKB_KEY_Scedilla , .name = "Scedilla" },
+{ .code = XKB_KEY_Tcaron , .name = "Tcaron" },
+{ .code = XKB_KEY_Zacute , .name = "Zacute" },
+{ .code = XKB_KEY_Zcaron , .name = "Zcaron" },
+{ .code = XKB_KEY_Zabovedot , .name = "Zabovedot" },
+{ .code = XKB_KEY_aogonek , .name = "aogonek" },
+{ .code = XKB_KEY_ogonek , .name = "ogonek" },
+{ .code = XKB_KEY_lstroke , .name = "lstroke" },
+{ .code = XKB_KEY_lcaron , .name = "lcaron" },
+{ .code = XKB_KEY_sacute , .name = "sacute" },
+{ .code = XKB_KEY_caron , .name = "caron" },
+{ .code = XKB_KEY_scaron , .name = "scaron" },
+{ .code = XKB_KEY_scedilla , .name = "scedilla" },
+{ .code = XKB_KEY_tcaron , .name = "tcaron" },
+{ .code = XKB_KEY_zacute , .name = "zacute" },
+{ .code = XKB_KEY_doubleacute , .name = "doubleacute" },
+{ .code = XKB_KEY_zcaron , .name = "zcaron" },
+{ .code = XKB_KEY_zabovedot , .name = "zabovedot" },
+{ .code = XKB_KEY_Racute , .name = "Racute" },
+{ .code = XKB_KEY_Abreve , .name = "Abreve" },
+{ .code = XKB_KEY_Lacute , .name = "Lacute" },
+{ .code = XKB_KEY_Cacute , .name = "Cacute" },
+{ .code = XKB_KEY_Ccaron , .name = "Ccaron" },
+{ .code = XKB_KEY_Eogonek , .name = "Eogonek" },
+{ .code = XKB_KEY_Ecaron , .name = "Ecaron" },
+{ .code = XKB_KEY_Dcaron , .name = "Dcaron" },
+{ .code = XKB_KEY_Dstroke , .name = "Dstroke" },
+{ .code = XKB_KEY_Nacute , .name = "Nacute" },
+{ .code = XKB_KEY_Ncaron , .name = "Ncaron" },
+{ .code = XKB_KEY_Odoubleacute , .name = "Odoubleacute" },
+{ .code = XKB_KEY_Rcaron , .name = "Rcaron" },
+{ .code = XKB_KEY_Uring , .name = "Uring" },
+{ .code = XKB_KEY_Udoubleacute , .name = "Udoubleacute" },
+{ .code = XKB_KEY_Tcedilla , .name = "Tcedilla" },
+{ .code = XKB_KEY_racute , .name = "racute" },
+{ .code = XKB_KEY_abreve , .name = "abreve" },
+{ .code = XKB_KEY_lacute , .name = "lacute" },
+{ .code = XKB_KEY_cacute , .name = "cacute" },
+{ .code = XKB_KEY_ccaron , .name = "ccaron" },
+{ .code = XKB_KEY_eogonek , .name = "eogonek" },
+{ .code = XKB_KEY_ecaron , .name = "ecaron" },
+{ .code = XKB_KEY_dcaron , .name = "dcaron" },
+{ .code = XKB_KEY_dstroke , .name = "dstroke" },
+{ .code = XKB_KEY_nacute , .name = "nacute" },
+{ .code = XKB_KEY_ncaron , .name = "ncaron" },
+{ .code = XKB_KEY_odoubleacute , .name = "odoubleacute" },
+{ .code = XKB_KEY_rcaron , .name = "rcaron" },
+{ .code = XKB_KEY_uring , .name = "uring" },
+{ .code = XKB_KEY_udoubleacute , .name = "udoubleacute" },
+{ .code = XKB_KEY_tcedilla , .name = "tcedilla" },
+{ .code = XKB_KEY_abovedot , .name = "abovedot" },
+{ .code = XKB_KEY_Hstroke , .name = "Hstroke" },
+{ .code = XKB_KEY_Hcircumflex , .name = "Hcircumflex" },
+{ .code = XKB_KEY_Iabovedot , .name = "Iabovedot" },
+{ .code = XKB_KEY_Gbreve , .name = "Gbreve" },
+{ .code = XKB_KEY_Jcircumflex , .name = "Jcircumflex" },
+{ .code = XKB_KEY_hstroke , .name = "hstroke" },
+{ .code = XKB_KEY_hcircumflex , .name = "hcircumflex" },
+{ .code = XKB_KEY_idotless , .name = "idotless" },
+{ .code = XKB_KEY_gbreve , .name = "gbreve" },
+{ .code = XKB_KEY_jcircumflex , .name = "jcircumflex" },
+{ .code = XKB_KEY_Cabovedot , .name = "Cabovedot" },
+{ .code = XKB_KEY_Ccircumflex , .name = "Ccircumflex" },
+{ .code = XKB_KEY_Gabovedot , .name = "Gabovedot" },
+{ .code = XKB_KEY_Gcircumflex , .name = "Gcircumflex" },
+{ .code = XKB_KEY_Ubreve , .name = "Ubreve" },
+{ .code = XKB_KEY_Scircumflex , .name = "Scircumflex" },
+{ .code = XKB_KEY_cabovedot , .name = "cabovedot" },
+{ .code = XKB_KEY_ccircumflex , .name = "ccircumflex" },
+{ .code = XKB_KEY_gabovedot , .name = "gabovedot" },
+{ .code = XKB_KEY_gcircumflex , .name = "gcircumflex" },
+{ .code = XKB_KEY_ubreve , .name = "ubreve" },
+{ .code = XKB_KEY_scircumflex , .name = "scircumflex" },
+{ .code = XKB_KEY_kra , .name = "kra" },
+{ .code = XKB_KEY_kappa , .name = "kappa" },
+{ .code = XKB_KEY_Rcedilla , .name = "Rcedilla" },
+{ .code = XKB_KEY_Itilde , .name = "Itilde" },
+{ .code = XKB_KEY_Lcedilla , .name = "Lcedilla" },
+{ .code = XKB_KEY_Emacron , .name = "Emacron" },
+{ .code = XKB_KEY_Gcedilla , .name = "Gcedilla" },
+{ .code = XKB_KEY_Tslash , .name = "Tslash" },
+{ .code = XKB_KEY_rcedilla , .name = "rcedilla" },
+{ .code = XKB_KEY_itilde , .name = "itilde" },
+{ .code = XKB_KEY_lcedilla , .name = "lcedilla" },
+{ .code = XKB_KEY_emacron , .name = "emacron" },
+{ .code = XKB_KEY_gcedilla , .name = "gcedilla" },
+{ .code = XKB_KEY_tslash , .name = "tslash" },
+{ .code = XKB_KEY_ENG , .name = "ENG" },
+{ .code = XKB_KEY_eng , .name = "eng" },
+{ .code = XKB_KEY_Amacron , .name = "Amacron" },
+{ .code = XKB_KEY_Iogonek , .name = "Iogonek" },
+{ .code = XKB_KEY_Eabovedot , .name = "Eabovedot" },
+{ .code = XKB_KEY_Imacron , .name = "Imacron" },
+{ .code = XKB_KEY_Ncedilla , .name = "Ncedilla" },
+{ .code = XKB_KEY_Omacron , .name = "Omacron" },
+{ .code = XKB_KEY_Kcedilla , .name = "Kcedilla" },
+{ .code = XKB_KEY_Uogonek , .name = "Uogonek" },
+{ .code = XKB_KEY_Utilde , .name = "Utilde" },
+{ .code = XKB_KEY_Umacron , .name = "Umacron" },
+{ .code = XKB_KEY_amacron , .name = "amacron" },
+{ .code = XKB_KEY_iogonek , .name = "iogonek" },
+{ .code = XKB_KEY_eabovedot , .name = "eabovedot" },
+{ .code = XKB_KEY_imacron , .name = "imacron" },
+{ .code = XKB_KEY_ncedilla , .name = "ncedilla" },
+{ .code = XKB_KEY_omacron , .name = "omacron" },
+{ .code = XKB_KEY_kcedilla , .name = "kcedilla" },
+{ .code = XKB_KEY_uogonek , .name = "uogonek" },
+{ .code = XKB_KEY_utilde , .name = "utilde" },
+{ .code = XKB_KEY_umacron , .name = "umacron" },
+{ .code = XKB_KEY_Wcircumflex , .name = "Wcircumflex" },
+{ .code = XKB_KEY_wcircumflex , .name = "wcircumflex" },
+{ .code = XKB_KEY_Ycircumflex , .name = "Ycircumflex" },
+{ .code = XKB_KEY_ycircumflex , .name = "ycircumflex" },
+{ .code = XKB_KEY_Babovedot , .name = "Babovedot" },
+{ .code = XKB_KEY_babovedot , .name = "babovedot" },
+{ .code = XKB_KEY_Dabovedot , .name = "Dabovedot" },
+{ .code = XKB_KEY_dabovedot , .name = "dabovedot" },
+{ .code = XKB_KEY_Fabovedot , .name = "Fabovedot" },
+{ .code = XKB_KEY_fabovedot , .name = "fabovedot" },
+{ .code = XKB_KEY_Mabovedot , .name = "Mabovedot" },
+{ .code = XKB_KEY_mabovedot , .name = "mabovedot" },
+{ .code = XKB_KEY_Pabovedot , .name = "Pabovedot" },
+{ .code = XKB_KEY_pabovedot , .name = "pabovedot" },
+{ .code = XKB_KEY_Sabovedot , .name = "Sabovedot" },
+{ .code = XKB_KEY_sabovedot , .name = "sabovedot" },
+{ .code = XKB_KEY_Tabovedot , .name = "Tabovedot" },
+{ .code = XKB_KEY_tabovedot , .name = "tabovedot" },
+{ .code = XKB_KEY_Wgrave , .name = "Wgrave" },
+{ .code = XKB_KEY_wgrave , .name = "wgrave" },
+{ .code = XKB_KEY_Wacute , .name = "Wacute" },
+{ .code = XKB_KEY_wacute , .name = "wacute" },
+{ .code = XKB_KEY_Wdiaeresis , .name = "Wdiaeresis" },
+{ .code = XKB_KEY_wdiaeresis , .name = "wdiaeresis" },
+{ .code = XKB_KEY_Ygrave , .name = "Ygrave" },
+{ .code = XKB_KEY_ygrave , .name = "ygrave" },
+{ .code = XKB_KEY_OE , .name = "OE" },
+{ .code = XKB_KEY_oe , .name = "oe" },
+{ .code = XKB_KEY_Ydiaeresis , .name = "Ydiaeresis" },
+{ .code = XKB_KEY_overline , .name = "overline" },
+{ .code = XKB_KEY_kana_fullstop , .name = "kana_fullstop" },
+{ .code = XKB_KEY_kana_openingbracket, .name = "kana_openingbracket" },
+{ .code = XKB_KEY_kana_closingbracket, .name = "kana_closingbracket" },
+{ .code = XKB_KEY_kana_comma , .name = "kana_comma" },
+{ .code = XKB_KEY_kana_conjunctive, .name = "kana_conjunctive" },
+{ .code = XKB_KEY_kana_middledot , .name = "kana_middledot" },
+{ .code = XKB_KEY_kana_WO , .name = "kana_WO" },
+{ .code = XKB_KEY_kana_a , .name = "kana_a" },
+{ .code = XKB_KEY_kana_i , .name = "kana_i" },
+{ .code = XKB_KEY_kana_u , .name = "kana_u" },
+{ .code = XKB_KEY_kana_e , .name = "kana_e" },
+{ .code = XKB_KEY_kana_o , .name = "kana_o" },
+{ .code = XKB_KEY_kana_ya , .name = "kana_ya" },
+{ .code = XKB_KEY_kana_yu , .name = "kana_yu" },
+{ .code = XKB_KEY_kana_yo , .name = "kana_yo" },
+{ .code = XKB_KEY_kana_tsu , .name = "kana_tsu" },
+{ .code = XKB_KEY_kana_tu , .name = "kana_tu" },
+{ .code = XKB_KEY_prolongedsound , .name = "prolongedsound" },
+{ .code = XKB_KEY_kana_A , .name = "kana_A" },
+{ .code = XKB_KEY_kana_I , .name = "kana_I" },
+{ .code = XKB_KEY_kana_U , .name = "kana_U" },
+{ .code = XKB_KEY_kana_E , .name = "kana_E" },
+{ .code = XKB_KEY_kana_O , .name = "kana_O" },
+{ .code = XKB_KEY_kana_KA , .name = "kana_KA" },
+{ .code = XKB_KEY_kana_KI , .name = "kana_KI" },
+{ .code = XKB_KEY_kana_KU , .name = "kana_KU" },
+{ .code = XKB_KEY_kana_KE , .name = "kana_KE" },
+{ .code = XKB_KEY_kana_KO , .name = "kana_KO" },
+{ .code = XKB_KEY_kana_SA , .name = "kana_SA" },
+{ .code = XKB_KEY_kana_SHI , .name = "kana_SHI" },
+{ .code = XKB_KEY_kana_SU , .name = "kana_SU" },
+{ .code = XKB_KEY_kana_SE , .name = "kana_SE" },
+{ .code = XKB_KEY_kana_SO , .name = "kana_SO" },
+{ .code = XKB_KEY_kana_TA , .name = "kana_TA" },
+{ .code = XKB_KEY_kana_CHI , .name = "kana_CHI" },
+{ .code = XKB_KEY_kana_TI , .name = "kana_TI" },
+{ .code = XKB_KEY_kana_TSU , .name = "kana_TSU" },
+{ .code = XKB_KEY_kana_TU , .name = "kana_TU" },
+{ .code = XKB_KEY_kana_TE , .name = "kana_TE" },
+{ .code = XKB_KEY_kana_TO , .name = "kana_TO" },
+{ .code = XKB_KEY_kana_NA , .name = "kana_NA" },
+{ .code = XKB_KEY_kana_NI , .name = "kana_NI" },
+{ .code = XKB_KEY_kana_NU , .name = "kana_NU" },
+{ .code = XKB_KEY_kana_NE , .name = "kana_NE" },
+{ .code = XKB_KEY_kana_NO , .name = "kana_NO" },
+{ .code = XKB_KEY_kana_HA , .name = "kana_HA" },
+{ .code = XKB_KEY_kana_HI , .name = "kana_HI" },
+{ .code = XKB_KEY_kana_FU , .name = "kana_FU" },
+{ .code = XKB_KEY_kana_HU , .name = "kana_HU" },
+{ .code = XKB_KEY_kana_HE , .name = "kana_HE" },
+{ .code = XKB_KEY_kana_HO , .name = "kana_HO" },
+{ .code = XKB_KEY_kana_MA , .name = "kana_MA" },
+{ .code = XKB_KEY_kana_MI , .name = "kana_MI" },
+{ .code = XKB_KEY_kana_MU , .name = "kana_MU" },
+{ .code = XKB_KEY_kana_ME , .name = "kana_ME" },
+{ .code = XKB_KEY_kana_MO , .name = "kana_MO" },
+{ .code = XKB_KEY_kana_YA , .name = "kana_YA" },
+{ .code = XKB_KEY_kana_YU , .name = "kana_YU" },
+{ .code = XKB_KEY_kana_YO , .name = "kana_YO" },
+{ .code = XKB_KEY_kana_RA , .name = "kana_RA" },
+{ .code = XKB_KEY_kana_RI , .name = "kana_RI" },
+{ .code = XKB_KEY_kana_RU , .name = "kana_RU" },
+{ .code = XKB_KEY_kana_RE , .name = "kana_RE" },
+{ .code = XKB_KEY_kana_RO , .name = "kana_RO" },
+{ .code = XKB_KEY_kana_WA , .name = "kana_WA" },
+{ .code = XKB_KEY_kana_N , .name = "kana_N" },
+{ .code = XKB_KEY_voicedsound , .name = "voicedsound" },
+{ .code = XKB_KEY_semivoicedsound , .name = "semivoicedsound" },
+{ .code = XKB_KEY_kana_switch , .name = "kana_switch" },
+{ .code = XKB_KEY_Farsi_0 , .name = "Farsi_0" },
+{ .code = XKB_KEY_Farsi_1 , .name = "Farsi_1" },
+{ .code = XKB_KEY_Farsi_2 , .name = "Farsi_2" },
+{ .code = XKB_KEY_Farsi_3 , .name = "Farsi_3" },
+{ .code = XKB_KEY_Farsi_4 , .name = "Farsi_4" },
+{ .code = XKB_KEY_Farsi_5 , .name = "Farsi_5" },
+{ .code = XKB_KEY_Farsi_6 , .name = "Farsi_6" },
+{ .code = XKB_KEY_Farsi_7 , .name = "Farsi_7" },
+{ .code = XKB_KEY_Farsi_8 , .name = "Farsi_8" },
+{ .code = XKB_KEY_Farsi_9 , .name = "Farsi_9" },
+{ .code = XKB_KEY_Arabic_percent , .name = "Arabic_percent" },
+{ .code = XKB_KEY_Arabic_superscript_alef, .name = "Arabic_superscript_alef" },
+{ .code = XKB_KEY_Arabic_tteh , .name = "Arabic_tteh" },
+{ .code = XKB_KEY_Arabic_peh , .name = "Arabic_peh" },
+{ .code = XKB_KEY_Arabic_tcheh , .name = "Arabic_tcheh" },
+{ .code = XKB_KEY_Arabic_ddal , .name = "Arabic_ddal" },
+{ .code = XKB_KEY_Arabic_rreh , .name = "Arabic_rreh" },
+{ .code = XKB_KEY_Arabic_comma , .name = "Arabic_comma" },
+{ .code = XKB_KEY_Arabic_fullstop , .name = "Arabic_fullstop" },
+{ .code = XKB_KEY_Arabic_0 , .name = "Arabic_0" },
+{ .code = XKB_KEY_Arabic_1 , .name = "Arabic_1" },
+{ .code = XKB_KEY_Arabic_2 , .name = "Arabic_2" },
+{ .code = XKB_KEY_Arabic_3 , .name = "Arabic_3" },
+{ .code = XKB_KEY_Arabic_4 , .name = "Arabic_4" },
+{ .code = XKB_KEY_Arabic_5 , .name = "Arabic_5" },
+{ .code = XKB_KEY_Arabic_6 , .name = "Arabic_6" },
+{ .code = XKB_KEY_Arabic_7 , .name = "Arabic_7" },
+{ .code = XKB_KEY_Arabic_8 , .name = "Arabic_8" },
+{ .code = XKB_KEY_Arabic_9 , .name = "Arabic_9" },
+{ .code = XKB_KEY_Arabic_semicolon, .name = "Arabic_semicolon" },
+{ .code = XKB_KEY_Arabic_question_mark, .name = "Arabic_question_mark" },
+{ .code = XKB_KEY_Arabic_hamza , .name = "Arabic_hamza" },
+{ .code = XKB_KEY_Arabic_maddaonalef, .name = "Arabic_maddaonalef" },
+{ .code = XKB_KEY_Arabic_hamzaonalef, .name = "Arabic_hamzaonalef" },
+{ .code = XKB_KEY_Arabic_hamzaonwaw, .name = "Arabic_hamzaonwaw" },
+{ .code = XKB_KEY_Arabic_hamzaunderalef, .name = "Arabic_hamzaunderalef" },
+{ .code = XKB_KEY_Arabic_hamzaonyeh, .name = "Arabic_hamzaonyeh" },
+{ .code = XKB_KEY_Arabic_alef , .name = "Arabic_alef" },
+{ .code = XKB_KEY_Arabic_beh , .name = "Arabic_beh" },
+{ .code = XKB_KEY_Arabic_tehmarbuta, .name = "Arabic_tehmarbuta" },
+{ .code = XKB_KEY_Arabic_teh , .name = "Arabic_teh" },
+{ .code = XKB_KEY_Arabic_theh , .name = "Arabic_theh" },
+{ .code = XKB_KEY_Arabic_jeem , .name = "Arabic_jeem" },
+{ .code = XKB_KEY_Arabic_hah , .name = "Arabic_hah" },
+{ .code = XKB_KEY_Arabic_khah , .name = "Arabic_khah" },
+{ .code = XKB_KEY_Arabic_dal , .name = "Arabic_dal" },
+{ .code = XKB_KEY_Arabic_thal , .name = "Arabic_thal" },
+{ .code = XKB_KEY_Arabic_ra , .name = "Arabic_ra" },
+{ .code = XKB_KEY_Arabic_zain , .name = "Arabic_zain" },
+{ .code = XKB_KEY_Arabic_seen , .name = "Arabic_seen" },
+{ .code = XKB_KEY_Arabic_sheen , .name = "Arabic_sheen" },
+{ .code = XKB_KEY_Arabic_sad , .name = "Arabic_sad" },
+{ .code = XKB_KEY_Arabic_dad , .name = "Arabic_dad" },
+{ .code = XKB_KEY_Arabic_tah , .name = "Arabic_tah" },
+{ .code = XKB_KEY_Arabic_zah , .name = "Arabic_zah" },
+{ .code = XKB_KEY_Arabic_ain , .name = "Arabic_ain" },
+{ .code = XKB_KEY_Arabic_ghain , .name = "Arabic_ghain" },
+{ .code = XKB_KEY_Arabic_tatweel , .name = "Arabic_tatweel" },
+{ .code = XKB_KEY_Arabic_feh , .name = "Arabic_feh" },
+{ .code = XKB_KEY_Arabic_qaf , .name = "Arabic_qaf" },
+{ .code = XKB_KEY_Arabic_kaf , .name = "Arabic_kaf" },
+{ .code = XKB_KEY_Arabic_lam , .name = "Arabic_lam" },
+{ .code = XKB_KEY_Arabic_meem , .name = "Arabic_meem" },
+{ .code = XKB_KEY_Arabic_noon , .name = "Arabic_noon" },
+{ .code = XKB_KEY_Arabic_ha , .name = "Arabic_ha" },
+{ .code = XKB_KEY_Arabic_heh , .name = "Arabic_heh" },
+{ .code = XKB_KEY_Arabic_waw , .name = "Arabic_waw" },
+{ .code = XKB_KEY_Arabic_alefmaksura, .name = "Arabic_alefmaksura" },
+{ .code = XKB_KEY_Arabic_yeh , .name = "Arabic_yeh" },
+{ .code = XKB_KEY_Arabic_fathatan , .name = "Arabic_fathatan" },
+{ .code = XKB_KEY_Arabic_dammatan , .name = "Arabic_dammatan" },
+{ .code = XKB_KEY_Arabic_kasratan , .name = "Arabic_kasratan" },
+{ .code = XKB_KEY_Arabic_fatha , .name = "Arabic_fatha" },
+{ .code = XKB_KEY_Arabic_damma , .name = "Arabic_damma" },
+{ .code = XKB_KEY_Arabic_kasra , .name = "Arabic_kasra" },
+{ .code = XKB_KEY_Arabic_shadda , .name = "Arabic_shadda" },
+{ .code = XKB_KEY_Arabic_sukun , .name = "Arabic_sukun" },
+{ .code = XKB_KEY_Arabic_madda_above, .name = "Arabic_madda_above" },
+{ .code = XKB_KEY_Arabic_hamza_above, .name = "Arabic_hamza_above" },
+{ .code = XKB_KEY_Arabic_hamza_below, .name = "Arabic_hamza_below" },
+{ .code = XKB_KEY_Arabic_jeh , .name = "Arabic_jeh" },
+{ .code = XKB_KEY_Arabic_veh , .name = "Arabic_veh" },
+{ .code = XKB_KEY_Arabic_keheh , .name = "Arabic_keheh" },
+{ .code = XKB_KEY_Arabic_gaf , .name = "Arabic_gaf" },
+{ .code = XKB_KEY_Arabic_noon_ghunna, .name = "Arabic_noon_ghunna" },
+{ .code = XKB_KEY_Arabic_heh_doachashmee, .name = "Arabic_heh_doachashmee" },
+{ .code = XKB_KEY_Farsi_yeh , .name = "Farsi_yeh" },
+{ .code = XKB_KEY_Arabic_farsi_yeh, .name = "Arabic_farsi_yeh" },
+{ .code = XKB_KEY_Arabic_yeh_baree, .name = "Arabic_yeh_baree" },
+{ .code = XKB_KEY_Arabic_heh_goal , .name = "Arabic_heh_goal" },
+{ .code = XKB_KEY_Arabic_switch , .name = "Arabic_switch" },
+{ .code = XKB_KEY_Cyrillic_GHE_bar, .name = "Cyrillic_GHE_bar" },
+{ .code = XKB_KEY_Cyrillic_ghe_bar, .name = "Cyrillic_ghe_bar" },
+{ .code = XKB_KEY_Cyrillic_ZHE_descender, .name = "Cyrillic_ZHE_descender" },
+{ .code = XKB_KEY_Cyrillic_zhe_descender, .name = "Cyrillic_zhe_descender" },
+{ .code = XKB_KEY_Cyrillic_KA_descender, .name = "Cyrillic_KA_descender" },
+{ .code = XKB_KEY_Cyrillic_ka_descender, .name = "Cyrillic_ka_descender" },
+{ .code = XKB_KEY_Cyrillic_KA_vertstroke, .name = "Cyrillic_KA_vertstroke" },
+{ .code = XKB_KEY_Cyrillic_ka_vertstroke, .name = "Cyrillic_ka_vertstroke" },
+{ .code = XKB_KEY_Cyrillic_EN_descender, .name = "Cyrillic_EN_descender" },
+{ .code = XKB_KEY_Cyrillic_en_descender, .name = "Cyrillic_en_descender" },
+{ .code = XKB_KEY_Cyrillic_U_straight, .name = "Cyrillic_U_straight" },
+{ .code = XKB_KEY_Cyrillic_u_straight, .name = "Cyrillic_u_straight" },
+{ .code = XKB_KEY_Cyrillic_U_straight_bar, .name = "Cyrillic_U_straight_bar" },
+{ .code = XKB_KEY_Cyrillic_u_straight_bar, .name = "Cyrillic_u_straight_bar" },
+{ .code = XKB_KEY_Cyrillic_HA_descender, .name = "Cyrillic_HA_descender" },
+{ .code = XKB_KEY_Cyrillic_ha_descender, .name = "Cyrillic_ha_descender" },
+{ .code = XKB_KEY_Cyrillic_CHE_descender, .name = "Cyrillic_CHE_descender" },
+{ .code = XKB_KEY_Cyrillic_che_descender, .name = "Cyrillic_che_descender" },
+{ .code = XKB_KEY_Cyrillic_CHE_vertstroke, .name = "Cyrillic_CHE_vertstroke" },
+{ .code = XKB_KEY_Cyrillic_che_vertstroke, .name = "Cyrillic_che_vertstroke" },
+{ .code = XKB_KEY_Cyrillic_SHHA , .name = "Cyrillic_SHHA" },
+{ .code = XKB_KEY_Cyrillic_shha , .name = "Cyrillic_shha" },
+{ .code = XKB_KEY_Cyrillic_SCHWA , .name = "Cyrillic_SCHWA" },
+{ .code = XKB_KEY_Cyrillic_schwa , .name = "Cyrillic_schwa" },
+{ .code = XKB_KEY_Cyrillic_I_macron, .name = "Cyrillic_I_macron" },
+{ .code = XKB_KEY_Cyrillic_i_macron, .name = "Cyrillic_i_macron" },
+{ .code = XKB_KEY_Cyrillic_O_bar , .name = "Cyrillic_O_bar" },
+{ .code = XKB_KEY_Cyrillic_o_bar , .name = "Cyrillic_o_bar" },
+{ .code = XKB_KEY_Cyrillic_U_macron, .name = "Cyrillic_U_macron" },
+{ .code = XKB_KEY_Cyrillic_u_macron, .name = "Cyrillic_u_macron" },
+{ .code = XKB_KEY_Serbian_dje , .name = "Serbian_dje" },
+{ .code = XKB_KEY_Macedonia_gje , .name = "Macedonia_gje" },
+{ .code = XKB_KEY_Cyrillic_io , .name = "Cyrillic_io" },
+{ .code = XKB_KEY_Ukrainian_ie , .name = "Ukrainian_ie" },
+{ .code = XKB_KEY_Ukranian_je , .name = "Ukranian_je" },
+{ .code = XKB_KEY_Macedonia_dse , .name = "Macedonia_dse" },
+{ .code = XKB_KEY_Ukrainian_i , .name = "Ukrainian_i" },
+{ .code = XKB_KEY_Ukranian_i , .name = "Ukranian_i" },
+{ .code = XKB_KEY_Ukrainian_yi , .name = "Ukrainian_yi" },
+{ .code = XKB_KEY_Ukranian_yi , .name = "Ukranian_yi" },
+{ .code = XKB_KEY_Cyrillic_je , .name = "Cyrillic_je" },
+{ .code = XKB_KEY_Serbian_je , .name = "Serbian_je" },
+{ .code = XKB_KEY_Cyrillic_lje , .name = "Cyrillic_lje" },
+{ .code = XKB_KEY_Serbian_lje , .name = "Serbian_lje" },
+{ .code = XKB_KEY_Cyrillic_nje , .name = "Cyrillic_nje" },
+{ .code = XKB_KEY_Serbian_nje , .name = "Serbian_nje" },
+{ .code = XKB_KEY_Serbian_tshe , .name = "Serbian_tshe" },
+{ .code = XKB_KEY_Macedonia_kje , .name = "Macedonia_kje" },
+{ .code = XKB_KEY_Ukrainian_ghe_with_upturn, .name = "Ukrainian_ghe_with_upturn" },
+{ .code = XKB_KEY_Byelorussian_shortu, .name = "Byelorussian_shortu" },
+{ .code = XKB_KEY_Cyrillic_dzhe , .name = "Cyrillic_dzhe" },
+{ .code = XKB_KEY_Serbian_dze , .name = "Serbian_dze" },
+{ .code = XKB_KEY_numerosign , .name = "numerosign" },
+{ .code = XKB_KEY_Serbian_DJE , .name = "Serbian_DJE" },
+{ .code = XKB_KEY_Macedonia_GJE , .name = "Macedonia_GJE" },
+{ .code = XKB_KEY_Cyrillic_IO , .name = "Cyrillic_IO" },
+{ .code = XKB_KEY_Ukrainian_IE , .name = "Ukrainian_IE" },
+{ .code = XKB_KEY_Ukranian_JE , .name = "Ukranian_JE" },
+{ .code = XKB_KEY_Macedonia_DSE , .name = "Macedonia_DSE" },
+{ .code = XKB_KEY_Ukrainian_I , .name = "Ukrainian_I" },
+{ .code = XKB_KEY_Ukranian_I , .name = "Ukranian_I" },
+{ .code = XKB_KEY_Ukrainian_YI , .name = "Ukrainian_YI" },
+{ .code = XKB_KEY_Ukranian_YI , .name = "Ukranian_YI" },
+{ .code = XKB_KEY_Cyrillic_JE , .name = "Cyrillic_JE" },
+{ .code = XKB_KEY_Serbian_JE , .name = "Serbian_JE" },
+{ .code = XKB_KEY_Cyrillic_LJE , .name = "Cyrillic_LJE" },
+{ .code = XKB_KEY_Serbian_LJE , .name = "Serbian_LJE" },
+{ .code = XKB_KEY_Cyrillic_NJE , .name = "Cyrillic_NJE" },
+{ .code = XKB_KEY_Serbian_NJE , .name = "Serbian_NJE" },
+{ .code = XKB_KEY_Serbian_TSHE , .name = "Serbian_TSHE" },
+{ .code = XKB_KEY_Macedonia_KJE , .name = "Macedonia_KJE" },
+{ .code = XKB_KEY_Ukrainian_GHE_WITH_UPTURN, .name = "Ukrainian_GHE_WITH_UPTURN" },
+{ .code = XKB_KEY_Byelorussian_SHORTU, .name = "Byelorussian_SHORTU" },
+{ .code = XKB_KEY_Cyrillic_DZHE , .name = "Cyrillic_DZHE" },
+{ .code = XKB_KEY_Serbian_DZE , .name = "Serbian_DZE" },
+{ .code = XKB_KEY_Cyrillic_yu , .name = "Cyrillic_yu" },
+{ .code = XKB_KEY_Cyrillic_a , .name = "Cyrillic_a" },
+{ .code = XKB_KEY_Cyrillic_be , .name = "Cyrillic_be" },
+{ .code = XKB_KEY_Cyrillic_tse , .name = "Cyrillic_tse" },
+{ .code = XKB_KEY_Cyrillic_de , .name = "Cyrillic_de" },
+{ .code = XKB_KEY_Cyrillic_ie , .name = "Cyrillic_ie" },
+{ .code = XKB_KEY_Cyrillic_ef , .name = "Cyrillic_ef" },
+{ .code = XKB_KEY_Cyrillic_ghe , .name = "Cyrillic_ghe" },
+{ .code = XKB_KEY_Cyrillic_ha , .name = "Cyrillic_ha" },
+{ .code = XKB_KEY_Cyrillic_i , .name = "Cyrillic_i" },
+{ .code = XKB_KEY_Cyrillic_shorti , .name = "Cyrillic_shorti" },
+{ .code = XKB_KEY_Cyrillic_ka , .name = "Cyrillic_ka" },
+{ .code = XKB_KEY_Cyrillic_el , .name = "Cyrillic_el" },
+{ .code = XKB_KEY_Cyrillic_em , .name = "Cyrillic_em" },
+{ .code = XKB_KEY_Cyrillic_en , .name = "Cyrillic_en" },
+{ .code = XKB_KEY_Cyrillic_o , .name = "Cyrillic_o" },
+{ .code = XKB_KEY_Cyrillic_pe , .name = "Cyrillic_pe" },
+{ .code = XKB_KEY_Cyrillic_ya , .name = "Cyrillic_ya" },
+{ .code = XKB_KEY_Cyrillic_er , .name = "Cyrillic_er" },
+{ .code = XKB_KEY_Cyrillic_es , .name = "Cyrillic_es" },
+{ .code = XKB_KEY_Cyrillic_te , .name = "Cyrillic_te" },
+{ .code = XKB_KEY_Cyrillic_u , .name = "Cyrillic_u" },
+{ .code = XKB_KEY_Cyrillic_zhe , .name = "Cyrillic_zhe" },
+{ .code = XKB_KEY_Cyrillic_ve , .name = "Cyrillic_ve" },
+{ .code = XKB_KEY_Cyrillic_softsign, .name = "Cyrillic_softsign" },
+{ .code = XKB_KEY_Cyrillic_yeru , .name = "Cyrillic_yeru" },
+{ .code = XKB_KEY_Cyrillic_ze , .name = "Cyrillic_ze" },
+{ .code = XKB_KEY_Cyrillic_sha , .name = "Cyrillic_sha" },
+{ .code = XKB_KEY_Cyrillic_e , .name = "Cyrillic_e" },
+{ .code = XKB_KEY_Cyrillic_shcha , .name = "Cyrillic_shcha" },
+{ .code = XKB_KEY_Cyrillic_che , .name = "Cyrillic_che" },
+{ .code = XKB_KEY_Cyrillic_hardsign, .name = "Cyrillic_hardsign" },
+{ .code = XKB_KEY_Cyrillic_YU , .name = "Cyrillic_YU" },
+{ .code = XKB_KEY_Cyrillic_A , .name = "Cyrillic_A" },
+{ .code = XKB_KEY_Cyrillic_BE , .name = "Cyrillic_BE" },
+{ .code = XKB_KEY_Cyrillic_TSE , .name = "Cyrillic_TSE" },
+{ .code = XKB_KEY_Cyrillic_DE , .name = "Cyrillic_DE" },
+{ .code = XKB_KEY_Cyrillic_IE , .name = "Cyrillic_IE" },
+{ .code = XKB_KEY_Cyrillic_EF , .name = "Cyrillic_EF" },
+{ .code = XKB_KEY_Cyrillic_GHE , .name = "Cyrillic_GHE" },
+{ .code = XKB_KEY_Cyrillic_HA , .name = "Cyrillic_HA" },
+{ .code = XKB_KEY_Cyrillic_I , .name = "Cyrillic_I" },
+{ .code = XKB_KEY_Cyrillic_SHORTI , .name = "Cyrillic_SHORTI" },
+{ .code = XKB_KEY_Cyrillic_KA , .name = "Cyrillic_KA" },
+{ .code = XKB_KEY_Cyrillic_EL , .name = "Cyrillic_EL" },
+{ .code = XKB_KEY_Cyrillic_EM , .name = "Cyrillic_EM" },
+{ .code = XKB_KEY_Cyrillic_EN , .name = "Cyrillic_EN" },
+{ .code = XKB_KEY_Cyrillic_O , .name = "Cyrillic_O" },
+{ .code = XKB_KEY_Cyrillic_PE , .name = "Cyrillic_PE" },
+{ .code = XKB_KEY_Cyrillic_YA , .name = "Cyrillic_YA" },
+{ .code = XKB_KEY_Cyrillic_ER , .name = "Cyrillic_ER" },
+{ .code = XKB_KEY_Cyrillic_ES , .name = "Cyrillic_ES" },
+{ .code = XKB_KEY_Cyrillic_TE , .name = "Cyrillic_TE" },
+{ .code = XKB_KEY_Cyrillic_U , .name = "Cyrillic_U" },
+{ .code = XKB_KEY_Cyrillic_ZHE , .name = "Cyrillic_ZHE" },
+{ .code = XKB_KEY_Cyrillic_VE , .name = "Cyrillic_VE" },
+{ .code = XKB_KEY_Cyrillic_SOFTSIGN, .name = "Cyrillic_SOFTSIGN" },
+{ .code = XKB_KEY_Cyrillic_YERU , .name = "Cyrillic_YERU" },
+{ .code = XKB_KEY_Cyrillic_ZE , .name = "Cyrillic_ZE" },
+{ .code = XKB_KEY_Cyrillic_SHA , .name = "Cyrillic_SHA" },
+{ .code = XKB_KEY_Cyrillic_E , .name = "Cyrillic_E" },
+{ .code = XKB_KEY_Cyrillic_SHCHA , .name = "Cyrillic_SHCHA" },
+{ .code = XKB_KEY_Cyrillic_CHE , .name = "Cyrillic_CHE" },
+{ .code = XKB_KEY_Cyrillic_HARDSIGN, .name = "Cyrillic_HARDSIGN" },
+{ .code = XKB_KEY_Greek_ALPHAaccent, .name = "Greek_ALPHAaccent" },
+{ .code = XKB_KEY_Greek_EPSILONaccent, .name = "Greek_EPSILONaccent" },
+{ .code = XKB_KEY_Greek_ETAaccent , .name = "Greek_ETAaccent" },
+{ .code = XKB_KEY_Greek_IOTAaccent, .name = "Greek_IOTAaccent" },
+{ .code = XKB_KEY_Greek_IOTAdieresis, .name = "Greek_IOTAdieresis" },
+{ .code = XKB_KEY_Greek_IOTAdiaeresis, .name = "Greek_IOTAdiaeresis" },
+{ .code = XKB_KEY_Greek_OMICRONaccent, .name = "Greek_OMICRONaccent" },
+{ .code = XKB_KEY_Greek_UPSILONaccent, .name = "Greek_UPSILONaccent" },
+{ .code = XKB_KEY_Greek_UPSILONdieresis, .name = "Greek_UPSILONdieresis" },
+{ .code = XKB_KEY_Greek_OMEGAaccent, .name = "Greek_OMEGAaccent" },
+{ .code = XKB_KEY_Greek_accentdieresis, .name = "Greek_accentdieresis" },
+{ .code = XKB_KEY_Greek_horizbar , .name = "Greek_horizbar" },
+{ .code = XKB_KEY_Greek_alphaaccent, .name = "Greek_alphaaccent" },
+{ .code = XKB_KEY_Greek_epsilonaccent, .name = "Greek_epsilonaccent" },
+{ .code = XKB_KEY_Greek_etaaccent , .name = "Greek_etaaccent" },
+{ .code = XKB_KEY_Greek_iotaaccent, .name = "Greek_iotaaccent" },
+{ .code = XKB_KEY_Greek_iotadieresis, .name = "Greek_iotadieresis" },
+{ .code = XKB_KEY_Greek_iotaaccentdieresis, .name = "Greek_iotaaccentdieresis" },
+{ .code = XKB_KEY_Greek_omicronaccent, .name = "Greek_omicronaccent" },
+{ .code = XKB_KEY_Greek_upsilonaccent, .name = "Greek_upsilonaccent" },
+{ .code = XKB_KEY_Greek_upsilondieresis, .name = "Greek_upsilondieresis" },
+{ .code = XKB_KEY_Greek_upsilonaccentdieresis, .name = "Greek_upsilonaccentdieresis" },
+{ .code = XKB_KEY_Greek_omegaaccent, .name = "Greek_omegaaccent" },
+{ .code = XKB_KEY_Greek_ALPHA , .name = "Greek_ALPHA" },
+{ .code = XKB_KEY_Greek_BETA , .name = "Greek_BETA" },
+{ .code = XKB_KEY_Greek_GAMMA , .name = "Greek_GAMMA" },
+{ .code = XKB_KEY_Greek_DELTA , .name = "Greek_DELTA" },
+{ .code = XKB_KEY_Greek_EPSILON , .name = "Greek_EPSILON" },
+{ .code = XKB_KEY_Greek_ZETA , .name = "Greek_ZETA" },
+{ .code = XKB_KEY_Greek_ETA , .name = "Greek_ETA" },
+{ .code = XKB_KEY_Greek_THETA , .name = "Greek_THETA" },
+{ .code = XKB_KEY_Greek_IOTA , .name = "Greek_IOTA" },
+{ .code = XKB_KEY_Greek_KAPPA , .name = "Greek_KAPPA" },
+{ .code = XKB_KEY_Greek_LAMDA , .name = "Greek_LAMDA" },
+{ .code = XKB_KEY_Greek_LAMBDA , .name = "Greek_LAMBDA" },
+{ .code = XKB_KEY_Greek_MU , .name = "Greek_MU" },
+{ .code = XKB_KEY_Greek_NU , .name = "Greek_NU" },
+{ .code = XKB_KEY_Greek_XI , .name = "Greek_XI" },
+{ .code = XKB_KEY_Greek_OMICRON , .name = "Greek_OMICRON" },
+{ .code = XKB_KEY_Greek_PI , .name = "Greek_PI" },
+{ .code = XKB_KEY_Greek_RHO , .name = "Greek_RHO" },
+{ .code = XKB_KEY_Greek_SIGMA , .name = "Greek_SIGMA" },
+{ .code = XKB_KEY_Greek_TAU , .name = "Greek_TAU" },
+{ .code = XKB_KEY_Greek_UPSILON , .name = "Greek_UPSILON" },
+{ .code = XKB_KEY_Greek_PHI , .name = "Greek_PHI" },
+{ .code = XKB_KEY_Greek_CHI , .name = "Greek_CHI" },
+{ .code = XKB_KEY_Greek_PSI , .name = "Greek_PSI" },
+{ .code = XKB_KEY_Greek_OMEGA , .name = "Greek_OMEGA" },
+{ .code = XKB_KEY_Greek_alpha , .name = "Greek_alpha" },
+{ .code = XKB_KEY_Greek_beta , .name = "Greek_beta" },
+{ .code = XKB_KEY_Greek_gamma , .name = "Greek_gamma" },
+{ .code = XKB_KEY_Greek_delta , .name = "Greek_delta" },
+{ .code = XKB_KEY_Greek_epsilon , .name = "Greek_epsilon" },
+{ .code = XKB_KEY_Greek_zeta , .name = "Greek_zeta" },
+{ .code = XKB_KEY_Greek_eta , .name = "Greek_eta" },
+{ .code = XKB_KEY_Greek_theta , .name = "Greek_theta" },
+{ .code = XKB_KEY_Greek_iota , .name = "Greek_iota" },
+{ .code = XKB_KEY_Greek_kappa , .name = "Greek_kappa" },
+{ .code = XKB_KEY_Greek_lamda , .name = "Greek_lamda" },
+{ .code = XKB_KEY_Greek_lambda , .name = "Greek_lambda" },
+{ .code = XKB_KEY_Greek_mu , .name = "Greek_mu" },
+{ .code = XKB_KEY_Greek_nu , .name = "Greek_nu" },
+{ .code = XKB_KEY_Greek_xi , .name = "Greek_xi" },
+{ .code = XKB_KEY_Greek_omicron , .name = "Greek_omicron" },
+{ .code = XKB_KEY_Greek_pi , .name = "Greek_pi" },
+{ .code = XKB_KEY_Greek_rho , .name = "Greek_rho" },
+{ .code = XKB_KEY_Greek_sigma , .name = "Greek_sigma" },
+{ .code = XKB_KEY_Greek_finalsmallsigma, .name = "Greek_finalsmallsigma" },
+{ .code = XKB_KEY_Greek_tau , .name = "Greek_tau" },
+{ .code = XKB_KEY_Greek_upsilon , .name = "Greek_upsilon" },
+{ .code = XKB_KEY_Greek_phi , .name = "Greek_phi" },
+{ .code = XKB_KEY_Greek_chi , .name = "Greek_chi" },
+{ .code = XKB_KEY_Greek_psi , .name = "Greek_psi" },
+{ .code = XKB_KEY_Greek_omega , .name = "Greek_omega" },
+{ .code = XKB_KEY_Greek_switch , .name = "Greek_switch" },
+{ .code = XKB_KEY_leftradical , .name = "leftradical" },
+{ .code = XKB_KEY_topleftradical , .name = "topleftradical" },
+{ .code = XKB_KEY_horizconnector , .name = "horizconnector" },
+{ .code = XKB_KEY_topintegral , .name = "topintegral" },
+{ .code = XKB_KEY_botintegral , .name = "botintegral" },
+{ .code = XKB_KEY_vertconnector , .name = "vertconnector" },
+{ .code = XKB_KEY_topleftsqbracket, .name = "topleftsqbracket" },
+{ .code = XKB_KEY_botleftsqbracket, .name = "botleftsqbracket" },
+{ .code = XKB_KEY_toprightsqbracket, .name = "toprightsqbracket" },
+{ .code = XKB_KEY_botrightsqbracket, .name = "botrightsqbracket" },
+{ .code = XKB_KEY_topleftparens , .name = "topleftparens" },
+{ .code = XKB_KEY_botleftparens , .name = "botleftparens" },
+{ .code = XKB_KEY_toprightparens , .name = "toprightparens" },
+{ .code = XKB_KEY_botrightparens , .name = "botrightparens" },
+{ .code = XKB_KEY_leftmiddlecurlybrace, .name = "leftmiddlecurlybrace" },
+{ .code = XKB_KEY_rightmiddlecurlybrace, .name = "rightmiddlecurlybrace" },
+{ .code = XKB_KEY_topleftsummation, .name = "topleftsummation" },
+{ .code = XKB_KEY_botleftsummation, .name = "botleftsummation" },
+{ .code = XKB_KEY_topvertsummationconnector, .name = "topvertsummationconnector" },
+{ .code = XKB_KEY_botvertsummationconnector, .name = "botvertsummationconnector" },
+{ .code = XKB_KEY_toprightsummation, .name = "toprightsummation" },
+{ .code = XKB_KEY_botrightsummation, .name = "botrightsummation" },
+{ .code = XKB_KEY_rightmiddlesummation, .name = "rightmiddlesummation" },
+{ .code = XKB_KEY_lessthanequal , .name = "lessthanequal" },
+{ .code = XKB_KEY_notequal , .name = "notequal" },
+{ .code = XKB_KEY_greaterthanequal, .name = "greaterthanequal" },
+{ .code = XKB_KEY_integral , .name = "integral" },
+{ .code = XKB_KEY_therefore , .name = "therefore" },
+{ .code = XKB_KEY_variation , .name = "variation" },
+{ .code = XKB_KEY_infinity , .name = "infinity" },
+{ .code = XKB_KEY_nabla , .name = "nabla" },
+{ .code = XKB_KEY_approximate , .name = "approximate" },
+{ .code = XKB_KEY_similarequal , .name = "similarequal" },
+{ .code = XKB_KEY_ifonlyif , .name = "ifonlyif" },
+{ .code = XKB_KEY_implies , .name = "implies" },
+{ .code = XKB_KEY_identical , .name = "identical" },
+{ .code = XKB_KEY_radical , .name = "radical" },
+{ .code = XKB_KEY_includedin , .name = "includedin" },
+{ .code = XKB_KEY_includes , .name = "includes" },
+{ .code = XKB_KEY_intersection , .name = "intersection" },
+{ .code = XKB_KEY_union , .name = "union" },
+{ .code = XKB_KEY_logicaland , .name = "logicaland" },
+{ .code = XKB_KEY_logicalor , .name = "logicalor" },
+{ .code = XKB_KEY_partialderivative, .name = "partialderivative" },
+{ .code = XKB_KEY_function , .name = "function" },
+{ .code = XKB_KEY_leftarrow , .name = "leftarrow" },
+{ .code = XKB_KEY_uparrow , .name = "uparrow" },
+{ .code = XKB_KEY_rightarrow , .name = "rightarrow" },
+{ .code = XKB_KEY_downarrow , .name = "downarrow" },
+{ .code = XKB_KEY_blank , .name = "blank" },
+{ .code = XKB_KEY_soliddiamond , .name = "soliddiamond" },
+{ .code = XKB_KEY_checkerboard , .name = "checkerboard" },
+{ .code = XKB_KEY_ht , .name = "ht" },
+{ .code = XKB_KEY_ff , .name = "ff" },
+{ .code = XKB_KEY_cr , .name = "cr" },
+{ .code = XKB_KEY_lf , .name = "lf" },
+{ .code = XKB_KEY_nl , .name = "nl" },
+{ .code = XKB_KEY_vt , .name = "vt" },
+{ .code = XKB_KEY_lowrightcorner , .name = "lowrightcorner" },
+{ .code = XKB_KEY_uprightcorner , .name = "uprightcorner" },
+{ .code = XKB_KEY_upleftcorner , .name = "upleftcorner" },
+{ .code = XKB_KEY_lowleftcorner , .name = "lowleftcorner" },
+{ .code = XKB_KEY_crossinglines , .name = "crossinglines" },
+{ .code = XKB_KEY_horizlinescan1 , .name = "horizlinescan1" },
+{ .code = XKB_KEY_horizlinescan3 , .name = "horizlinescan3" },
+{ .code = XKB_KEY_horizlinescan5 , .name = "horizlinescan5" },
+{ .code = XKB_KEY_horizlinescan7 , .name = "horizlinescan7" },
+{ .code = XKB_KEY_horizlinescan9 , .name = "horizlinescan9" },
+{ .code = XKB_KEY_leftt , .name = "leftt" },
+{ .code = XKB_KEY_rightt , .name = "rightt" },
+{ .code = XKB_KEY_bott , .name = "bott" },
+{ .code = XKB_KEY_topt , .name = "topt" },
+{ .code = XKB_KEY_vertbar , .name = "vertbar" },
+{ .code = XKB_KEY_emspace , .name = "emspace" },
+{ .code = XKB_KEY_enspace , .name = "enspace" },
+{ .code = XKB_KEY_em3space , .name = "em3space" },
+{ .code = XKB_KEY_em4space , .name = "em4space" },
+{ .code = XKB_KEY_digitspace , .name = "digitspace" },
+{ .code = XKB_KEY_punctspace , .name = "punctspace" },
+{ .code = XKB_KEY_thinspace , .name = "thinspace" },
+{ .code = XKB_KEY_hairspace , .name = "hairspace" },
+{ .code = XKB_KEY_emdash , .name = "emdash" },
+{ .code = XKB_KEY_endash , .name = "endash" },
+{ .code = XKB_KEY_signifblank , .name = "signifblank" },
+{ .code = XKB_KEY_ellipsis , .name = "ellipsis" },
+{ .code = XKB_KEY_doubbaselinedot , .name = "doubbaselinedot" },
+{ .code = XKB_KEY_onethird , .name = "onethird" },
+{ .code = XKB_KEY_twothirds , .name = "twothirds" },
+{ .code = XKB_KEY_onefifth , .name = "onefifth" },
+{ .code = XKB_KEY_twofifths , .name = "twofifths" },
+{ .code = XKB_KEY_threefifths , .name = "threefifths" },
+{ .code = XKB_KEY_fourfifths , .name = "fourfifths" },
+{ .code = XKB_KEY_onesixth , .name = "onesixth" },
+{ .code = XKB_KEY_fivesixths , .name = "fivesixths" },
+{ .code = XKB_KEY_careof , .name = "careof" },
+{ .code = XKB_KEY_figdash , .name = "figdash" },
+{ .code = XKB_KEY_leftanglebracket, .name = "leftanglebracket" },
+{ .code = XKB_KEY_decimalpoint , .name = "decimalpoint" },
+{ .code = XKB_KEY_rightanglebracket, .name = "rightanglebracket" },
+{ .code = XKB_KEY_marker , .name = "marker" },
+{ .code = XKB_KEY_oneeighth , .name = "oneeighth" },
+{ .code = XKB_KEY_threeeighths , .name = "threeeighths" },
+{ .code = XKB_KEY_fiveeighths , .name = "fiveeighths" },
+{ .code = XKB_KEY_seveneighths , .name = "seveneighths" },
+{ .code = XKB_KEY_trademark , .name = "trademark" },
+{ .code = XKB_KEY_signaturemark , .name = "signaturemark" },
+{ .code = XKB_KEY_trademarkincircle, .name = "trademarkincircle" },
+{ .code = XKB_KEY_leftopentriangle, .name = "leftopentriangle" },
+{ .code = XKB_KEY_rightopentriangle, .name = "rightopentriangle" },
+{ .code = XKB_KEY_emopencircle , .name = "emopencircle" },
+{ .code = XKB_KEY_emopenrectangle , .name = "emopenrectangle" },
+{ .code = XKB_KEY_leftsinglequotemark, .name = "leftsinglequotemark" },
+{ .code = XKB_KEY_rightsinglequotemark, .name = "rightsinglequotemark" },
+{ .code = XKB_KEY_leftdoublequotemark, .name = "leftdoublequotemark" },
+{ .code = XKB_KEY_rightdoublequotemark, .name = "rightdoublequotemark" },
+{ .code = XKB_KEY_prescription , .name = "prescription" },
+{ .code = XKB_KEY_permille , .name = "permille" },
+{ .code = XKB_KEY_minutes , .name = "minutes" },
+{ .code = XKB_KEY_seconds , .name = "seconds" },
+{ .code = XKB_KEY_latincross , .name = "latincross" },
+{ .code = XKB_KEY_hexagram , .name = "hexagram" },
+{ .code = XKB_KEY_filledrectbullet, .name = "filledrectbullet" },
+{ .code = XKB_KEY_filledlefttribullet, .name = "filledlefttribullet" },
+{ .code = XKB_KEY_filledrighttribullet, .name = "filledrighttribullet" },
+{ .code = XKB_KEY_emfilledcircle , .name = "emfilledcircle" },
+{ .code = XKB_KEY_emfilledrect , .name = "emfilledrect" },
+{ .code = XKB_KEY_enopencircbullet, .name = "enopencircbullet" },
+{ .code = XKB_KEY_enopensquarebullet, .name = "enopensquarebullet" },
+{ .code = XKB_KEY_openrectbullet , .name = "openrectbullet" },
+{ .code = XKB_KEY_opentribulletup , .name = "opentribulletup" },
+{ .code = XKB_KEY_opentribulletdown, .name = "opentribulletdown" },
+{ .code = XKB_KEY_openstar , .name = "openstar" },
+{ .code = XKB_KEY_enfilledcircbullet, .name = "enfilledcircbullet" },
+{ .code = XKB_KEY_enfilledsqbullet, .name = "enfilledsqbullet" },
+{ .code = XKB_KEY_filledtribulletup, .name = "filledtribulletup" },
+{ .code = XKB_KEY_filledtribulletdown, .name = "filledtribulletdown" },
+{ .code = XKB_KEY_leftpointer , .name = "leftpointer" },
+{ .code = XKB_KEY_rightpointer , .name = "rightpointer" },
+{ .code = XKB_KEY_club , .name = "club" },
+{ .code = XKB_KEY_diamond , .name = "diamond" },
+{ .code = XKB_KEY_heart , .name = "heart" },
+{ .code = XKB_KEY_maltesecross , .name = "maltesecross" },
+{ .code = XKB_KEY_dagger , .name = "dagger" },
+{ .code = XKB_KEY_doubledagger , .name = "doubledagger" },
+{ .code = XKB_KEY_checkmark , .name = "checkmark" },
+{ .code = XKB_KEY_ballotcross , .name = "ballotcross" },
+{ .code = XKB_KEY_musicalsharp , .name = "musicalsharp" },
+{ .code = XKB_KEY_musicalflat , .name = "musicalflat" },
+{ .code = XKB_KEY_malesymbol , .name = "malesymbol" },
+{ .code = XKB_KEY_femalesymbol , .name = "femalesymbol" },
+{ .code = XKB_KEY_telephone , .name = "telephone" },
+{ .code = XKB_KEY_telephonerecorder, .name = "telephonerecorder" },
+{ .code = XKB_KEY_phonographcopyright, .name = "phonographcopyright" },
+{ .code = XKB_KEY_caret , .name = "caret" },
+{ .code = XKB_KEY_singlelowquotemark, .name = "singlelowquotemark" },
+{ .code = XKB_KEY_doublelowquotemark, .name = "doublelowquotemark" },
+{ .code = XKB_KEY_cursor , .name = "cursor" },
+{ .code = XKB_KEY_leftcaret , .name = "leftcaret" },
+{ .code = XKB_KEY_rightcaret , .name = "rightcaret" },
+{ .code = XKB_KEY_downcaret , .name = "downcaret" },
+{ .code = XKB_KEY_upcaret , .name = "upcaret" },
+{ .code = XKB_KEY_overbar , .name = "overbar" },
+{ .code = XKB_KEY_downtack , .name = "downtack" },
+{ .code = XKB_KEY_upshoe , .name = "upshoe" },
+{ .code = XKB_KEY_downstile , .name = "downstile" },
+{ .code = XKB_KEY_underbar , .name = "underbar" },
+{ .code = XKB_KEY_jot , .name = "jot" },
+{ .code = XKB_KEY_quad , .name = "quad" },
+{ .code = XKB_KEY_uptack , .name = "uptack" },
+{ .code = XKB_KEY_circle , .name = "circle" },
+{ .code = XKB_KEY_upstile , .name = "upstile" },
+{ .code = XKB_KEY_downshoe , .name = "downshoe" },
+{ .code = XKB_KEY_rightshoe , .name = "rightshoe" },
+{ .code = XKB_KEY_leftshoe , .name = "leftshoe" },
+{ .code = XKB_KEY_lefttack , .name = "lefttack" },
+{ .code = XKB_KEY_righttack , .name = "righttack" },
+{ .code = XKB_KEY_hebrew_doublelowline, .name = "hebrew_doublelowline" },
+{ .code = XKB_KEY_hebrew_aleph , .name = "hebrew_aleph" },
+{ .code = XKB_KEY_hebrew_bet , .name = "hebrew_bet" },
+{ .code = XKB_KEY_hebrew_beth , .name = "hebrew_beth" },
+{ .code = XKB_KEY_hebrew_gimel , .name = "hebrew_gimel" },
+{ .code = XKB_KEY_hebrew_gimmel , .name = "hebrew_gimmel" },
+{ .code = XKB_KEY_hebrew_dalet , .name = "hebrew_dalet" },
+{ .code = XKB_KEY_hebrew_daleth , .name = "hebrew_daleth" },
+{ .code = XKB_KEY_hebrew_he , .name = "hebrew_he" },
+{ .code = XKB_KEY_hebrew_waw , .name = "hebrew_waw" },
+{ .code = XKB_KEY_hebrew_zain , .name = "hebrew_zain" },
+{ .code = XKB_KEY_hebrew_zayin , .name = "hebrew_zayin" },
+{ .code = XKB_KEY_hebrew_chet , .name = "hebrew_chet" },
+{ .code = XKB_KEY_hebrew_het , .name = "hebrew_het" },
+{ .code = XKB_KEY_hebrew_tet , .name = "hebrew_tet" },
+{ .code = XKB_KEY_hebrew_teth , .name = "hebrew_teth" },
+{ .code = XKB_KEY_hebrew_yod , .name = "hebrew_yod" },
+{ .code = XKB_KEY_hebrew_finalkaph, .name = "hebrew_finalkaph" },
+{ .code = XKB_KEY_hebrew_kaph , .name = "hebrew_kaph" },
+{ .code = XKB_KEY_hebrew_lamed , .name = "hebrew_lamed" },
+{ .code = XKB_KEY_hebrew_finalmem , .name = "hebrew_finalmem" },
+{ .code = XKB_KEY_hebrew_mem , .name = "hebrew_mem" },
+{ .code = XKB_KEY_hebrew_finalnun , .name = "hebrew_finalnun" },
+{ .code = XKB_KEY_hebrew_nun , .name = "hebrew_nun" },
+{ .code = XKB_KEY_hebrew_samech , .name = "hebrew_samech" },
+{ .code = XKB_KEY_hebrew_samekh , .name = "hebrew_samekh" },
+{ .code = XKB_KEY_hebrew_ayin , .name = "hebrew_ayin" },
+{ .code = XKB_KEY_hebrew_finalpe , .name = "hebrew_finalpe" },
+{ .code = XKB_KEY_hebrew_pe , .name = "hebrew_pe" },
+{ .code = XKB_KEY_hebrew_finalzade, .name = "hebrew_finalzade" },
+{ .code = XKB_KEY_hebrew_finalzadi, .name = "hebrew_finalzadi" },
+{ .code = XKB_KEY_hebrew_zade , .name = "hebrew_zade" },
+{ .code = XKB_KEY_hebrew_zadi , .name = "hebrew_zadi" },
+{ .code = XKB_KEY_hebrew_qoph , .name = "hebrew_qoph" },
+{ .code = XKB_KEY_hebrew_kuf , .name = "hebrew_kuf" },
+{ .code = XKB_KEY_hebrew_resh , .name = "hebrew_resh" },
+{ .code = XKB_KEY_hebrew_shin , .name = "hebrew_shin" },
+{ .code = XKB_KEY_hebrew_taw , .name = "hebrew_taw" },
+{ .code = XKB_KEY_hebrew_taf , .name = "hebrew_taf" },
+{ .code = XKB_KEY_Hebrew_switch , .name = "Hebrew_switch" },
+{ .code = XKB_KEY_Thai_kokai , .name = "Thai_kokai" },
+{ .code = XKB_KEY_Thai_khokhai , .name = "Thai_khokhai" },
+{ .code = XKB_KEY_Thai_khokhuat , .name = "Thai_khokhuat" },
+{ .code = XKB_KEY_Thai_khokhwai , .name = "Thai_khokhwai" },
+{ .code = XKB_KEY_Thai_khokhon , .name = "Thai_khokhon" },
+{ .code = XKB_KEY_Thai_khorakhang , .name = "Thai_khorakhang" },
+{ .code = XKB_KEY_Thai_ngongu , .name = "Thai_ngongu" },
+{ .code = XKB_KEY_Thai_chochan , .name = "Thai_chochan" },
+{ .code = XKB_KEY_Thai_choching , .name = "Thai_choching" },
+{ .code = XKB_KEY_Thai_chochang , .name = "Thai_chochang" },
+{ .code = XKB_KEY_Thai_soso , .name = "Thai_soso" },
+{ .code = XKB_KEY_Thai_chochoe , .name = "Thai_chochoe" },
+{ .code = XKB_KEY_Thai_yoying , .name = "Thai_yoying" },
+{ .code = XKB_KEY_Thai_dochada , .name = "Thai_dochada" },
+{ .code = XKB_KEY_Thai_topatak , .name = "Thai_topatak" },
+{ .code = XKB_KEY_Thai_thothan , .name = "Thai_thothan" },
+{ .code = XKB_KEY_Thai_thonangmontho, .name = "Thai_thonangmontho" },
+{ .code = XKB_KEY_Thai_thophuthao , .name = "Thai_thophuthao" },
+{ .code = XKB_KEY_Thai_nonen , .name = "Thai_nonen" },
+{ .code = XKB_KEY_Thai_dodek , .name = "Thai_dodek" },
+{ .code = XKB_KEY_Thai_totao , .name = "Thai_totao" },
+{ .code = XKB_KEY_Thai_thothung , .name = "Thai_thothung" },
+{ .code = XKB_KEY_Thai_thothahan , .name = "Thai_thothahan" },
+{ .code = XKB_KEY_Thai_thothong , .name = "Thai_thothong" },
+{ .code = XKB_KEY_Thai_nonu , .name = "Thai_nonu" },
+{ .code = XKB_KEY_Thai_bobaimai , .name = "Thai_bobaimai" },
+{ .code = XKB_KEY_Thai_popla , .name = "Thai_popla" },
+{ .code = XKB_KEY_Thai_phophung , .name = "Thai_phophung" },
+{ .code = XKB_KEY_Thai_fofa , .name = "Thai_fofa" },
+{ .code = XKB_KEY_Thai_phophan , .name = "Thai_phophan" },
+{ .code = XKB_KEY_Thai_fofan , .name = "Thai_fofan" },
+{ .code = XKB_KEY_Thai_phosamphao , .name = "Thai_phosamphao" },
+{ .code = XKB_KEY_Thai_moma , .name = "Thai_moma" },
+{ .code = XKB_KEY_Thai_yoyak , .name = "Thai_yoyak" },
+{ .code = XKB_KEY_Thai_rorua , .name = "Thai_rorua" },
+{ .code = XKB_KEY_Thai_ru , .name = "Thai_ru" },
+{ .code = XKB_KEY_Thai_loling , .name = "Thai_loling" },
+{ .code = XKB_KEY_Thai_lu , .name = "Thai_lu" },
+{ .code = XKB_KEY_Thai_wowaen , .name = "Thai_wowaen" },
+{ .code = XKB_KEY_Thai_sosala , .name = "Thai_sosala" },
+{ .code = XKB_KEY_Thai_sorusi , .name = "Thai_sorusi" },
+{ .code = XKB_KEY_Thai_sosua , .name = "Thai_sosua" },
+{ .code = XKB_KEY_Thai_hohip , .name = "Thai_hohip" },
+{ .code = XKB_KEY_Thai_lochula , .name = "Thai_lochula" },
+{ .code = XKB_KEY_Thai_oang , .name = "Thai_oang" },
+{ .code = XKB_KEY_Thai_honokhuk , .name = "Thai_honokhuk" },
+{ .code = XKB_KEY_Thai_paiyannoi , .name = "Thai_paiyannoi" },
+{ .code = XKB_KEY_Thai_saraa , .name = "Thai_saraa" },
+{ .code = XKB_KEY_Thai_maihanakat , .name = "Thai_maihanakat" },
+{ .code = XKB_KEY_Thai_saraaa , .name = "Thai_saraaa" },
+{ .code = XKB_KEY_Thai_saraam , .name = "Thai_saraam" },
+{ .code = XKB_KEY_Thai_sarai , .name = "Thai_sarai" },
+{ .code = XKB_KEY_Thai_saraii , .name = "Thai_saraii" },
+{ .code = XKB_KEY_Thai_saraue , .name = "Thai_saraue" },
+{ .code = XKB_KEY_Thai_sarauee , .name = "Thai_sarauee" },
+{ .code = XKB_KEY_Thai_sarau , .name = "Thai_sarau" },
+{ .code = XKB_KEY_Thai_sarauu , .name = "Thai_sarauu" },
+{ .code = XKB_KEY_Thai_phinthu , .name = "Thai_phinthu" },
+{ .code = XKB_KEY_Thai_maihanakat_maitho, .name = "Thai_maihanakat_maitho" },
+{ .code = XKB_KEY_Thai_baht , .name = "Thai_baht" },
+{ .code = XKB_KEY_Thai_sarae , .name = "Thai_sarae" },
+{ .code = XKB_KEY_Thai_saraae , .name = "Thai_saraae" },
+{ .code = XKB_KEY_Thai_sarao , .name = "Thai_sarao" },
+{ .code = XKB_KEY_Thai_saraaimaimuan, .name = "Thai_saraaimaimuan" },
+{ .code = XKB_KEY_Thai_saraaimaimalai, .name = "Thai_saraaimaimalai" },
+{ .code = XKB_KEY_Thai_lakkhangyao, .name = "Thai_lakkhangyao" },
+{ .code = XKB_KEY_Thai_maiyamok , .name = "Thai_maiyamok" },
+{ .code = XKB_KEY_Thai_maitaikhu , .name = "Thai_maitaikhu" },
+{ .code = XKB_KEY_Thai_maiek , .name = "Thai_maiek" },
+{ .code = XKB_KEY_Thai_maitho , .name = "Thai_maitho" },
+{ .code = XKB_KEY_Thai_maitri , .name = "Thai_maitri" },
+{ .code = XKB_KEY_Thai_maichattawa, .name = "Thai_maichattawa" },
+{ .code = XKB_KEY_Thai_thanthakhat, .name = "Thai_thanthakhat" },
+{ .code = XKB_KEY_Thai_nikhahit , .name = "Thai_nikhahit" },
+{ .code = XKB_KEY_Thai_leksun , .name = "Thai_leksun" },
+{ .code = XKB_KEY_Thai_leknung , .name = "Thai_leknung" },
+{ .code = XKB_KEY_Thai_leksong , .name = "Thai_leksong" },
+{ .code = XKB_KEY_Thai_leksam , .name = "Thai_leksam" },
+{ .code = XKB_KEY_Thai_leksi , .name = "Thai_leksi" },
+{ .code = XKB_KEY_Thai_lekha , .name = "Thai_lekha" },
+{ .code = XKB_KEY_Thai_lekhok , .name = "Thai_lekhok" },
+{ .code = XKB_KEY_Thai_lekchet , .name = "Thai_lekchet" },
+{ .code = XKB_KEY_Thai_lekpaet , .name = "Thai_lekpaet" },
+{ .code = XKB_KEY_Thai_lekkao , .name = "Thai_lekkao" },
+{ .code = XKB_KEY_Hangul , .name = "Hangul" },
+{ .code = XKB_KEY_Hangul_Start , .name = "Hangul_Start" },
+{ .code = XKB_KEY_Hangul_End , .name = "Hangul_End" },
+{ .code = XKB_KEY_Hangul_Hanja , .name = "Hangul_Hanja" },
+{ .code = XKB_KEY_Hangul_Jamo , .name = "Hangul_Jamo" },
+{ .code = XKB_KEY_Hangul_Romaja , .name = "Hangul_Romaja" },
+{ .code = XKB_KEY_Hangul_Codeinput, .name = "Hangul_Codeinput" },
+{ .code = XKB_KEY_Hangul_Jeonja , .name = "Hangul_Jeonja" },
+{ .code = XKB_KEY_Hangul_Banja , .name = "Hangul_Banja" },
+{ .code = XKB_KEY_Hangul_PreHanja , .name = "Hangul_PreHanja" },
+{ .code = XKB_KEY_Hangul_PostHanja, .name = "Hangul_PostHanja" },
+{ .code = XKB_KEY_Hangul_SingleCandidate, .name = "Hangul_SingleCandidate" },
+{ .code = XKB_KEY_Hangul_MultipleCandidate, .name = "Hangul_MultipleCandidate" },
+{ .code = XKB_KEY_Hangul_PreviousCandidate, .name = "Hangul_PreviousCandidate" },
+{ .code = XKB_KEY_Hangul_Special , .name = "Hangul_Special" },
+{ .code = XKB_KEY_Hangul_switch , .name = "Hangul_switch" },
+{ .code = XKB_KEY_Hangul_Kiyeog , .name = "Hangul_Kiyeog" },
+{ .code = XKB_KEY_Hangul_SsangKiyeog, .name = "Hangul_SsangKiyeog" },
+{ .code = XKB_KEY_Hangul_KiyeogSios, .name = "Hangul_KiyeogSios" },
+{ .code = XKB_KEY_Hangul_Nieun , .name = "Hangul_Nieun" },
+{ .code = XKB_KEY_Hangul_NieunJieuj, .name = "Hangul_NieunJieuj" },
+{ .code = XKB_KEY_Hangul_NieunHieuh, .name = "Hangul_NieunHieuh" },
+{ .code = XKB_KEY_Hangul_Dikeud , .name = "Hangul_Dikeud" },
+{ .code = XKB_KEY_Hangul_SsangDikeud, .name = "Hangul_SsangDikeud" },
+{ .code = XKB_KEY_Hangul_Rieul , .name = "Hangul_Rieul" },
+{ .code = XKB_KEY_Hangul_RieulKiyeog, .name = "Hangul_RieulKiyeog" },
+{ .code = XKB_KEY_Hangul_RieulMieum, .name = "Hangul_RieulMieum" },
+{ .code = XKB_KEY_Hangul_RieulPieub, .name = "Hangul_RieulPieub" },
+{ .code = XKB_KEY_Hangul_RieulSios, .name = "Hangul_RieulSios" },
+{ .code = XKB_KEY_Hangul_RieulTieut, .name = "Hangul_RieulTieut" },
+{ .code = XKB_KEY_Hangul_RieulPhieuf, .name = "Hangul_RieulPhieuf" },
+{ .code = XKB_KEY_Hangul_RieulHieuh, .name = "Hangul_RieulHieuh" },
+{ .code = XKB_KEY_Hangul_Mieum , .name = "Hangul_Mieum" },
+{ .code = XKB_KEY_Hangul_Pieub , .name = "Hangul_Pieub" },
+{ .code = XKB_KEY_Hangul_SsangPieub, .name = "Hangul_SsangPieub" },
+{ .code = XKB_KEY_Hangul_PieubSios, .name = "Hangul_PieubSios" },
+{ .code = XKB_KEY_Hangul_Sios , .name = "Hangul_Sios" },
+{ .code = XKB_KEY_Hangul_SsangSios, .name = "Hangul_SsangSios" },
+{ .code = XKB_KEY_Hangul_Ieung , .name = "Hangul_Ieung" },
+{ .code = XKB_KEY_Hangul_Jieuj , .name = "Hangul_Jieuj" },
+{ .code = XKB_KEY_Hangul_SsangJieuj, .name = "Hangul_SsangJieuj" },
+{ .code = XKB_KEY_Hangul_Cieuc , .name = "Hangul_Cieuc" },
+{ .code = XKB_KEY_Hangul_Khieuq , .name = "Hangul_Khieuq" },
+{ .code = XKB_KEY_Hangul_Tieut , .name = "Hangul_Tieut" },
+{ .code = XKB_KEY_Hangul_Phieuf , .name = "Hangul_Phieuf" },
+{ .code = XKB_KEY_Hangul_Hieuh , .name = "Hangul_Hieuh" },
+{ .code = XKB_KEY_Hangul_A , .name = "Hangul_A" },
+{ .code = XKB_KEY_Hangul_AE , .name = "Hangul_AE" },
+{ .code = XKB_KEY_Hangul_YA , .name = "Hangul_YA" },
+{ .code = XKB_KEY_Hangul_YAE , .name = "Hangul_YAE" },
+{ .code = XKB_KEY_Hangul_EO , .name = "Hangul_EO" },
+{ .code = XKB_KEY_Hangul_E , .name = "Hangul_E" },
+{ .code = XKB_KEY_Hangul_YEO , .name = "Hangul_YEO" },
+{ .code = XKB_KEY_Hangul_YE , .name = "Hangul_YE" },
+{ .code = XKB_KEY_Hangul_O , .name = "Hangul_O" },
+{ .code = XKB_KEY_Hangul_WA , .name = "Hangul_WA" },
+{ .code = XKB_KEY_Hangul_WAE , .name = "Hangul_WAE" },
+{ .code = XKB_KEY_Hangul_OE , .name = "Hangul_OE" },
+{ .code = XKB_KEY_Hangul_YO , .name = "Hangul_YO" },
+{ .code = XKB_KEY_Hangul_U , .name = "Hangul_U" },
+{ .code = XKB_KEY_Hangul_WEO , .name = "Hangul_WEO" },
+{ .code = XKB_KEY_Hangul_WE , .name = "Hangul_WE" },
+{ .code = XKB_KEY_Hangul_WI , .name = "Hangul_WI" },
+{ .code = XKB_KEY_Hangul_YU , .name = "Hangul_YU" },
+{ .code = XKB_KEY_Hangul_EU , .name = "Hangul_EU" },
+{ .code = XKB_KEY_Hangul_YI , .name = "Hangul_YI" },
+{ .code = XKB_KEY_Hangul_I , .name = "Hangul_I" },
+{ .code = XKB_KEY_Hangul_J_Kiyeog , .name = "Hangul_J_Kiyeog" },
+{ .code = XKB_KEY_Hangul_J_SsangKiyeog, .name = "Hangul_J_SsangKiyeog" },
+{ .code = XKB_KEY_Hangul_J_KiyeogSios, .name = "Hangul_J_KiyeogSios" },
+{ .code = XKB_KEY_Hangul_J_Nieun , .name = "Hangul_J_Nieun" },
+{ .code = XKB_KEY_Hangul_J_NieunJieuj, .name = "Hangul_J_NieunJieuj" },
+{ .code = XKB_KEY_Hangul_J_NieunHieuh, .name = "Hangul_J_NieunHieuh" },
+{ .code = XKB_KEY_Hangul_J_Dikeud , .name = "Hangul_J_Dikeud" },
+{ .code = XKB_KEY_Hangul_J_Rieul , .name = "Hangul_J_Rieul" },
+{ .code = XKB_KEY_Hangul_J_RieulKiyeog, .name = "Hangul_J_RieulKiyeog" },
+{ .code = XKB_KEY_Hangul_J_RieulMieum, .name = "Hangul_J_RieulMieum" },
+{ .code = XKB_KEY_Hangul_J_RieulPieub, .name = "Hangul_J_RieulPieub" },
+{ .code = XKB_KEY_Hangul_J_RieulSios, .name = "Hangul_J_RieulSios" },
+{ .code = XKB_KEY_Hangul_J_RieulTieut, .name = "Hangul_J_RieulTieut" },
+{ .code = XKB_KEY_Hangul_J_RieulPhieuf, .name = "Hangul_J_RieulPhieuf" },
+{ .code = XKB_KEY_Hangul_J_RieulHieuh, .name = "Hangul_J_RieulHieuh" },
+{ .code = XKB_KEY_Hangul_J_Mieum , .name = "Hangul_J_Mieum" },
+{ .code = XKB_KEY_Hangul_J_Pieub , .name = "Hangul_J_Pieub" },
+{ .code = XKB_KEY_Hangul_J_PieubSios, .name = "Hangul_J_PieubSios" },
+{ .code = XKB_KEY_Hangul_J_Sios , .name = "Hangul_J_Sios" },
+{ .code = XKB_KEY_Hangul_J_SsangSios, .name = "Hangul_J_SsangSios" },
+{ .code = XKB_KEY_Hangul_J_Ieung , .name = "Hangul_J_Ieung" },
+{ .code = XKB_KEY_Hangul_J_Jieuj , .name = "Hangul_J_Jieuj" },
+{ .code = XKB_KEY_Hangul_J_Cieuc , .name = "Hangul_J_Cieuc" },
+{ .code = XKB_KEY_Hangul_J_Khieuq , .name = "Hangul_J_Khieuq" },
+{ .code = XKB_KEY_Hangul_J_Tieut , .name = "Hangul_J_Tieut" },
+{ .code = XKB_KEY_Hangul_J_Phieuf , .name = "Hangul_J_Phieuf" },
+{ .code = XKB_KEY_Hangul_J_Hieuh , .name = "Hangul_J_Hieuh" },
+{ .code = XKB_KEY_Hangul_RieulYeorinHieuh, .name = "Hangul_RieulYeorinHieuh" },
+{ .code = XKB_KEY_Hangul_SunkyeongeumMieum, .name = "Hangul_SunkyeongeumMieum" },
+{ .code = XKB_KEY_Hangul_SunkyeongeumPieub, .name = "Hangul_SunkyeongeumPieub" },
+{ .code = XKB_KEY_Hangul_PanSios , .name = "Hangul_PanSios" },
+{ .code = XKB_KEY_Hangul_KkogjiDalrinIeung, .name = "Hangul_KkogjiDalrinIeung" },
+{ .code = XKB_KEY_Hangul_SunkyeongeumPhieuf, .name = "Hangul_SunkyeongeumPhieuf" },
+{ .code = XKB_KEY_Hangul_YeorinHieuh, .name = "Hangul_YeorinHieuh" },
+{ .code = XKB_KEY_Hangul_AraeA , .name = "Hangul_AraeA" },
+{ .code = XKB_KEY_Hangul_AraeAE , .name = "Hangul_AraeAE" },
+{ .code = XKB_KEY_Hangul_J_PanSios, .name = "Hangul_J_PanSios" },
+{ .code = XKB_KEY_Hangul_J_KkogjiDalrinIeung, .name = "Hangul_J_KkogjiDalrinIeung" },
+{ .code = XKB_KEY_Hangul_J_YeorinHieuh, .name = "Hangul_J_YeorinHieuh" },
+{ .code = XKB_KEY_Korean_Won , .name = "Korean_Won" },
+{ .code = XKB_KEY_Armenian_ligature_ew, .name = "Armenian_ligature_ew" },
+{ .code = XKB_KEY_Armenian_full_stop, .name = "Armenian_full_stop" },
+{ .code = XKB_KEY_Armenian_verjaket, .name = "Armenian_verjaket" },
+{ .code = XKB_KEY_Armenian_separation_mark, .name = "Armenian_separation_mark" },
+{ .code = XKB_KEY_Armenian_but , .name = "Armenian_but" },
+{ .code = XKB_KEY_Armenian_hyphen , .name = "Armenian_hyphen" },
+{ .code = XKB_KEY_Armenian_yentamna, .name = "Armenian_yentamna" },
+{ .code = XKB_KEY_Armenian_exclam , .name = "Armenian_exclam" },
+{ .code = XKB_KEY_Armenian_amanak , .name = "Armenian_amanak" },
+{ .code = XKB_KEY_Armenian_accent , .name = "Armenian_accent" },
+{ .code = XKB_KEY_Armenian_shesht , .name = "Armenian_shesht" },
+{ .code = XKB_KEY_Armenian_question, .name = "Armenian_question" },
+{ .code = XKB_KEY_Armenian_paruyk , .name = "Armenian_paruyk" },
+{ .code = XKB_KEY_Armenian_AYB , .name = "Armenian_AYB" },
+{ .code = XKB_KEY_Armenian_ayb , .name = "Armenian_ayb" },
+{ .code = XKB_KEY_Armenian_BEN , .name = "Armenian_BEN" },
+{ .code = XKB_KEY_Armenian_ben , .name = "Armenian_ben" },
+{ .code = XKB_KEY_Armenian_GIM , .name = "Armenian_GIM" },
+{ .code = XKB_KEY_Armenian_gim , .name = "Armenian_gim" },
+{ .code = XKB_KEY_Armenian_DA , .name = "Armenian_DA" },
+{ .code = XKB_KEY_Armenian_da , .name = "Armenian_da" },
+{ .code = XKB_KEY_Armenian_YECH , .name = "Armenian_YECH" },
+{ .code = XKB_KEY_Armenian_yech , .name = "Armenian_yech" },
+{ .code = XKB_KEY_Armenian_ZA , .name = "Armenian_ZA" },
+{ .code = XKB_KEY_Armenian_za , .name = "Armenian_za" },
+{ .code = XKB_KEY_Armenian_E , .name = "Armenian_E" },
+{ .code = XKB_KEY_Armenian_e , .name = "Armenian_e" },
+{ .code = XKB_KEY_Armenian_AT , .name = "Armenian_AT" },
+{ .code = XKB_KEY_Armenian_at , .name = "Armenian_at" },
+{ .code = XKB_KEY_Armenian_TO , .name = "Armenian_TO" },
+{ .code = XKB_KEY_Armenian_to , .name = "Armenian_to" },
+{ .code = XKB_KEY_Armenian_ZHE , .name = "Armenian_ZHE" },
+{ .code = XKB_KEY_Armenian_zhe , .name = "Armenian_zhe" },
+{ .code = XKB_KEY_Armenian_INI , .name = "Armenian_INI" },
+{ .code = XKB_KEY_Armenian_ini , .name = "Armenian_ini" },
+{ .code = XKB_KEY_Armenian_LYUN , .name = "Armenian_LYUN" },
+{ .code = XKB_KEY_Armenian_lyun , .name = "Armenian_lyun" },
+{ .code = XKB_KEY_Armenian_KHE , .name = "Armenian_KHE" },
+{ .code = XKB_KEY_Armenian_khe , .name = "Armenian_khe" },
+{ .code = XKB_KEY_Armenian_TSA , .name = "Armenian_TSA" },
+{ .code = XKB_KEY_Armenian_tsa , .name = "Armenian_tsa" },
+{ .code = XKB_KEY_Armenian_KEN , .name = "Armenian_KEN" },
+{ .code = XKB_KEY_Armenian_ken , .name = "Armenian_ken" },
+{ .code = XKB_KEY_Armenian_HO , .name = "Armenian_HO" },
+{ .code = XKB_KEY_Armenian_ho , .name = "Armenian_ho" },
+{ .code = XKB_KEY_Armenian_DZA , .name = "Armenian_DZA" },
+{ .code = XKB_KEY_Armenian_dza , .name = "Armenian_dza" },
+{ .code = XKB_KEY_Armenian_GHAT , .name = "Armenian_GHAT" },
+{ .code = XKB_KEY_Armenian_ghat , .name = "Armenian_ghat" },
+{ .code = XKB_KEY_Armenian_TCHE , .name = "Armenian_TCHE" },
+{ .code = XKB_KEY_Armenian_tche , .name = "Armenian_tche" },
+{ .code = XKB_KEY_Armenian_MEN , .name = "Armenian_MEN" },
+{ .code = XKB_KEY_Armenian_men , .name = "Armenian_men" },
+{ .code = XKB_KEY_Armenian_HI , .name = "Armenian_HI" },
+{ .code = XKB_KEY_Armenian_hi , .name = "Armenian_hi" },
+{ .code = XKB_KEY_Armenian_NU , .name = "Armenian_NU" },
+{ .code = XKB_KEY_Armenian_nu , .name = "Armenian_nu" },
+{ .code = XKB_KEY_Armenian_SHA , .name = "Armenian_SHA" },
+{ .code = XKB_KEY_Armenian_sha , .name = "Armenian_sha" },
+{ .code = XKB_KEY_Armenian_VO , .name = "Armenian_VO" },
+{ .code = XKB_KEY_Armenian_vo , .name = "Armenian_vo" },
+{ .code = XKB_KEY_Armenian_CHA , .name = "Armenian_CHA" },
+{ .code = XKB_KEY_Armenian_cha , .name = "Armenian_cha" },
+{ .code = XKB_KEY_Armenian_PE , .name = "Armenian_PE" },
+{ .code = XKB_KEY_Armenian_pe , .name = "Armenian_pe" },
+{ .code = XKB_KEY_Armenian_JE , .name = "Armenian_JE" },
+{ .code = XKB_KEY_Armenian_je , .name = "Armenian_je" },
+{ .code = XKB_KEY_Armenian_RA , .name = "Armenian_RA" },
+{ .code = XKB_KEY_Armenian_ra , .name = "Armenian_ra" },
+{ .code = XKB_KEY_Armenian_SE , .name = "Armenian_SE" },
+{ .code = XKB_KEY_Armenian_se , .name = "Armenian_se" },
+{ .code = XKB_KEY_Armenian_VEV , .name = "Armenian_VEV" },
+{ .code = XKB_KEY_Armenian_vev , .name = "Armenian_vev" },
+{ .code = XKB_KEY_Armenian_TYUN , .name = "Armenian_TYUN" },
+{ .code = XKB_KEY_Armenian_tyun , .name = "Armenian_tyun" },
+{ .code = XKB_KEY_Armenian_RE , .name = "Armenian_RE" },
+{ .code = XKB_KEY_Armenian_re , .name = "Armenian_re" },
+{ .code = XKB_KEY_Armenian_TSO , .name = "Armenian_TSO" },
+{ .code = XKB_KEY_Armenian_tso , .name = "Armenian_tso" },
+{ .code = XKB_KEY_Armenian_VYUN , .name = "Armenian_VYUN" },
+{ .code = XKB_KEY_Armenian_vyun , .name = "Armenian_vyun" },
+{ .code = XKB_KEY_Armenian_PYUR , .name = "Armenian_PYUR" },
+{ .code = XKB_KEY_Armenian_pyur , .name = "Armenian_pyur" },
+{ .code = XKB_KEY_Armenian_KE , .name = "Armenian_KE" },
+{ .code = XKB_KEY_Armenian_ke , .name = "Armenian_ke" },
+{ .code = XKB_KEY_Armenian_O , .name = "Armenian_O" },
+{ .code = XKB_KEY_Armenian_o , .name = "Armenian_o" },
+{ .code = XKB_KEY_Armenian_FE , .name = "Armenian_FE" },
+{ .code = XKB_KEY_Armenian_fe , .name = "Armenian_fe" },
+{ .code = XKB_KEY_Armenian_apostrophe, .name = "Armenian_apostrophe" },
+{ .code = XKB_KEY_Georgian_an , .name = "Georgian_an" },
+{ .code = XKB_KEY_Georgian_ban , .name = "Georgian_ban" },
+{ .code = XKB_KEY_Georgian_gan , .name = "Georgian_gan" },
+{ .code = XKB_KEY_Georgian_don , .name = "Georgian_don" },
+{ .code = XKB_KEY_Georgian_en , .name = "Georgian_en" },
+{ .code = XKB_KEY_Georgian_vin , .name = "Georgian_vin" },
+{ .code = XKB_KEY_Georgian_zen , .name = "Georgian_zen" },
+{ .code = XKB_KEY_Georgian_tan , .name = "Georgian_tan" },
+{ .code = XKB_KEY_Georgian_in , .name = "Georgian_in" },
+{ .code = XKB_KEY_Georgian_kan , .name = "Georgian_kan" },
+{ .code = XKB_KEY_Georgian_las , .name = "Georgian_las" },
+{ .code = XKB_KEY_Georgian_man , .name = "Georgian_man" },
+{ .code = XKB_KEY_Georgian_nar , .name = "Georgian_nar" },
+{ .code = XKB_KEY_Georgian_on , .name = "Georgian_on" },
+{ .code = XKB_KEY_Georgian_par , .name = "Georgian_par" },
+{ .code = XKB_KEY_Georgian_zhar , .name = "Georgian_zhar" },
+{ .code = XKB_KEY_Georgian_rae , .name = "Georgian_rae" },
+{ .code = XKB_KEY_Georgian_san , .name = "Georgian_san" },
+{ .code = XKB_KEY_Georgian_tar , .name = "Georgian_tar" },
+{ .code = XKB_KEY_Georgian_un , .name = "Georgian_un" },
+{ .code = XKB_KEY_Georgian_phar , .name = "Georgian_phar" },
+{ .code = XKB_KEY_Georgian_khar , .name = "Georgian_khar" },
+{ .code = XKB_KEY_Georgian_ghan , .name = "Georgian_ghan" },
+{ .code = XKB_KEY_Georgian_qar , .name = "Georgian_qar" },
+{ .code = XKB_KEY_Georgian_shin , .name = "Georgian_shin" },
+{ .code = XKB_KEY_Georgian_chin , .name = "Georgian_chin" },
+{ .code = XKB_KEY_Georgian_can , .name = "Georgian_can" },
+{ .code = XKB_KEY_Georgian_jil , .name = "Georgian_jil" },
+{ .code = XKB_KEY_Georgian_cil , .name = "Georgian_cil" },
+{ .code = XKB_KEY_Georgian_char , .name = "Georgian_char" },
+{ .code = XKB_KEY_Georgian_xan , .name = "Georgian_xan" },
+{ .code = XKB_KEY_Georgian_jhan , .name = "Georgian_jhan" },
+{ .code = XKB_KEY_Georgian_hae , .name = "Georgian_hae" },
+{ .code = XKB_KEY_Georgian_he , .name = "Georgian_he" },
+{ .code = XKB_KEY_Georgian_hie , .name = "Georgian_hie" },
+{ .code = XKB_KEY_Georgian_we , .name = "Georgian_we" },
+{ .code = XKB_KEY_Georgian_har , .name = "Georgian_har" },
+{ .code = XKB_KEY_Georgian_hoe , .name = "Georgian_hoe" },
+{ .code = XKB_KEY_Georgian_fi , .name = "Georgian_fi" },
+{ .code = XKB_KEY_Xabovedot , .name = "Xabovedot" },
+{ .code = XKB_KEY_Ibreve , .name = "Ibreve" },
+{ .code = XKB_KEY_Zstroke , .name = "Zstroke" },
+{ .code = XKB_KEY_Gcaron , .name = "Gcaron" },
+{ .code = XKB_KEY_Ocaron , .name = "Ocaron" },
+{ .code = XKB_KEY_Obarred , .name = "Obarred" },
+{ .code = XKB_KEY_xabovedot , .name = "xabovedot" },
+{ .code = XKB_KEY_ibreve , .name = "ibreve" },
+{ .code = XKB_KEY_zstroke , .name = "zstroke" },
+{ .code = XKB_KEY_gcaron , .name = "gcaron" },
+{ .code = XKB_KEY_ocaron , .name = "ocaron" },
+{ .code = XKB_KEY_obarred , .name = "obarred" },
+{ .code = XKB_KEY_SCHWA , .name = "SCHWA" },
+{ .code = XKB_KEY_schwa , .name = "schwa" },
+{ .code = XKB_KEY_EZH , .name = "EZH" },
+{ .code = XKB_KEY_ezh , .name = "ezh" },
+{ .code = XKB_KEY_Lbelowdot , .name = "Lbelowdot" },
+{ .code = XKB_KEY_lbelowdot , .name = "lbelowdot" },
+{ .code = XKB_KEY_Abelowdot , .name = "Abelowdot" },
+{ .code = XKB_KEY_abelowdot , .name = "abelowdot" },
+{ .code = XKB_KEY_Ahook , .name = "Ahook" },
+{ .code = XKB_KEY_ahook , .name = "ahook" },
+{ .code = XKB_KEY_Acircumflexacute, .name = "Acircumflexacute" },
+{ .code = XKB_KEY_acircumflexacute, .name = "acircumflexacute" },
+{ .code = XKB_KEY_Acircumflexgrave, .name = "Acircumflexgrave" },
+{ .code = XKB_KEY_acircumflexgrave, .name = "acircumflexgrave" },
+{ .code = XKB_KEY_Acircumflexhook , .name = "Acircumflexhook" },
+{ .code = XKB_KEY_acircumflexhook , .name = "acircumflexhook" },
+{ .code = XKB_KEY_Acircumflextilde, .name = "Acircumflextilde" },
+{ .code = XKB_KEY_acircumflextilde, .name = "acircumflextilde" },
+{ .code = XKB_KEY_Acircumflexbelowdot, .name = "Acircumflexbelowdot" },
+{ .code = XKB_KEY_acircumflexbelowdot, .name = "acircumflexbelowdot" },
+{ .code = XKB_KEY_Abreveacute , .name = "Abreveacute" },
+{ .code = XKB_KEY_abreveacute , .name = "abreveacute" },
+{ .code = XKB_KEY_Abrevegrave , .name = "Abrevegrave" },
+{ .code = XKB_KEY_abrevegrave , .name = "abrevegrave" },
+{ .code = XKB_KEY_Abrevehook , .name = "Abrevehook" },
+{ .code = XKB_KEY_abrevehook , .name = "abrevehook" },
+{ .code = XKB_KEY_Abrevetilde , .name = "Abrevetilde" },
+{ .code = XKB_KEY_abrevetilde , .name = "abrevetilde" },
+{ .code = XKB_KEY_Abrevebelowdot , .name = "Abrevebelowdot" },
+{ .code = XKB_KEY_abrevebelowdot , .name = "abrevebelowdot" },
+{ .code = XKB_KEY_Ebelowdot , .name = "Ebelowdot" },
+{ .code = XKB_KEY_ebelowdot , .name = "ebelowdot" },
+{ .code = XKB_KEY_Ehook , .name = "Ehook" },
+{ .code = XKB_KEY_ehook , .name = "ehook" },
+{ .code = XKB_KEY_Etilde , .name = "Etilde" },
+{ .code = XKB_KEY_etilde , .name = "etilde" },
+{ .code = XKB_KEY_Ecircumflexacute, .name = "Ecircumflexacute" },
+{ .code = XKB_KEY_ecircumflexacute, .name = "ecircumflexacute" },
+{ .code = XKB_KEY_Ecircumflexgrave, .name = "Ecircumflexgrave" },
+{ .code = XKB_KEY_ecircumflexgrave, .name = "ecircumflexgrave" },
+{ .code = XKB_KEY_Ecircumflexhook , .name = "Ecircumflexhook" },
+{ .code = XKB_KEY_ecircumflexhook , .name = "ecircumflexhook" },
+{ .code = XKB_KEY_Ecircumflextilde, .name = "Ecircumflextilde" },
+{ .code = XKB_KEY_ecircumflextilde, .name = "ecircumflextilde" },
+{ .code = XKB_KEY_Ecircumflexbelowdot, .name = "Ecircumflexbelowdot" },
+{ .code = XKB_KEY_ecircumflexbelowdot, .name = "ecircumflexbelowdot" },
+{ .code = XKB_KEY_Ihook , .name = "Ihook" },
+{ .code = XKB_KEY_ihook , .name = "ihook" },
+{ .code = XKB_KEY_Ibelowdot , .name = "Ibelowdot" },
+{ .code = XKB_KEY_ibelowdot , .name = "ibelowdot" },
+{ .code = XKB_KEY_Obelowdot , .name = "Obelowdot" },
+{ .code = XKB_KEY_obelowdot , .name = "obelowdot" },
+{ .code = XKB_KEY_Ohook , .name = "Ohook" },
+{ .code = XKB_KEY_ohook , .name = "ohook" },
+{ .code = XKB_KEY_Ocircumflexacute, .name = "Ocircumflexacute" },
+{ .code = XKB_KEY_ocircumflexacute, .name = "ocircumflexacute" },
+{ .code = XKB_KEY_Ocircumflexgrave, .name = "Ocircumflexgrave" },
+{ .code = XKB_KEY_ocircumflexgrave, .name = "ocircumflexgrave" },
+{ .code = XKB_KEY_Ocircumflexhook , .name = "Ocircumflexhook" },
+{ .code = XKB_KEY_ocircumflexhook , .name = "ocircumflexhook" },
+{ .code = XKB_KEY_Ocircumflextilde, .name = "Ocircumflextilde" },
+{ .code = XKB_KEY_ocircumflextilde, .name = "ocircumflextilde" },
+{ .code = XKB_KEY_Ocircumflexbelowdot, .name = "Ocircumflexbelowdot" },
+{ .code = XKB_KEY_ocircumflexbelowdot, .name = "ocircumflexbelowdot" },
+{ .code = XKB_KEY_Ohornacute , .name = "Ohornacute" },
+{ .code = XKB_KEY_ohornacute , .name = "ohornacute" },
+{ .code = XKB_KEY_Ohorngrave , .name = "Ohorngrave" },
+{ .code = XKB_KEY_ohorngrave , .name = "ohorngrave" },
+{ .code = XKB_KEY_Ohornhook , .name = "Ohornhook" },
+{ .code = XKB_KEY_ohornhook , .name = "ohornhook" },
+{ .code = XKB_KEY_Ohorntilde , .name = "Ohorntilde" },
+{ .code = XKB_KEY_ohorntilde , .name = "ohorntilde" },
+{ .code = XKB_KEY_Ohornbelowdot , .name = "Ohornbelowdot" },
+{ .code = XKB_KEY_ohornbelowdot , .name = "ohornbelowdot" },
+{ .code = XKB_KEY_Ubelowdot , .name = "Ubelowdot" },
+{ .code = XKB_KEY_ubelowdot , .name = "ubelowdot" },
+{ .code = XKB_KEY_Uhook , .name = "Uhook" },
+{ .code = XKB_KEY_uhook , .name = "uhook" },
+{ .code = XKB_KEY_Uhornacute , .name = "Uhornacute" },
+{ .code = XKB_KEY_uhornacute , .name = "uhornacute" },
+{ .code = XKB_KEY_Uhorngrave , .name = "Uhorngrave" },
+{ .code = XKB_KEY_uhorngrave , .name = "uhorngrave" },
+{ .code = XKB_KEY_Uhornhook , .name = "Uhornhook" },
+{ .code = XKB_KEY_uhornhook , .name = "uhornhook" },
+{ .code = XKB_KEY_Uhorntilde , .name = "Uhorntilde" },
+{ .code = XKB_KEY_uhorntilde , .name = "uhorntilde" },
+{ .code = XKB_KEY_Uhornbelowdot , .name = "Uhornbelowdot" },
+{ .code = XKB_KEY_uhornbelowdot , .name = "uhornbelowdot" },
+{ .code = XKB_KEY_Ybelowdot , .name = "Ybelowdot" },
+{ .code = XKB_KEY_ybelowdot , .name = "ybelowdot" },
+{ .code = XKB_KEY_Yhook , .name = "Yhook" },
+{ .code = XKB_KEY_yhook , .name = "yhook" },
+{ .code = XKB_KEY_Ytilde , .name = "Ytilde" },
+{ .code = XKB_KEY_ytilde , .name = "ytilde" },
+{ .code = XKB_KEY_Ohorn , .name = "Ohorn" },
+{ .code = XKB_KEY_ohorn , .name = "ohorn" },
+{ .code = XKB_KEY_Uhorn , .name = "Uhorn" },
+{ .code = XKB_KEY_uhorn , .name = "uhorn" },
+{ .code = XKB_KEY_EcuSign , .name = "EcuSign" },
+{ .code = XKB_KEY_ColonSign , .name = "ColonSign" },
+{ .code = XKB_KEY_CruzeiroSign , .name = "CruzeiroSign" },
+{ .code = XKB_KEY_FFrancSign , .name = "FFrancSign" },
+{ .code = XKB_KEY_LiraSign , .name = "LiraSign" },
+{ .code = XKB_KEY_MillSign , .name = "MillSign" },
+{ .code = XKB_KEY_NairaSign , .name = "NairaSign" },
+{ .code = XKB_KEY_PesetaSign , .name = "PesetaSign" },
+{ .code = XKB_KEY_RupeeSign , .name = "RupeeSign" },
+{ .code = XKB_KEY_WonSign , .name = "WonSign" },
+{ .code = XKB_KEY_NewSheqelSign , .name = "NewSheqelSign" },
+{ .code = XKB_KEY_DongSign , .name = "DongSign" },
+{ .code = XKB_KEY_EuroSign , .name = "EuroSign" },
+{ .code = XKB_KEY_zerosuperior , .name = "zerosuperior" },
+{ .code = XKB_KEY_foursuperior , .name = "foursuperior" },
+{ .code = XKB_KEY_fivesuperior , .name = "fivesuperior" },
+{ .code = XKB_KEY_sixsuperior , .name = "sixsuperior" },
+{ .code = XKB_KEY_sevensuperior , .name = "sevensuperior" },
+{ .code = XKB_KEY_eightsuperior , .name = "eightsuperior" },
+{ .code = XKB_KEY_ninesuperior , .name = "ninesuperior" },
+{ .code = XKB_KEY_zerosubscript , .name = "zerosubscript" },
+{ .code = XKB_KEY_onesubscript , .name = "onesubscript" },
+{ .code = XKB_KEY_twosubscript , .name = "twosubscript" },
+{ .code = XKB_KEY_threesubscript , .name = "threesubscript" },
+{ .code = XKB_KEY_foursubscript , .name = "foursubscript" },
+{ .code = XKB_KEY_fivesubscript , .name = "fivesubscript" },
+{ .code = XKB_KEY_sixsubscript , .name = "sixsubscript" },
+{ .code = XKB_KEY_sevensubscript , .name = "sevensubscript" },
+{ .code = XKB_KEY_eightsubscript , .name = "eightsubscript" },
+{ .code = XKB_KEY_ninesubscript , .name = "ninesubscript" },
+{ .code = XKB_KEY_partdifferential, .name = "partdifferential" },
+{ .code = XKB_KEY_emptyset , .name = "emptyset" },
+{ .code = XKB_KEY_elementof , .name = "elementof" },
+{ .code = XKB_KEY_notelementof , .name = "notelementof" },
+{ .code = XKB_KEY_containsas , .name = "containsas" },
+{ .code = XKB_KEY_squareroot , .name = "squareroot" },
+{ .code = XKB_KEY_cuberoot , .name = "cuberoot" },
+{ .code = XKB_KEY_fourthroot , .name = "fourthroot" },
+{ .code = XKB_KEY_dintegral , .name = "dintegral" },
+{ .code = XKB_KEY_tintegral , .name = "tintegral" },
+{ .code = XKB_KEY_because , .name = "because" },
+{ .code = XKB_KEY_approxeq , .name = "approxeq" },
+{ .code = XKB_KEY_notapproxeq , .name = "notapproxeq" },
+{ .code = XKB_KEY_notidentical , .name = "notidentical" },
+{ .code = XKB_KEY_stricteq , .name = "stricteq" },
+{ .code = XKB_KEY_braille_dot_1 , .name = "braille_dot_1" },
+{ .code = XKB_KEY_braille_dot_2 , .name = "braille_dot_2" },
+{ .code = XKB_KEY_braille_dot_3 , .name = "braille_dot_3" },
+{ .code = XKB_KEY_braille_dot_4 , .name = "braille_dot_4" },
+{ .code = XKB_KEY_braille_dot_5 , .name = "braille_dot_5" },
+{ .code = XKB_KEY_braille_dot_6 , .name = "braille_dot_6" },
+{ .code = XKB_KEY_braille_dot_7 , .name = "braille_dot_7" },
+{ .code = XKB_KEY_braille_dot_8 , .name = "braille_dot_8" },
+{ .code = XKB_KEY_braille_dot_9 , .name = "braille_dot_9" },
+{ .code = XKB_KEY_braille_dot_10 , .name = "braille_dot_10" },
+{ .code = XKB_KEY_braille_blank , .name = "braille_blank" },
+{ .code = XKB_KEY_braille_dots_1 , .name = "braille_dots_1" },
+{ .code = XKB_KEY_braille_dots_2 , .name = "braille_dots_2" },
+{ .code = XKB_KEY_braille_dots_12 , .name = "braille_dots_12" },
+{ .code = XKB_KEY_braille_dots_3 , .name = "braille_dots_3" },
+{ .code = XKB_KEY_braille_dots_13 , .name = "braille_dots_13" },
+{ .code = XKB_KEY_braille_dots_23 , .name = "braille_dots_23" },
+{ .code = XKB_KEY_braille_dots_123, .name = "braille_dots_123" },
+{ .code = XKB_KEY_braille_dots_4 , .name = "braille_dots_4" },
+{ .code = XKB_KEY_braille_dots_14 , .name = "braille_dots_14" },
+{ .code = XKB_KEY_braille_dots_24 , .name = "braille_dots_24" },
+{ .code = XKB_KEY_braille_dots_124, .name = "braille_dots_124" },
+{ .code = XKB_KEY_braille_dots_34 , .name = "braille_dots_34" },
+{ .code = XKB_KEY_braille_dots_134, .name = "braille_dots_134" },
+{ .code = XKB_KEY_braille_dots_234, .name = "braille_dots_234" },
+{ .code = XKB_KEY_braille_dots_1234, .name = "braille_dots_1234" },
+{ .code = XKB_KEY_braille_dots_5 , .name = "braille_dots_5" },
+{ .code = XKB_KEY_braille_dots_15 , .name = "braille_dots_15" },
+{ .code = XKB_KEY_braille_dots_25 , .name = "braille_dots_25" },
+{ .code = XKB_KEY_braille_dots_125, .name = "braille_dots_125" },
+{ .code = XKB_KEY_braille_dots_35 , .name = "braille_dots_35" },
+{ .code = XKB_KEY_braille_dots_135, .name = "braille_dots_135" },
+{ .code = XKB_KEY_braille_dots_235, .name = "braille_dots_235" },
+{ .code = XKB_KEY_braille_dots_1235, .name = "braille_dots_1235" },
+{ .code = XKB_KEY_braille_dots_45 , .name = "braille_dots_45" },
+{ .code = XKB_KEY_braille_dots_145, .name = "braille_dots_145" },
+{ .code = XKB_KEY_braille_dots_245, .name = "braille_dots_245" },
+{ .code = XKB_KEY_braille_dots_1245, .name = "braille_dots_1245" },
+{ .code = XKB_KEY_braille_dots_345, .name = "braille_dots_345" },
+{ .code = XKB_KEY_braille_dots_1345, .name = "braille_dots_1345" },
+{ .code = XKB_KEY_braille_dots_2345, .name = "braille_dots_2345" },
+{ .code = XKB_KEY_braille_dots_12345, .name = "braille_dots_12345" },
+{ .code = XKB_KEY_braille_dots_6 , .name = "braille_dots_6" },
+{ .code = XKB_KEY_braille_dots_16 , .name = "braille_dots_16" },
+{ .code = XKB_KEY_braille_dots_26 , .name = "braille_dots_26" },
+{ .code = XKB_KEY_braille_dots_126, .name = "braille_dots_126" },
+{ .code = XKB_KEY_braille_dots_36 , .name = "braille_dots_36" },
+{ .code = XKB_KEY_braille_dots_136, .name = "braille_dots_136" },
+{ .code = XKB_KEY_braille_dots_236, .name = "braille_dots_236" },
+{ .code = XKB_KEY_braille_dots_1236, .name = "braille_dots_1236" },
+{ .code = XKB_KEY_braille_dots_46 , .name = "braille_dots_46" },
+{ .code = XKB_KEY_braille_dots_146, .name = "braille_dots_146" },
+{ .code = XKB_KEY_braille_dots_246, .name = "braille_dots_246" },
+{ .code = XKB_KEY_braille_dots_1246, .name = "braille_dots_1246" },
+{ .code = XKB_KEY_braille_dots_346, .name = "braille_dots_346" },
+{ .code = XKB_KEY_braille_dots_1346, .name = "braille_dots_1346" },
+{ .code = XKB_KEY_braille_dots_2346, .name = "braille_dots_2346" },
+{ .code = XKB_KEY_braille_dots_12346, .name = "braille_dots_12346" },
+{ .code = XKB_KEY_braille_dots_56 , .name = "braille_dots_56" },
+{ .code = XKB_KEY_braille_dots_156, .name = "braille_dots_156" },
+{ .code = XKB_KEY_braille_dots_256, .name = "braille_dots_256" },
+{ .code = XKB_KEY_braille_dots_1256, .name = "braille_dots_1256" },
+{ .code = XKB_KEY_braille_dots_356, .name = "braille_dots_356" },
+{ .code = XKB_KEY_braille_dots_1356, .name = "braille_dots_1356" },
+{ .code = XKB_KEY_braille_dots_2356, .name = "braille_dots_2356" },
+{ .code = XKB_KEY_braille_dots_12356, .name = "braille_dots_12356" },
+{ .code = XKB_KEY_braille_dots_456, .name = "braille_dots_456" },
+{ .code = XKB_KEY_braille_dots_1456, .name = "braille_dots_1456" },
+{ .code = XKB_KEY_braille_dots_2456, .name = "braille_dots_2456" },
+{ .code = XKB_KEY_braille_dots_12456, .name = "braille_dots_12456" },
+{ .code = XKB_KEY_braille_dots_3456, .name = "braille_dots_3456" },
+{ .code = XKB_KEY_braille_dots_13456, .name = "braille_dots_13456" },
+{ .code = XKB_KEY_braille_dots_23456, .name = "braille_dots_23456" },
+{ .code = XKB_KEY_braille_dots_123456, .name = "braille_dots_123456" },
+{ .code = XKB_KEY_braille_dots_7 , .name = "braille_dots_7" },
+{ .code = XKB_KEY_braille_dots_17 , .name = "braille_dots_17" },
+{ .code = XKB_KEY_braille_dots_27 , .name = "braille_dots_27" },
+{ .code = XKB_KEY_braille_dots_127, .name = "braille_dots_127" },
+{ .code = XKB_KEY_braille_dots_37 , .name = "braille_dots_37" },
+{ .code = XKB_KEY_braille_dots_137, .name = "braille_dots_137" },
+{ .code = XKB_KEY_braille_dots_237, .name = "braille_dots_237" },
+{ .code = XKB_KEY_braille_dots_1237, .name = "braille_dots_1237" },
+{ .code = XKB_KEY_braille_dots_47 , .name = "braille_dots_47" },
+{ .code = XKB_KEY_braille_dots_147, .name = "braille_dots_147" },
+{ .code = XKB_KEY_braille_dots_247, .name = "braille_dots_247" },
+{ .code = XKB_KEY_braille_dots_1247, .name = "braille_dots_1247" },
+{ .code = XKB_KEY_braille_dots_347, .name = "braille_dots_347" },
+{ .code = XKB_KEY_braille_dots_1347, .name = "braille_dots_1347" },
+{ .code = XKB_KEY_braille_dots_2347, .name = "braille_dots_2347" },
+{ .code = XKB_KEY_braille_dots_12347, .name = "braille_dots_12347" },
+{ .code = XKB_KEY_braille_dots_57 , .name = "braille_dots_57" },
+{ .code = XKB_KEY_braille_dots_157, .name = "braille_dots_157" },
+{ .code = XKB_KEY_braille_dots_257, .name = "braille_dots_257" },
+{ .code = XKB_KEY_braille_dots_1257, .name = "braille_dots_1257" },
+{ .code = XKB_KEY_braille_dots_357, .name = "braille_dots_357" },
+{ .code = XKB_KEY_braille_dots_1357, .name = "braille_dots_1357" },
+{ .code = XKB_KEY_braille_dots_2357, .name = "braille_dots_2357" },
+{ .code = XKB_KEY_braille_dots_12357, .name = "braille_dots_12357" },
+{ .code = XKB_KEY_braille_dots_457, .name = "braille_dots_457" },
+{ .code = XKB_KEY_braille_dots_1457, .name = "braille_dots_1457" },
+{ .code = XKB_KEY_braille_dots_2457, .name = "braille_dots_2457" },
+{ .code = XKB_KEY_braille_dots_12457, .name = "braille_dots_12457" },
+{ .code = XKB_KEY_braille_dots_3457, .name = "braille_dots_3457" },
+{ .code = XKB_KEY_braille_dots_13457, .name = "braille_dots_13457" },
+{ .code = XKB_KEY_braille_dots_23457, .name = "braille_dots_23457" },
+{ .code = XKB_KEY_braille_dots_123457, .name = "braille_dots_123457" },
+{ .code = XKB_KEY_braille_dots_67 , .name = "braille_dots_67" },
+{ .code = XKB_KEY_braille_dots_167, .name = "braille_dots_167" },
+{ .code = XKB_KEY_braille_dots_267, .name = "braille_dots_267" },
+{ .code = XKB_KEY_braille_dots_1267, .name = "braille_dots_1267" },
+{ .code = XKB_KEY_braille_dots_367, .name = "braille_dots_367" },
+{ .code = XKB_KEY_braille_dots_1367, .name = "braille_dots_1367" },
+{ .code = XKB_KEY_braille_dots_2367, .name = "braille_dots_2367" },
+{ .code = XKB_KEY_braille_dots_12367, .name = "braille_dots_12367" },
+{ .code = XKB_KEY_braille_dots_467, .name = "braille_dots_467" },
+{ .code = XKB_KEY_braille_dots_1467, .name = "braille_dots_1467" },
+{ .code = XKB_KEY_braille_dots_2467, .name = "braille_dots_2467" },
+{ .code = XKB_KEY_braille_dots_12467, .name = "braille_dots_12467" },
+{ .code = XKB_KEY_braille_dots_3467, .name = "braille_dots_3467" },
+{ .code = XKB_KEY_braille_dots_13467, .name = "braille_dots_13467" },
+{ .code = XKB_KEY_braille_dots_23467, .name = "braille_dots_23467" },
+{ .code = XKB_KEY_braille_dots_123467, .name = "braille_dots_123467" },
+{ .code = XKB_KEY_braille_dots_567, .name = "braille_dots_567" },
+{ .code = XKB_KEY_braille_dots_1567, .name = "braille_dots_1567" },
+{ .code = XKB_KEY_braille_dots_2567, .name = "braille_dots_2567" },
+{ .code = XKB_KEY_braille_dots_12567, .name = "braille_dots_12567" },
+{ .code = XKB_KEY_braille_dots_3567, .name = "braille_dots_3567" },
+{ .code = XKB_KEY_braille_dots_13567, .name = "braille_dots_13567" },
+{ .code = XKB_KEY_braille_dots_23567, .name = "braille_dots_23567" },
+{ .code = XKB_KEY_braille_dots_123567, .name = "braille_dots_123567" },
+{ .code = XKB_KEY_braille_dots_4567, .name = "braille_dots_4567" },
+{ .code = XKB_KEY_braille_dots_14567, .name = "braille_dots_14567" },
+{ .code = XKB_KEY_braille_dots_24567, .name = "braille_dots_24567" },
+{ .code = XKB_KEY_braille_dots_124567, .name = "braille_dots_124567" },
+{ .code = XKB_KEY_braille_dots_34567, .name = "braille_dots_34567" },
+{ .code = XKB_KEY_braille_dots_134567, .name = "braille_dots_134567" },
+{ .code = XKB_KEY_braille_dots_234567, .name = "braille_dots_234567" },
+{ .code = XKB_KEY_braille_dots_1234567, .name = "braille_dots_1234567" },
+{ .code = XKB_KEY_braille_dots_8 , .name = "braille_dots_8" },
+{ .code = XKB_KEY_braille_dots_18 , .name = "braille_dots_18" },
+{ .code = XKB_KEY_braille_dots_28 , .name = "braille_dots_28" },
+{ .code = XKB_KEY_braille_dots_128, .name = "braille_dots_128" },
+{ .code = XKB_KEY_braille_dots_38 , .name = "braille_dots_38" },
+{ .code = XKB_KEY_braille_dots_138, .name = "braille_dots_138" },
+{ .code = XKB_KEY_braille_dots_238, .name = "braille_dots_238" },
+{ .code = XKB_KEY_braille_dots_1238, .name = "braille_dots_1238" },
+{ .code = XKB_KEY_braille_dots_48 , .name = "braille_dots_48" },
+{ .code = XKB_KEY_braille_dots_148, .name = "braille_dots_148" },
+{ .code = XKB_KEY_braille_dots_248, .name = "braille_dots_248" },
+{ .code = XKB_KEY_braille_dots_1248, .name = "braille_dots_1248" },
+{ .code = XKB_KEY_braille_dots_348, .name = "braille_dots_348" },
+{ .code = XKB_KEY_braille_dots_1348, .name = "braille_dots_1348" },
+{ .code = XKB_KEY_braille_dots_2348, .name = "braille_dots_2348" },
+{ .code = XKB_KEY_braille_dots_12348, .name = "braille_dots_12348" },
+{ .code = XKB_KEY_braille_dots_58 , .name = "braille_dots_58" },
+{ .code = XKB_KEY_braille_dots_158, .name = "braille_dots_158" },
+{ .code = XKB_KEY_braille_dots_258, .name = "braille_dots_258" },
+{ .code = XKB_KEY_braille_dots_1258, .name = "braille_dots_1258" },
+{ .code = XKB_KEY_braille_dots_358, .name = "braille_dots_358" },
+{ .code = XKB_KEY_braille_dots_1358, .name = "braille_dots_1358" },
+{ .code = XKB_KEY_braille_dots_2358, .name = "braille_dots_2358" },
+{ .code = XKB_KEY_braille_dots_12358, .name = "braille_dots_12358" },
+{ .code = XKB_KEY_braille_dots_458, .name = "braille_dots_458" },
+{ .code = XKB_KEY_braille_dots_1458, .name = "braille_dots_1458" },
+{ .code = XKB_KEY_braille_dots_2458, .name = "braille_dots_2458" },
+{ .code = XKB_KEY_braille_dots_12458, .name = "braille_dots_12458" },
+{ .code = XKB_KEY_braille_dots_3458, .name = "braille_dots_3458" },
+{ .code = XKB_KEY_braille_dots_13458, .name = "braille_dots_13458" },
+{ .code = XKB_KEY_braille_dots_23458, .name = "braille_dots_23458" },
+{ .code = XKB_KEY_braille_dots_123458, .name = "braille_dots_123458" },
+{ .code = XKB_KEY_braille_dots_68 , .name = "braille_dots_68" },
+{ .code = XKB_KEY_braille_dots_168, .name = "braille_dots_168" },
+{ .code = XKB_KEY_braille_dots_268, .name = "braille_dots_268" },
+{ .code = XKB_KEY_braille_dots_1268, .name = "braille_dots_1268" },
+{ .code = XKB_KEY_braille_dots_368, .name = "braille_dots_368" },
+{ .code = XKB_KEY_braille_dots_1368, .name = "braille_dots_1368" },
+{ .code = XKB_KEY_braille_dots_2368, .name = "braille_dots_2368" },
+{ .code = XKB_KEY_braille_dots_12368, .name = "braille_dots_12368" },
+{ .code = XKB_KEY_braille_dots_468, .name = "braille_dots_468" },
+{ .code = XKB_KEY_braille_dots_1468, .name = "braille_dots_1468" },
+{ .code = XKB_KEY_braille_dots_2468, .name = "braille_dots_2468" },
+{ .code = XKB_KEY_braille_dots_12468, .name = "braille_dots_12468" },
+{ .code = XKB_KEY_braille_dots_3468, .name = "braille_dots_3468" },
+{ .code = XKB_KEY_braille_dots_13468, .name = "braille_dots_13468" },
+{ .code = XKB_KEY_braille_dots_23468, .name = "braille_dots_23468" },
+{ .code = XKB_KEY_braille_dots_123468, .name = "braille_dots_123468" },
+{ .code = XKB_KEY_braille_dots_568, .name = "braille_dots_568" },
+{ .code = XKB_KEY_braille_dots_1568, .name = "braille_dots_1568" },
+{ .code = XKB_KEY_braille_dots_2568, .name = "braille_dots_2568" },
+{ .code = XKB_KEY_braille_dots_12568, .name = "braille_dots_12568" },
+{ .code = XKB_KEY_braille_dots_3568, .name = "braille_dots_3568" },
+{ .code = XKB_KEY_braille_dots_13568, .name = "braille_dots_13568" },
+{ .code = XKB_KEY_braille_dots_23568, .name = "braille_dots_23568" },
+{ .code = XKB_KEY_braille_dots_123568, .name = "braille_dots_123568" },
+{ .code = XKB_KEY_braille_dots_4568, .name = "braille_dots_4568" },
+{ .code = XKB_KEY_braille_dots_14568, .name = "braille_dots_14568" },
+{ .code = XKB_KEY_braille_dots_24568, .name = "braille_dots_24568" },
+{ .code = XKB_KEY_braille_dots_124568, .name = "braille_dots_124568" },
+{ .code = XKB_KEY_braille_dots_34568, .name = "braille_dots_34568" },
+{ .code = XKB_KEY_braille_dots_134568, .name = "braille_dots_134568" },
+{ .code = XKB_KEY_braille_dots_234568, .name = "braille_dots_234568" },
+{ .code = XKB_KEY_braille_dots_1234568, .name = "braille_dots_1234568" },
+{ .code = XKB_KEY_braille_dots_78 , .name = "braille_dots_78" },
+{ .code = XKB_KEY_braille_dots_178, .name = "braille_dots_178" },
+{ .code = XKB_KEY_braille_dots_278, .name = "braille_dots_278" },
+{ .code = XKB_KEY_braille_dots_1278, .name = "braille_dots_1278" },
+{ .code = XKB_KEY_braille_dots_378, .name = "braille_dots_378" },
+{ .code = XKB_KEY_braille_dots_1378, .name = "braille_dots_1378" },
+{ .code = XKB_KEY_braille_dots_2378, .name = "braille_dots_2378" },
+{ .code = XKB_KEY_braille_dots_12378, .name = "braille_dots_12378" },
+{ .code = XKB_KEY_braille_dots_478, .name = "braille_dots_478" },
+{ .code = XKB_KEY_braille_dots_1478, .name = "braille_dots_1478" },
+{ .code = XKB_KEY_braille_dots_2478, .name = "braille_dots_2478" },
+{ .code = XKB_KEY_braille_dots_12478, .name = "braille_dots_12478" },
+{ .code = XKB_KEY_braille_dots_3478, .name = "braille_dots_3478" },
+{ .code = XKB_KEY_braille_dots_13478, .name = "braille_dots_13478" },
+{ .code = XKB_KEY_braille_dots_23478, .name = "braille_dots_23478" },
+{ .code = XKB_KEY_braille_dots_123478, .name = "braille_dots_123478" },
+{ .code = XKB_KEY_braille_dots_578, .name = "braille_dots_578" },
+{ .code = XKB_KEY_braille_dots_1578, .name = "braille_dots_1578" },
+{ .code = XKB_KEY_braille_dots_2578, .name = "braille_dots_2578" },
+{ .code = XKB_KEY_braille_dots_12578, .name = "braille_dots_12578" },
+{ .code = XKB_KEY_braille_dots_3578, .name = "braille_dots_3578" },
+{ .code = XKB_KEY_braille_dots_13578, .name = "braille_dots_13578" },
+{ .code = XKB_KEY_braille_dots_23578, .name = "braille_dots_23578" },
+{ .code = XKB_KEY_braille_dots_123578, .name = "braille_dots_123578" },
+{ .code = XKB_KEY_braille_dots_4578, .name = "braille_dots_4578" },
+{ .code = XKB_KEY_braille_dots_14578, .name = "braille_dots_14578" },
+{ .code = XKB_KEY_braille_dots_24578, .name = "braille_dots_24578" },
+{ .code = XKB_KEY_braille_dots_124578, .name = "braille_dots_124578" },
+{ .code = XKB_KEY_braille_dots_34578, .name = "braille_dots_34578" },
+{ .code = XKB_KEY_braille_dots_134578, .name = "braille_dots_134578" },
+{ .code = XKB_KEY_braille_dots_234578, .name = "braille_dots_234578" },
+{ .code = XKB_KEY_braille_dots_1234578, .name = "braille_dots_1234578" },
+{ .code = XKB_KEY_braille_dots_678, .name = "braille_dots_678" },
+{ .code = XKB_KEY_braille_dots_1678, .name = "braille_dots_1678" },
+{ .code = XKB_KEY_braille_dots_2678, .name = "braille_dots_2678" },
+{ .code = XKB_KEY_braille_dots_12678, .name = "braille_dots_12678" },
+{ .code = XKB_KEY_braille_dots_3678, .name = "braille_dots_3678" },
+{ .code = XKB_KEY_braille_dots_13678, .name = "braille_dots_13678" },
+{ .code = XKB_KEY_braille_dots_23678, .name = "braille_dots_23678" },
+{ .code = XKB_KEY_braille_dots_123678, .name = "braille_dots_123678" },
+{ .code = XKB_KEY_braille_dots_4678, .name = "braille_dots_4678" },
+{ .code = XKB_KEY_braille_dots_14678, .name = "braille_dots_14678" },
+{ .code = XKB_KEY_braille_dots_24678, .name = "braille_dots_24678" },
+{ .code = XKB_KEY_braille_dots_124678, .name = "braille_dots_124678" },
+{ .code = XKB_KEY_braille_dots_34678, .name = "braille_dots_34678" },
+{ .code = XKB_KEY_braille_dots_134678, .name = "braille_dots_134678" },
+{ .code = XKB_KEY_braille_dots_234678, .name = "braille_dots_234678" },
+{ .code = XKB_KEY_braille_dots_1234678, .name = "braille_dots_1234678" },
+{ .code = XKB_KEY_braille_dots_5678, .name = "braille_dots_5678" },
+{ .code = XKB_KEY_braille_dots_15678, .name = "braille_dots_15678" },
+{ .code = XKB_KEY_braille_dots_25678, .name = "braille_dots_25678" },
+{ .code = XKB_KEY_braille_dots_125678, .name = "braille_dots_125678" },
+{ .code = XKB_KEY_braille_dots_35678, .name = "braille_dots_35678" },
+{ .code = XKB_KEY_braille_dots_135678, .name = "braille_dots_135678" },
+{ .code = XKB_KEY_braille_dots_235678, .name = "braille_dots_235678" },
+{ .code = XKB_KEY_braille_dots_1235678, .name = "braille_dots_1235678" },
+{ .code = XKB_KEY_braille_dots_45678, .name = "braille_dots_45678" },
+{ .code = XKB_KEY_braille_dots_145678, .name = "braille_dots_145678" },
+{ .code = XKB_KEY_braille_dots_245678, .name = "braille_dots_245678" },
+{ .code = XKB_KEY_braille_dots_1245678, .name = "braille_dots_1245678" },
+{ .code = XKB_KEY_braille_dots_345678, .name = "braille_dots_345678" },
+{ .code = XKB_KEY_braille_dots_1345678, .name = "braille_dots_1345678" },
+{ .code = XKB_KEY_braille_dots_2345678, .name = "braille_dots_2345678" },
+{ .code = XKB_KEY_braille_dots_12345678, .name = "braille_dots_12345678" },
+{ .code = XKB_KEY_Sinh_ng , .name = "Sinh_ng" },
+{ .code = XKB_KEY_Sinh_h2 , .name = "Sinh_h2" },
+{ .code = XKB_KEY_Sinh_a , .name = "Sinh_a" },
+{ .code = XKB_KEY_Sinh_aa , .name = "Sinh_aa" },
+{ .code = XKB_KEY_Sinh_ae , .name = "Sinh_ae" },
+{ .code = XKB_KEY_Sinh_aee , .name = "Sinh_aee" },
+{ .code = XKB_KEY_Sinh_i , .name = "Sinh_i" },
+{ .code = XKB_KEY_Sinh_ii , .name = "Sinh_ii" },
+{ .code = XKB_KEY_Sinh_u , .name = "Sinh_u" },
+{ .code = XKB_KEY_Sinh_uu , .name = "Sinh_uu" },
+{ .code = XKB_KEY_Sinh_ri , .name = "Sinh_ri" },
+{ .code = XKB_KEY_Sinh_rii , .name = "Sinh_rii" },
+{ .code = XKB_KEY_Sinh_lu , .name = "Sinh_lu" },
+{ .code = XKB_KEY_Sinh_luu , .name = "Sinh_luu" },
+{ .code = XKB_KEY_Sinh_e , .name = "Sinh_e" },
+{ .code = XKB_KEY_Sinh_ee , .name = "Sinh_ee" },
+{ .code = XKB_KEY_Sinh_ai , .name = "Sinh_ai" },
+{ .code = XKB_KEY_Sinh_o , .name = "Sinh_o" },
+{ .code = XKB_KEY_Sinh_oo , .name = "Sinh_oo" },
+{ .code = XKB_KEY_Sinh_au , .name = "Sinh_au" },
+{ .code = XKB_KEY_Sinh_ka , .name = "Sinh_ka" },
+{ .code = XKB_KEY_Sinh_kha , .name = "Sinh_kha" },
+{ .code = XKB_KEY_Sinh_ga , .name = "Sinh_ga" },
+{ .code = XKB_KEY_Sinh_gha , .name = "Sinh_gha" },
+{ .code = XKB_KEY_Sinh_ng2 , .name = "Sinh_ng2" },
+{ .code = XKB_KEY_Sinh_nga , .name = "Sinh_nga" },
+{ .code = XKB_KEY_Sinh_ca , .name = "Sinh_ca" },
+{ .code = XKB_KEY_Sinh_cha , .name = "Sinh_cha" },
+{ .code = XKB_KEY_Sinh_ja , .name = "Sinh_ja" },
+{ .code = XKB_KEY_Sinh_jha , .name = "Sinh_jha" },
+{ .code = XKB_KEY_Sinh_nya , .name = "Sinh_nya" },
+{ .code = XKB_KEY_Sinh_jnya , .name = "Sinh_jnya" },
+{ .code = XKB_KEY_Sinh_nja , .name = "Sinh_nja" },
+{ .code = XKB_KEY_Sinh_tta , .name = "Sinh_tta" },
+{ .code = XKB_KEY_Sinh_ttha , .name = "Sinh_ttha" },
+{ .code = XKB_KEY_Sinh_dda , .name = "Sinh_dda" },
+{ .code = XKB_KEY_Sinh_ddha , .name = "Sinh_ddha" },
+{ .code = XKB_KEY_Sinh_nna , .name = "Sinh_nna" },
+{ .code = XKB_KEY_Sinh_ndda , .name = "Sinh_ndda" },
+{ .code = XKB_KEY_Sinh_tha , .name = "Sinh_tha" },
+{ .code = XKB_KEY_Sinh_thha , .name = "Sinh_thha" },
+{ .code = XKB_KEY_Sinh_dha , .name = "Sinh_dha" },
+{ .code = XKB_KEY_Sinh_dhha , .name = "Sinh_dhha" },
+{ .code = XKB_KEY_Sinh_na , .name = "Sinh_na" },
+{ .code = XKB_KEY_Sinh_ndha , .name = "Sinh_ndha" },
+{ .code = XKB_KEY_Sinh_pa , .name = "Sinh_pa" },
+{ .code = XKB_KEY_Sinh_pha , .name = "Sinh_pha" },
+{ .code = XKB_KEY_Sinh_ba , .name = "Sinh_ba" },
+{ .code = XKB_KEY_Sinh_bha , .name = "Sinh_bha" },
+{ .code = XKB_KEY_Sinh_ma , .name = "Sinh_ma" },
+{ .code = XKB_KEY_Sinh_mba , .name = "Sinh_mba" },
+{ .code = XKB_KEY_Sinh_ya , .name = "Sinh_ya" },
+{ .code = XKB_KEY_Sinh_ra , .name = "Sinh_ra" },
+{ .code = XKB_KEY_Sinh_la , .name = "Sinh_la" },
+{ .code = XKB_KEY_Sinh_va , .name = "Sinh_va" },
+{ .code = XKB_KEY_Sinh_sha , .name = "Sinh_sha" },
+{ .code = XKB_KEY_Sinh_ssha , .name = "Sinh_ssha" },
+{ .code = XKB_KEY_Sinh_sa , .name = "Sinh_sa" },
+{ .code = XKB_KEY_Sinh_ha , .name = "Sinh_ha" },
+{ .code = XKB_KEY_Sinh_lla , .name = "Sinh_lla" },
+{ .code = XKB_KEY_Sinh_fa , .name = "Sinh_fa" },
+{ .code = XKB_KEY_Sinh_al , .name = "Sinh_al" },
+{ .code = XKB_KEY_Sinh_aa2 , .name = "Sinh_aa2" },
+{ .code = XKB_KEY_Sinh_ae2 , .name = "Sinh_ae2" },
+{ .code = XKB_KEY_Sinh_aee2 , .name = "Sinh_aee2" },
+{ .code = XKB_KEY_Sinh_i2 , .name = "Sinh_i2" },
+{ .code = XKB_KEY_Sinh_ii2 , .name = "Sinh_ii2" },
+{ .code = XKB_KEY_Sinh_u2 , .name = "Sinh_u2" },
+{ .code = XKB_KEY_Sinh_uu2 , .name = "Sinh_uu2" },
+{ .code = XKB_KEY_Sinh_ru2 , .name = "Sinh_ru2" },
+{ .code = XKB_KEY_Sinh_e2 , .name = "Sinh_e2" },
+{ .code = XKB_KEY_Sinh_ee2 , .name = "Sinh_ee2" },
+{ .code = XKB_KEY_Sinh_ai2 , .name = "Sinh_ai2" },
+{ .code = XKB_KEY_Sinh_o2 , .name = "Sinh_o2" },
+{ .code = XKB_KEY_Sinh_oo2 , .name = "Sinh_oo2" },
+{ .code = XKB_KEY_Sinh_au2 , .name = "Sinh_au2" },
+{ .code = XKB_KEY_Sinh_lu2 , .name = "Sinh_lu2" },
+{ .code = XKB_KEY_Sinh_ruu2 , .name = "Sinh_ruu2" },
+{ .code = XKB_KEY_Sinh_luu2 , .name = "Sinh_luu2" },
+{ .code = XKB_KEY_Sinh_kunddaliya , .name = "Sinh_kunddaliya" },
+{ .code = XKB_KEY_XF86ModeLock , .name = "XF86ModeLock" },
+{ .code = XKB_KEY_XF86MonBrightnessUp, .name = "XF86MonBrightnessUp" },
+{ .code = XKB_KEY_XF86MonBrightnessDown, .name = "XF86MonBrightnessDown" },
+{ .code = XKB_KEY_XF86KbdLightOnOff, .name = "XF86KbdLightOnOff" },
+{ .code = XKB_KEY_XF86KbdBrightnessUp, .name = "XF86KbdBrightnessUp" },
+{ .code = XKB_KEY_XF86KbdBrightnessDown, .name = "XF86KbdBrightnessDown" },
+{ .code = XKB_KEY_XF86Standby , .name = "XF86Standby" },
+{ .code = XKB_KEY_XF86AudioLowerVolume, .name = "XF86AudioLowerVolume" },
+{ .code = XKB_KEY_XF86AudioMute , .name = "XF86AudioMute" },
+{ .code = XKB_KEY_XF86AudioRaiseVolume, .name = "XF86AudioRaiseVolume" },
+{ .code = XKB_KEY_XF86AudioPlay , .name = "XF86AudioPlay" },
+{ .code = XKB_KEY_XF86AudioStop , .name = "XF86AudioStop" },
+{ .code = XKB_KEY_XF86AudioPrev , .name = "XF86AudioPrev" },
+{ .code = XKB_KEY_XF86AudioNext , .name = "XF86AudioNext" },
+{ .code = XKB_KEY_XF86HomePage , .name = "XF86HomePage" },
+{ .code = XKB_KEY_XF86Mail , .name = "XF86Mail" },
+{ .code = XKB_KEY_XF86Start , .name = "XF86Start" },
+{ .code = XKB_KEY_XF86Search , .name = "XF86Search" },
+{ .code = XKB_KEY_XF86AudioRecord , .name = "XF86AudioRecord" },
+{ .code = XKB_KEY_XF86Calculator , .name = "XF86Calculator" },
+{ .code = XKB_KEY_XF86Memo , .name = "XF86Memo" },
+{ .code = XKB_KEY_XF86ToDoList , .name = "XF86ToDoList" },
+{ .code = XKB_KEY_XF86Calendar , .name = "XF86Calendar" },
+{ .code = XKB_KEY_XF86PowerDown , .name = "XF86PowerDown" },
+{ .code = XKB_KEY_XF86ContrastAdjust, .name = "XF86ContrastAdjust" },
+{ .code = XKB_KEY_XF86RockerUp , .name = "XF86RockerUp" },
+{ .code = XKB_KEY_XF86RockerDown , .name = "XF86RockerDown" },
+{ .code = XKB_KEY_XF86RockerEnter , .name = "XF86RockerEnter" },
+{ .code = XKB_KEY_XF86Back , .name = "XF86Back" },
+{ .code = XKB_KEY_XF86Forward , .name = "XF86Forward" },
+{ .code = XKB_KEY_XF86Stop , .name = "XF86Stop" },
+{ .code = XKB_KEY_XF86Refresh , .name = "XF86Refresh" },
+{ .code = XKB_KEY_XF86PowerOff , .name = "XF86PowerOff" },
+{ .code = XKB_KEY_XF86WakeUp , .name = "XF86WakeUp" },
+{ .code = XKB_KEY_XF86Eject , .name = "XF86Eject" },
+{ .code = XKB_KEY_XF86ScreenSaver , .name = "XF86ScreenSaver" },
+{ .code = XKB_KEY_XF86WWW , .name = "XF86WWW" },
+{ .code = XKB_KEY_XF86Sleep , .name = "XF86Sleep" },
+{ .code = XKB_KEY_XF86Favorites , .name = "XF86Favorites" },
+{ .code = XKB_KEY_XF86AudioPause , .name = "XF86AudioPause" },
+{ .code = XKB_KEY_XF86AudioMedia , .name = "XF86AudioMedia" },
+{ .code = XKB_KEY_XF86MyComputer , .name = "XF86MyComputer" },
+{ .code = XKB_KEY_XF86VendorHome , .name = "XF86VendorHome" },
+{ .code = XKB_KEY_XF86LightBulb , .name = "XF86LightBulb" },
+{ .code = XKB_KEY_XF86Shop , .name = "XF86Shop" },
+{ .code = XKB_KEY_XF86History , .name = "XF86History" },
+{ .code = XKB_KEY_XF86OpenURL , .name = "XF86OpenURL" },
+{ .code = XKB_KEY_XF86AddFavorite , .name = "XF86AddFavorite" },
+{ .code = XKB_KEY_XF86HotLinks , .name = "XF86HotLinks" },
+{ .code = XKB_KEY_XF86BrightnessAdjust, .name = "XF86BrightnessAdjust" },
+{ .code = XKB_KEY_XF86Finance , .name = "XF86Finance" },
+{ .code = XKB_KEY_XF86Community , .name = "XF86Community" },
+{ .code = XKB_KEY_XF86AudioRewind , .name = "XF86AudioRewind" },
+{ .code = XKB_KEY_XF86BackForward , .name = "XF86BackForward" },
+{ .code = XKB_KEY_XF86Launch0 , .name = "XF86Launch0" },
+{ .code = XKB_KEY_XF86Launch1 , .name = "XF86Launch1" },
+{ .code = XKB_KEY_XF86Launch2 , .name = "XF86Launch2" },
+{ .code = XKB_KEY_XF86Launch3 , .name = "XF86Launch3" },
+{ .code = XKB_KEY_XF86Launch4 , .name = "XF86Launch4" },
+{ .code = XKB_KEY_XF86Launch5 , .name = "XF86Launch5" },
+{ .code = XKB_KEY_XF86Launch6 , .name = "XF86Launch6" },
+{ .code = XKB_KEY_XF86Launch7 , .name = "XF86Launch7" },
+{ .code = XKB_KEY_XF86Launch8 , .name = "XF86Launch8" },
+{ .code = XKB_KEY_XF86Launch9 , .name = "XF86Launch9" },
+{ .code = XKB_KEY_XF86LaunchA , .name = "XF86LaunchA" },
+{ .code = XKB_KEY_XF86LaunchB , .name = "XF86LaunchB" },
+{ .code = XKB_KEY_XF86LaunchC , .name = "XF86LaunchC" },
+{ .code = XKB_KEY_XF86LaunchD , .name = "XF86LaunchD" },
+{ .code = XKB_KEY_XF86LaunchE , .name = "XF86LaunchE" },
+{ .code = XKB_KEY_XF86LaunchF , .name = "XF86LaunchF" },
+{ .code = XKB_KEY_XF86ApplicationLeft, .name = "XF86ApplicationLeft" },
+{ .code = XKB_KEY_XF86ApplicationRight, .name = "XF86ApplicationRight" },
+{ .code = XKB_KEY_XF86Book , .name = "XF86Book" },
+{ .code = XKB_KEY_XF86CD , .name = "XF86CD" },
+{ .code = XKB_KEY_XF86Calculater , .name = "XF86Calculater" },
+{ .code = XKB_KEY_XF86Clear , .name = "XF86Clear" },
+{ .code = XKB_KEY_XF86Close , .name = "XF86Close" },
+{ .code = XKB_KEY_XF86Copy , .name = "XF86Copy" },
+{ .code = XKB_KEY_XF86Cut , .name = "XF86Cut" },
+{ .code = XKB_KEY_XF86Display , .name = "XF86Display" },
+{ .code = XKB_KEY_XF86DOS , .name = "XF86DOS" },
+{ .code = XKB_KEY_XF86Documents , .name = "XF86Documents" },
+{ .code = XKB_KEY_XF86Excel , .name = "XF86Excel" },
+{ .code = XKB_KEY_XF86Explorer , .name = "XF86Explorer" },
+{ .code = XKB_KEY_XF86Game , .name = "XF86Game" },
+{ .code = XKB_KEY_XF86Go , .name = "XF86Go" },
+{ .code = XKB_KEY_XF86iTouch , .name = "XF86iTouch" },
+{ .code = XKB_KEY_XF86LogOff , .name = "XF86LogOff" },
+{ .code = XKB_KEY_XF86Market , .name = "XF86Market" },
+{ .code = XKB_KEY_XF86Meeting , .name = "XF86Meeting" },
+{ .code = XKB_KEY_XF86MenuKB , .name = "XF86MenuKB" },
+{ .code = XKB_KEY_XF86MenuPB , .name = "XF86MenuPB" },
+{ .code = XKB_KEY_XF86MySites , .name = "XF86MySites" },
+{ .code = XKB_KEY_XF86New , .name = "XF86New" },
+{ .code = XKB_KEY_XF86News , .name = "XF86News" },
+{ .code = XKB_KEY_XF86OfficeHome , .name = "XF86OfficeHome" },
+{ .code = XKB_KEY_XF86Open , .name = "XF86Open" },
+{ .code = XKB_KEY_XF86Option , .name = "XF86Option" },
+{ .code = XKB_KEY_XF86Paste , .name = "XF86Paste" },
+{ .code = XKB_KEY_XF86Phone , .name = "XF86Phone" },
+{ .code = XKB_KEY_XF86Q , .name = "XF86Q" },
+{ .code = XKB_KEY_XF86Reply , .name = "XF86Reply" },
+{ .code = XKB_KEY_XF86Reload , .name = "XF86Reload" },
+{ .code = XKB_KEY_XF86RotateWindows, .name = "XF86RotateWindows" },
+{ .code = XKB_KEY_XF86RotationPB , .name = "XF86RotationPB" },
+{ .code = XKB_KEY_XF86RotationKB , .name = "XF86RotationKB" },
+{ .code = XKB_KEY_XF86Save , .name = "XF86Save" },
+{ .code = XKB_KEY_XF86ScrollUp , .name = "XF86ScrollUp" },
+{ .code = XKB_KEY_XF86ScrollDown , .name = "XF86ScrollDown" },
+{ .code = XKB_KEY_XF86ScrollClick , .name = "XF86ScrollClick" },
+{ .code = XKB_KEY_XF86Send , .name = "XF86Send" },
+{ .code = XKB_KEY_XF86Spell , .name = "XF86Spell" },
+{ .code = XKB_KEY_XF86SplitScreen , .name = "XF86SplitScreen" },
+{ .code = XKB_KEY_XF86Support , .name = "XF86Support" },
+{ .code = XKB_KEY_XF86TaskPane , .name = "XF86TaskPane" },
+{ .code = XKB_KEY_XF86Terminal , .name = "XF86Terminal" },
+{ .code = XKB_KEY_XF86Tools , .name = "XF86Tools" },
+{ .code = XKB_KEY_XF86Travel , .name = "XF86Travel" },
+{ .code = XKB_KEY_XF86UserPB , .name = "XF86UserPB" },
+{ .code = XKB_KEY_XF86User1KB , .name = "XF86User1KB" },
+{ .code = XKB_KEY_XF86User2KB , .name = "XF86User2KB" },
+{ .code = XKB_KEY_XF86Video , .name = "XF86Video" },
+{ .code = XKB_KEY_XF86WheelButton , .name = "XF86WheelButton" },
+{ .code = XKB_KEY_XF86Word , .name = "XF86Word" },
+{ .code = XKB_KEY_XF86Xfer , .name = "XF86Xfer" },
+{ .code = XKB_KEY_XF86ZoomIn , .name = "XF86ZoomIn" },
+{ .code = XKB_KEY_XF86ZoomOut , .name = "XF86ZoomOut" },
+{ .code = XKB_KEY_XF86Away , .name = "XF86Away" },
+{ .code = XKB_KEY_XF86Messenger , .name = "XF86Messenger" },
+{ .code = XKB_KEY_XF86WebCam , .name = "XF86WebCam" },
+{ .code = XKB_KEY_XF86MailForward , .name = "XF86MailForward" },
+{ .code = XKB_KEY_XF86Pictures , .name = "XF86Pictures" },
+{ .code = XKB_KEY_XF86Music , .name = "XF86Music" },
+{ .code = XKB_KEY_XF86Battery , .name = "XF86Battery" },
+{ .code = XKB_KEY_XF86Bluetooth , .name = "XF86Bluetooth" },
+{ .code = XKB_KEY_XF86WLAN , .name = "XF86WLAN" },
+{ .code = XKB_KEY_XF86UWB , .name = "XF86UWB" },
+{ .code = XKB_KEY_XF86AudioForward, .name = "XF86AudioForward" },
+{ .code = XKB_KEY_XF86AudioRepeat , .name = "XF86AudioRepeat" },
+{ .code = XKB_KEY_XF86AudioRandomPlay, .name = "XF86AudioRandomPlay" },
+{ .code = XKB_KEY_XF86Subtitle , .name = "XF86Subtitle" },
+{ .code = XKB_KEY_XF86AudioCycleTrack, .name = "XF86AudioCycleTrack" },
+{ .code = XKB_KEY_XF86CycleAngle , .name = "XF86CycleAngle" },
+{ .code = XKB_KEY_XF86FrameBack , .name = "XF86FrameBack" },
+{ .code = XKB_KEY_XF86FrameForward, .name = "XF86FrameForward" },
+{ .code = XKB_KEY_XF86Time , .name = "XF86Time" },
+{ .code = XKB_KEY_XF86Select , .name = "XF86Select" },
+{ .code = XKB_KEY_XF86View , .name = "XF86View" },
+{ .code = XKB_KEY_XF86TopMenu , .name = "XF86TopMenu" },
+{ .code = XKB_KEY_XF86Red , .name = "XF86Red" },
+{ .code = XKB_KEY_XF86Green , .name = "XF86Green" },
+{ .code = XKB_KEY_XF86Yellow , .name = "XF86Yellow" },
+{ .code = XKB_KEY_XF86Blue , .name = "XF86Blue" },
+{ .code = XKB_KEY_XF86Suspend , .name = "XF86Suspend" },
+{ .code = XKB_KEY_XF86Hibernate , .name = "XF86Hibernate" },
+{ .code = XKB_KEY_XF86TouchpadToggle, .name = "XF86TouchpadToggle" },
+{ .code = XKB_KEY_XF86TouchpadOn , .name = "XF86TouchpadOn" },
+{ .code = XKB_KEY_XF86TouchpadOff , .name = "XF86TouchpadOff" },
+{ .code = XKB_KEY_XF86AudioMicMute, .name = "XF86AudioMicMute" },
+{ .code = XKB_KEY_XF86Switch_VT_1 , .name = "XF86Switch_VT_1" },
+{ .code = XKB_KEY_XF86Switch_VT_2 , .name = "XF86Switch_VT_2" },
+{ .code = XKB_KEY_XF86Switch_VT_3 , .name = "XF86Switch_VT_3" },
+{ .code = XKB_KEY_XF86Switch_VT_4 , .name = "XF86Switch_VT_4" },
+{ .code = XKB_KEY_XF86Switch_VT_5 , .name = "XF86Switch_VT_5" },
+{ .code = XKB_KEY_XF86Switch_VT_6 , .name = "XF86Switch_VT_6" },
+{ .code = XKB_KEY_XF86Switch_VT_7 , .name = "XF86Switch_VT_7" },
+{ .code = XKB_KEY_XF86Switch_VT_8 , .name = "XF86Switch_VT_8" },
+{ .code = XKB_KEY_XF86Switch_VT_9 , .name = "XF86Switch_VT_9" },
+{ .code = XKB_KEY_XF86Switch_VT_10, .name = "XF86Switch_VT_10" },
+{ .code = XKB_KEY_XF86Switch_VT_11, .name = "XF86Switch_VT_11" },
+{ .code = XKB_KEY_XF86Switch_VT_12, .name = "XF86Switch_VT_12" },
+{ .code = XKB_KEY_XF86Ungrab , .name = "XF86Ungrab" },
+{ .code = XKB_KEY_XF86ClearGrab , .name = "XF86ClearGrab" },
+{ .code = XKB_KEY_XF86Next_VMode , .name = "XF86Next_VMode" },
+{ .code = XKB_KEY_XF86Prev_VMode , .name = "XF86Prev_VMode" },
+{ .code = XKB_KEY_XF86LogWindowTree, .name = "XF86LogWindowTree" },
+{ .code = XKB_KEY_XF86LogGrabInfo , .name = "XF86LogGrabInfo" },
+{ .code = XKB_KEY_SunFA_Grave , .name = "SunFA_Grave" },
+{ .code = XKB_KEY_SunFA_Circum , .name = "SunFA_Circum" },
+{ .code = XKB_KEY_SunFA_Tilde , .name = "SunFA_Tilde" },
+{ .code = XKB_KEY_SunFA_Acute , .name = "SunFA_Acute" },
+{ .code = XKB_KEY_SunFA_Diaeresis , .name = "SunFA_Diaeresis" },
+{ .code = XKB_KEY_SunFA_Cedilla , .name = "SunFA_Cedilla" },
+{ .code = XKB_KEY_SunF36 , .name = "SunF36" },
+{ .code = XKB_KEY_SunF37 , .name = "SunF37" },
+{ .code = XKB_KEY_SunSys_Req , .name = "SunSys_Req" },
+{ .code = XKB_KEY_SunPrint_Screen , .name = "SunPrint_Screen" },
+{ .code = XKB_KEY_SunCompose , .name = "SunCompose" },
+{ .code = XKB_KEY_SunAltGraph , .name = "SunAltGraph" },
+{ .code = XKB_KEY_SunPageUp , .name = "SunPageUp" },
+{ .code = XKB_KEY_SunPageDown , .name = "SunPageDown" },
+{ .code = XKB_KEY_SunUndo , .name = "SunUndo" },
+{ .code = XKB_KEY_SunAgain , .name = "SunAgain" },
+{ .code = XKB_KEY_SunFind , .name = "SunFind" },
+{ .code = XKB_KEY_SunStop , .name = "SunStop" },
+{ .code = XKB_KEY_SunProps , .name = "SunProps" },
+{ .code = XKB_KEY_SunFront , .name = "SunFront" },
+{ .code = XKB_KEY_SunCopy , .name = "SunCopy" },
+{ .code = XKB_KEY_SunOpen , .name = "SunOpen" },
+{ .code = XKB_KEY_SunPaste , .name = "SunPaste" },
+{ .code = XKB_KEY_SunCut , .name = "SunCut" },
+{ .code = XKB_KEY_SunPowerSwitch , .name = "SunPowerSwitch" },
+{ .code = XKB_KEY_SunAudioLowerVolume, .name = "SunAudioLowerVolume" },
+{ .code = XKB_KEY_SunAudioMute , .name = "SunAudioMute" },
+{ .code = XKB_KEY_SunAudioRaiseVolume, .name = "SunAudioRaiseVolume" },
+{ .code = XKB_KEY_SunVideoDegauss , .name = "SunVideoDegauss" },
+{ .code = XKB_KEY_SunVideoLowerBrightness, .name = "SunVideoLowerBrightness" },
+{ .code = XKB_KEY_SunVideoRaiseBrightness, .name = "SunVideoRaiseBrightness" },
+{ .code = XKB_KEY_SunPowerSwitchShift, .name = "SunPowerSwitchShift" },
+{ .code = XKB_KEY_Dring_accent , .name = "Dring_accent" },
+{ .code = XKB_KEY_Dcircumflex_accent, .name = "Dcircumflex_accent" },
+{ .code = XKB_KEY_Dcedilla_accent , .name = "Dcedilla_accent" },
+{ .code = XKB_KEY_Dacute_accent , .name = "Dacute_accent" },
+{ .code = XKB_KEY_Dgrave_accent , .name = "Dgrave_accent" },
+{ .code = XKB_KEY_Dtilde , .name = "Dtilde" },
+{ .code = XKB_KEY_Ddiaeresis , .name = "Ddiaeresis" },
+{ .code = XKB_KEY_DRemove , .name = "DRemove" },
+{ .code = XKB_KEY_hpClearLine , .name = "hpClearLine" },
+{ .code = XKB_KEY_hpInsertLine , .name = "hpInsertLine" },
+{ .code = XKB_KEY_hpDeleteLine , .name = "hpDeleteLine" },
+{ .code = XKB_KEY_hpInsertChar , .name = "hpInsertChar" },
+{ .code = XKB_KEY_hpDeleteChar , .name = "hpDeleteChar" },
+{ .code = XKB_KEY_hpBackTab , .name = "hpBackTab" },
+{ .code = XKB_KEY_hpKP_BackTab , .name = "hpKP_BackTab" },
+{ .code = XKB_KEY_hpModelock1 , .name = "hpModelock1" },
+{ .code = XKB_KEY_hpModelock2 , .name = "hpModelock2" },
+{ .code = XKB_KEY_hpReset , .name = "hpReset" },
+{ .code = XKB_KEY_hpSystem , .name = "hpSystem" },
+{ .code = XKB_KEY_hpUser , .name = "hpUser" },
+{ .code = XKB_KEY_hpmute_acute , .name = "hpmute_acute" },
+{ .code = XKB_KEY_hpmute_grave , .name = "hpmute_grave" },
+{ .code = XKB_KEY_hpmute_asciicircum, .name = "hpmute_asciicircum" },
+{ .code = XKB_KEY_hpmute_diaeresis, .name = "hpmute_diaeresis" },
+{ .code = XKB_KEY_hpmute_asciitilde, .name = "hpmute_asciitilde" },
+{ .code = XKB_KEY_hplira , .name = "hplira" },
+{ .code = XKB_KEY_hpguilder , .name = "hpguilder" },
+{ .code = XKB_KEY_hpYdiaeresis , .name = "hpYdiaeresis" },
+{ .code = XKB_KEY_hpIO , .name = "hpIO" },
+{ .code = XKB_KEY_hplongminus , .name = "hplongminus" },
+{ .code = XKB_KEY_hpblock , .name = "hpblock" },
+{ .code = XKB_KEY_osfCopy , .name = "osfCopy" },
+{ .code = XKB_KEY_osfCut , .name = "osfCut" },
+{ .code = XKB_KEY_osfPaste , .name = "osfPaste" },
+{ .code = XKB_KEY_osfBackTab , .name = "osfBackTab" },
+{ .code = XKB_KEY_osfBackSpace , .name = "osfBackSpace" },
+{ .code = XKB_KEY_osfClear , .name = "osfClear" },
+{ .code = XKB_KEY_osfEscape , .name = "osfEscape" },
+{ .code = XKB_KEY_osfAddMode , .name = "osfAddMode" },
+{ .code = XKB_KEY_osfPrimaryPaste , .name = "osfPrimaryPaste" },
+{ .code = XKB_KEY_osfQuickPaste , .name = "osfQuickPaste" },
+{ .code = XKB_KEY_osfPageLeft , .name = "osfPageLeft" },
+{ .code = XKB_KEY_osfPageUp , .name = "osfPageUp" },
+{ .code = XKB_KEY_osfPageDown , .name = "osfPageDown" },
+{ .code = XKB_KEY_osfPageRight , .name = "osfPageRight" },
+{ .code = XKB_KEY_osfActivate , .name = "osfActivate" },
+{ .code = XKB_KEY_osfMenuBar , .name = "osfMenuBar" },
+{ .code = XKB_KEY_osfLeft , .name = "osfLeft" },
+{ .code = XKB_KEY_osfUp , .name = "osfUp" },
+{ .code = XKB_KEY_osfRight , .name = "osfRight" },
+{ .code = XKB_KEY_osfDown , .name = "osfDown" },
+{ .code = XKB_KEY_osfEndLine , .name = "osfEndLine" },
+{ .code = XKB_KEY_osfBeginLine , .name = "osfBeginLine" },
+{ .code = XKB_KEY_osfEndData , .name = "osfEndData" },
+{ .code = XKB_KEY_osfBeginData , .name = "osfBeginData" },
+{ .code = XKB_KEY_osfPrevMenu , .name = "osfPrevMenu" },
+{ .code = XKB_KEY_osfNextMenu , .name = "osfNextMenu" },
+{ .code = XKB_KEY_osfPrevField , .name = "osfPrevField" },
+{ .code = XKB_KEY_osfNextField , .name = "osfNextField" },
+{ .code = XKB_KEY_osfSelect , .name = "osfSelect" },
+{ .code = XKB_KEY_osfInsert , .name = "osfInsert" },
+{ .code = XKB_KEY_osfUndo , .name = "osfUndo" },
+{ .code = XKB_KEY_osfMenu , .name = "osfMenu" },
+{ .code = XKB_KEY_osfCancel , .name = "osfCancel" },
+{ .code = XKB_KEY_osfHelp , .name = "osfHelp" },
+{ .code = XKB_KEY_osfSelectAll , .name = "osfSelectAll" },
+{ .code = XKB_KEY_osfDeselectAll , .name = "osfDeselectAll" },
+{ .code = XKB_KEY_osfReselect , .name = "osfReselect" },
+{ .code = XKB_KEY_osfExtend , .name = "osfExtend" },
+{ .code = XKB_KEY_osfRestore , .name = "osfRestore" },
+{ .code = XKB_KEY_osfDelete , .name = "osfDelete" },
+{ .code = XKB_KEY_Reset , .name = "Reset" },
+{ .code = XKB_KEY_System , .name = "System" },
+{ .code = XKB_KEY_User , .name = "User" },
+{ .code = XKB_KEY_ClearLine , .name = "ClearLine" },
+{ .code = XKB_KEY_InsertLine , .name = "InsertLine" },
+{ .code = XKB_KEY_DeleteLine , .name = "DeleteLine" },
+{ .code = XKB_KEY_InsertChar , .name = "InsertChar" },
+{ .code = XKB_KEY_DeleteChar , .name = "DeleteChar" },
+{ .code = XKB_KEY_BackTab , .name = "BackTab" },
+{ .code = XKB_KEY_KP_BackTab , .name = "KP_BackTab" },
+{ .code = XKB_KEY_Ext16bit_L , .name = "Ext16bit_L" },
+{ .code = XKB_KEY_Ext16bit_R , .name = "Ext16bit_R" },
+{ .code = XKB_KEY_mute_acute , .name = "mute_acute" },
+{ .code = XKB_KEY_mute_grave , .name = "mute_grave" },
+{ .code = XKB_KEY_mute_asciicircum, .name = "mute_asciicircum" },
+{ .code = XKB_KEY_mute_diaeresis , .name = "mute_diaeresis" },
+{ .code = XKB_KEY_mute_asciitilde , .name = "mute_asciitilde" },
+{ .code = XKB_KEY_lira , .name = "lira" },
+{ .code = XKB_KEY_guilder , .name = "guilder" },
+{ .code = XKB_KEY_IO , .name = "IO" },
+{ .code = XKB_KEY_longminus , .name = "longminus" },
+{ .code = XKB_KEY_block , .name = "block" },