From 3dbef02dac0046e3965c385dc9412730e01f9ead Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Tue, 9 Jul 2019 14:27:26 +0200 Subject: [PATCH] input: implement keypad application mode This commit also replaces the previous (temporary) key map with a much more complete one. --- input.c | 141 ++++------------- keymap.h | 454 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ vt.c | 6 +- 3 files changed, 489 insertions(+), 112 deletions(-) create mode 100644 keymap.h diff --git a/input.c b/input.c index 11dd398d..5663d950 100644 --- a/input.c +++ b/input.c @@ -16,6 +16,7 @@ #include "log.h" #include "terminal.h" #include "render.h" +#include "keymap.h" static void keyboard_keymap(void *data, struct wl_keyboard *wl_keyboard, @@ -75,86 +76,6 @@ keyboard_leave(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial, mtx_unlock(&term->kbd.repeat.mutex); } -struct keymap { - const char *normal; - const char *shift; - const char *alt; - const char *shift_alt; - const char *ctrl; - const char *shift_ctrl; - const char *alt_ctrl; - const char *shift_alt_ctrl; -}; - -static const struct keymap key_map[][2] = { - [XKB_KEY_Up] = { - {"[A", "[1;2A", "[1;3A", "[1;4A", "[1;5A", "[1;6A", "[1;7A", "[1;8A"}, - {"OA", "[1;2A", "[1;3A", "[1;4A", "[1;5A", "[1;6A", "[1;7A", "[1;8A"}}, - [XKB_KEY_Down] = { - {"[B", "[1;2B", "[1;3B", "[1;4B", "[1;5B", "[1;6B", "[1;7B", "[1;8B"}, - {"OB", "[1;2B", "[1;3B", "[1;4B", "[1;5B", "[1;6B", "[1;7B", "[1;8B"}}, - [XKB_KEY_Right] = { - {"[C", "[1;2C", "[1;3C", "[1;4C", "[1;5C", "[1;6C", "[1;7C", "[1;8C"}, - {"OC", "[1;2C", "[1;3C", "[1;4C", "[1;5C", "[1;6C", "[1;7C", "[1;8C"}}, - [XKB_KEY_Left] = { - {"[D", "[1;2D", "[1;3D", "[1;4D", "[1;5D", "[1;6D", "[1;7D", "[1;8D"}, - {"OD", "[1;2D", "[1;3D", "[1;4D", "[1;5D", "[1;6D", "[1;7D", "[1;8D"}}, - [XKB_KEY_Home] = { - {"[H", "[1;2H", "[1;3H", "[1;4H", "[1;5H", "[1;6H", "[1;7H", "[1;8H"}, - {"OH", "[1;2H", "[1;3H", "[1;4H", "[1;5H", "[1;6H", "[1;7H", "[1;8H"}}, - [XKB_KEY_End] = { - {"[F", "[1;2F", "[1;3F", "[1;4F", "[1;5F", "[1;6F", "[1;7F", "[1;8F"}, - {"OF", "[1;2F", "[1;3F", "[1;4F", "[1;5F", "[1;6F", "[1;7F", "[1;8F"}}, - [XKB_KEY_Insert] = { - {"[2~", "[2;2~", "[2;3~", "[2;4~", "[2;5~", "[2;6~", "[2;7~", "[2;8~"}, - {"[2~", "[2;2~", "[2;3~", "[2;4~", "[2;5~", "[2;6~", "[2;7~", "[2;8~"}}, - [XKB_KEY_Delete] = { - {"[3~", "[3;2~", "[3;3~", "[3;4~", "[3;5~", "[3;6~", "[3;7~", "[3;8~"}, - {"[3~", "[3;2~", "[3;3~", "[3;4~", "[3;5~", "[3;6~", "[3;7~", "[3;8~"}}, - [XKB_KEY_Page_Up] = { - {"[5~", "[5;2~", "[5;3~", "[5;4~", "[5;5~", "[5;6~", "[5;7~", "[5;8~"}, - {"[5~", "[5;2~", "[5;3~", "[5;4~", "[5;5~", "[5;6~", "[5;7~", "[5;8~"}}, - [XKB_KEY_Page_Down] = { - {"[6~", "[6;2~", "[6;3~", "[6;4~", "[6;5~", "[6;6~", "[6;7~", "[6;8~"}, - {"[6~", "[6;2~", "[6;3~", "[6;4~", "[6;5~", "[6;6~", "[6;7~", "[6;8~"}}, - [XKB_KEY_F1] = { - {"OP", "[1;2P", "[1;3P", "[1;4P", "[1;5P", "[1;6P", "[1;7P", "[1;8P"}, - {"OP", "[1;2P", "[1;3P", "[1;4P", "[1;5P", "[1;6P", "[1;7P", "[1;8P"}}, - [XKB_KEY_F2] = { - {"OQ", "[1;2Q", "[1;3Q", "[1;4Q", "[1;5Q", "[1;6Q", "[1;7Q", "[1;8Q"}, - {"OQ", "[1;2Q", "[1;3Q", "[1;4Q", "[1;5Q", "[1;6Q", "[1;7Q", "[1;8Q"}}, - [XKB_KEY_F3] = { - {"OR", "[1;2R", "[1;3R", "[1;4R", "[1;5R", "[1;6R", "[1;7R", "[1;8R"}, - {"OR", "[1;2R", "[1;3R", "[1;4R", "[1;5R", "[1;6R", "[1;7R", "[1;8R"}}, - [XKB_KEY_F4] = { - {"OS", "[1;2S", "[1;3S", "[1;4S", "[1;5S", "[1;6S", "[1;7S", "[1;8S"}, - {"OS", "[1;2S", "[1;3S", "[1;4S", "[1;5S", "[1;6S", "[1;7S", "[1;8S"}}, - [XKB_KEY_F5] = { - {"[15~", "[15;2~", "[15;3~", "[15;4~", "[15;5~", "[15;6~", "[15;7~", "[15;8~"}, - {"[15~", "[15;2~", "[15;3~", "[15;4~", "[15;5~", "[15;6~", "[15;7~", "[15;8~"}}, - [XKB_KEY_F6] = { - {"[17~", "[17;2~", "[17;3~", "[17;4~", "[17;5~", "[17;6~", "[17;7~", "[17;8~"}, - {"[17~", "[17;2~", "[17;3~", "[17;4~", "[17;5~", "[17;6~", "[17;7~", "[17;8~"}}, - [XKB_KEY_F7] = { - {"[18~", "[18;2~", "[18;3~", "[18;4~", "[18;5~", "[18;6~", "[18;7~", "[18;8~"}, - {"[18~", "[18;2~", "[18;3~", "[18;4~", "[18;5~", "[18;6~", "[18;7~", "[18;8~"}}, - [XKB_KEY_F8] = { - {"[19~", "[19;2~", "[19;3~", "[19;4~", "[19;5~", "[19;6~", "[19;7~", "[19;8~"}, - {"[19~", "[19;2~", "[19;3~", "[19;4~", "[19;5~", "[19;6~", "[19;7~", "[19;8~"}}, - [XKB_KEY_F9] = { - {"[20~", "[20;2~", "[20;3~", "[20;4~", "[20;5~", "[20;6~", "[20;7~", "[20;8~"}, - {"[20~", "[20;2~", "[20;3~", "[20;4~", "[20;5~", "[20;6~", "[20;7~", "[20;8~"}}, - [XKB_KEY_F10] = { - {"[21~", "[21;2~", "[21;3~", "[21;4~", "[21;5~", "[21;6~", "[21;7~", "[21;8~"}, - {"[21~", "[21;2~", "[21;3~", "[21;4~", "[21;5~", "[21;6~", "[21;7~", "[21;8~"}}, - [XKB_KEY_F11] = { - {"[23~", "[23;2~", "[23;3~", "[23;4~", "[23;5~", "[23;6~", "[23;7~", "[23;8~"}, - {"[23~", "[23;2~", "[23;3~", "[23;4~", "[23;5~", "[23;6~", "[23;7~", "[23;8~"}}, - [XKB_KEY_F12] = { - {"[24~", "[24;2~", "[24;3~", "[24;4~", "[24;5~", "[24;6~", "[24;7~", "[24;8~"}, - {"[24~", "[24;2~", "[24;3~", "[24;4~", "[24;5~", "[24;6~", "[24;7~", "[24;8~"}}, - }; - static void keyboard_key(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial, uint32_t time, uint32_t key, uint32_t state) @@ -180,6 +101,12 @@ keyboard_key(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial, key += 8; xkb_keysym_t sym = xkb_state_key_get_one_sym(term->kbd.xkb_state, key); +#if 0 + char foo[100]; + xkb_keysym_get_name(sym, foo, sizeof(foo)); + LOG_ERR("%s", foo); +#endif + xkb_compose_state_feed(term->kbd.xkb_compose_state, sym); enum xkb_compose_status compose_status = xkb_compose_state_get_status( term->kbd.xkb_compose_state); @@ -206,37 +133,35 @@ keyboard_key(void *data, struct wl_keyboard *wl_keyboard, uint32_t serial, "effective=0x%08x", sym, mods, consumed, significant, effective_mods); - if (sym < sizeof(key_map) / sizeof(key_map[0]) && - key_map[sym][term->cursor_keys_mode - 1].normal != NULL) - { - const struct keymap *key = &key_map[sym][term->cursor_keys_mode - 1]; - const char *esc = NULL; + bool found_map = false; - if (effective_mods == 0) - esc = key->normal; - else if (effective_mods == shift) - esc = key->shift; - else if (effective_mods == alt) - esc = key->alt; - else if (effective_mods == (shift | alt)) - esc = key->shift_alt; - else if (effective_mods == ctrl) - esc = key->ctrl; - else if (effective_mods == (shift | ctrl)) - esc = key->shift_ctrl; - else if (effective_mods == (alt | ctrl)) - esc = key->alt_ctrl; - else if (effective_mods == (shift | alt | ctrl)) - esc = key->shift_alt_ctrl; - else - assert(false); + enum modifier keymap_mods = MOD_NONE; + keymap_mods |= term->kbd.shift ? MOD_SHIFT : MOD_NONE; + keymap_mods |= term->kbd.alt ? MOD_ALT : MOD_NONE; + keymap_mods |= term->kbd.ctrl ? MOD_CTRL : MOD_NONE; - write(term->ptmx, "\x1b", 1); - write(term->ptmx, esc, strlen(esc)); - } else if (sym == XKB_KEY_Escape){ - write(term->ptmx, "\x1b", 1); - } else { + for (size_t i = 0; i < sizeof(key_map) / sizeof(key_map[0]); i++) { + const struct key_map *k = &key_map[i]; + if (k->sym != sym) + continue; + if (k->modifiers != MOD_ANY && k->modifiers != keymap_mods) + continue; + + if (k->cursor_keys_mode != CURSOR_KEYS_DONTCARE && + k->cursor_keys_mode != term->cursor_keys_mode) + continue; + + if (k->keypad_keys_mode != KEYPAD_DONTCARE && + k->keypad_keys_mode != term->keypad_keys_mode) + continue; + + write(term->ptmx, k->seq, strlen(k->seq)); + found_map = true; + break; + } + + if (!found_map) { char buf[64] = {0}; int count = 0; diff --git a/keymap.h b/keymap.h new file mode 100644 index 00000000..5dd83b51 --- /dev/null +++ b/keymap.h @@ -0,0 +1,454 @@ +#pragma once + +#include +#include + +#include "terminal.h" + +enum modifier { + MOD_NONE = 0x0, + MOD_ANY = 0x1, + MOD_SHIFT = 0x2, + MOD_ALT = 0x4, + MOD_CTRL = 0x8, +}; + +struct key_map { + xkb_keysym_t sym; + enum modifier modifiers; + enum cursor_keys cursor_keys_mode; + enum keypad_keys keypad_keys_mode; + const char *seq; +}; + +static const struct key_map key_map[] = { + {XKB_KEY_Escape, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033"}, + + {XKB_KEY_Return, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033\r"}, + {XKB_KEY_Return, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\r"}, + + {XKB_KEY_BackSpace, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033\b"}, + {XKB_KEY_BackSpace, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033\b"}, + {XKB_KEY_BackSpace, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\b"}, + + + {XKB_KEY_Up, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;2A"}, + {XKB_KEY_Up, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3A"}, + {XKB_KEY_Up, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;4A"}, + {XKB_KEY_Up, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5A"}, + {XKB_KEY_Up, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;6A"}, + {XKB_KEY_Up, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7A"}, + {XKB_KEY_Up, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;8A"}, + {XKB_KEY_Up, MOD_ANY, CURSOR_KEYS_APPLICATION, KEYPAD_DONTCARE, "\033OA"}, + {XKB_KEY_Up, MOD_ANY, CURSOR_KEYS_NORMAL, KEYPAD_DONTCARE, "\033[A"}, + + {XKB_KEY_Down, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;2B"}, + {XKB_KEY_Down, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3B"}, + {XKB_KEY_Down, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;4B"}, + {XKB_KEY_Down, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5B"}, + {XKB_KEY_Down, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;6B"}, + {XKB_KEY_Down, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7B"}, + {XKB_KEY_Down, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;8B"}, + {XKB_KEY_Down, MOD_ANY, CURSOR_KEYS_APPLICATION, KEYPAD_DONTCARE, "\033OB"}, + {XKB_KEY_Down, MOD_ANY, CURSOR_KEYS_NORMAL, KEYPAD_DONTCARE, "\033[B"}, + + {XKB_KEY_Right, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;2C"}, + {XKB_KEY_Right, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3C"}, + {XKB_KEY_Right, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;4C"}, + {XKB_KEY_Right, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5C"}, + {XKB_KEY_Right, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;6C"}, + {XKB_KEY_Right, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7C"}, + {XKB_KEY_Right, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;8C"}, + {XKB_KEY_Right, MOD_ANY, CURSOR_KEYS_APPLICATION, KEYPAD_DONTCARE, "\033OC"}, + {XKB_KEY_Right, MOD_ANY, CURSOR_KEYS_NORMAL, KEYPAD_DONTCARE, "\033[C"}, + + {XKB_KEY_Left, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;2D"}, + {XKB_KEY_Left, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3D"}, + {XKB_KEY_Left, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;4D"}, + {XKB_KEY_Left, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5D"}, + {XKB_KEY_Left, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;6D"}, + {XKB_KEY_Left, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7D"}, + {XKB_KEY_Left, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;8D"}, + {XKB_KEY_Left, MOD_ANY, CURSOR_KEYS_APPLICATION, KEYPAD_DONTCARE, "\033OD"}, + {XKB_KEY_Left, MOD_ANY, CURSOR_KEYS_NORMAL, KEYPAD_DONTCARE, "\033[D"}, + + {XKB_KEY_Home, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;2H"}, + {XKB_KEY_Home, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3H"}, + {XKB_KEY_Home, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;4H"}, + {XKB_KEY_Home, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5H"}, + {XKB_KEY_Home, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;6H"}, + {XKB_KEY_Home, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7H"}, + {XKB_KEY_Home, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;8H"}, + {XKB_KEY_Home, MOD_ANY, CURSOR_KEYS_APPLICATION, KEYPAD_DONTCARE, "\033OH"}, + {XKB_KEY_Home, MOD_ANY, CURSOR_KEYS_NORMAL, KEYPAD_DONTCARE, "\033[H"}, + + {XKB_KEY_End, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;2F"}, + {XKB_KEY_End, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3F"}, + {XKB_KEY_End, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;4F"}, + {XKB_KEY_End, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5F"}, + {XKB_KEY_End, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;6F"}, + {XKB_KEY_End, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7F"}, + {XKB_KEY_End, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;8F"}, + {XKB_KEY_End, MOD_ANY, CURSOR_KEYS_APPLICATION, KEYPAD_DONTCARE, "\033OF"}, + {XKB_KEY_End, MOD_ANY, CURSOR_KEYS_NORMAL, KEYPAD_DONTCARE, "\033[F"}, + + {XKB_KEY_Insert, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[2;2~"}, + {XKB_KEY_Insert, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[2;3~"}, + {XKB_KEY_Insert, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[2;4~"}, + {XKB_KEY_Insert, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[2;5~"}, + {XKB_KEY_Insert, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[2;6~"}, + {XKB_KEY_Insert, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[2;7~"}, + {XKB_KEY_Insert, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[2;8~"}, + {XKB_KEY_Insert, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[2~"}, + + {XKB_KEY_Delete, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[3;2~"}, + {XKB_KEY_Delete, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[3;3~"}, + {XKB_KEY_Delete, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[3;4~"}, + {XKB_KEY_Delete, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[3;5~"}, + {XKB_KEY_Delete, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[3;6~"}, + {XKB_KEY_Delete, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[3;7~"}, + {XKB_KEY_Delete, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[3;8~"}, + {XKB_KEY_Delete, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[3~"}, + + {XKB_KEY_Page_Up, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;2~"}, + {XKB_KEY_Page_Up, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;3~"}, + {XKB_KEY_Page_Up, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;4~"}, + {XKB_KEY_Page_Up, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;5~"}, + {XKB_KEY_Page_Up, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;6~"}, + {XKB_KEY_Page_Up, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;7~"}, + {XKB_KEY_Page_Up, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;8~"}, + {XKB_KEY_Page_Up, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5~"}, + + {XKB_KEY_Page_Down, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;2~"}, + {XKB_KEY_Page_Down, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;3~"}, + {XKB_KEY_Page_Down, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;4~"}, + {XKB_KEY_Page_Down, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;5~"}, + {XKB_KEY_Page_Down, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;6~"}, + {XKB_KEY_Page_Down, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;7~"}, + {XKB_KEY_Page_Down, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;8~"}, + {XKB_KEY_Page_Down, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[6~"}, + + {XKB_KEY_F1, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;2P"}, + {XKB_KEY_F1, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3P"}, + {XKB_KEY_F1, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;4P"}, + {XKB_KEY_F1, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5P"}, + {XKB_KEY_F1, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;6P"}, + {XKB_KEY_F1, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7P"}, + {XKB_KEY_F1, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;8P"}, + {XKB_KEY_F1, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033OP"}, + + {XKB_KEY_F2, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;2Q"}, + {XKB_KEY_F2, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3Q"}, + {XKB_KEY_F2, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;4Q"}, + {XKB_KEY_F2, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5Q"}, + {XKB_KEY_F2, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;6Q"}, + {XKB_KEY_F2, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7Q"}, + {XKB_KEY_F2, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;8Q"}, + {XKB_KEY_F2, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033OQ"}, + + {XKB_KEY_F3, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;2R"}, + {XKB_KEY_F3, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3R"}, + {XKB_KEY_F3, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;4R"}, + {XKB_KEY_F3, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5R"}, + {XKB_KEY_F3, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;6R"}, + {XKB_KEY_F3, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7R"}, + {XKB_KEY_F3, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;8R"}, + {XKB_KEY_F3, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033OR"}, + + {XKB_KEY_F4, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;2S"}, + {XKB_KEY_F4, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3S"}, + {XKB_KEY_F4, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;4S"}, + {XKB_KEY_F4, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5S"}, + {XKB_KEY_F4, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;6S"}, + {XKB_KEY_F4, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7S"}, + {XKB_KEY_F4, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;8S"}, + {XKB_KEY_F4, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033OS"}, + + {XKB_KEY_F5, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[15;2~"}, + {XKB_KEY_F5, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[15;3~"}, + {XKB_KEY_F5, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[15;4~"}, + {XKB_KEY_F5, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[15;5~"}, + {XKB_KEY_F5, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[15;6~"}, + {XKB_KEY_F5, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[15;7~"}, + {XKB_KEY_F5, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[15;8~"}, + {XKB_KEY_F5, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[15~"}, + + {XKB_KEY_F6, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[17;2~"}, + {XKB_KEY_F6, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[17;3~"}, + {XKB_KEY_F6, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[17;4~"}, + {XKB_KEY_F6, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[17;5~"}, + {XKB_KEY_F6, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[17;6~"}, + {XKB_KEY_F6, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[17;7~"}, + {XKB_KEY_F6, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[17;8~"}, + {XKB_KEY_F6, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[17~"}, + + {XKB_KEY_F7, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[18;2~"}, + {XKB_KEY_F7, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[18;3~"}, + {XKB_KEY_F7, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[18;4~"}, + {XKB_KEY_F7, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[18;5~"}, + {XKB_KEY_F7, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[18;6~"}, + {XKB_KEY_F7, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[18;7~"}, + {XKB_KEY_F7, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[18;8~"}, + {XKB_KEY_F7, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[18~"}, + + {XKB_KEY_F8, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[19;2~"}, + {XKB_KEY_F8, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[19;3~"}, + {XKB_KEY_F8, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[19;4~"}, + {XKB_KEY_F8, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[19;5~"}, + {XKB_KEY_F8, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[19;6~"}, + {XKB_KEY_F8, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[19;7~"}, + {XKB_KEY_F8, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[19;8~"}, + {XKB_KEY_F8, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[19~"}, + + {XKB_KEY_F9, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[20;2~"}, + {XKB_KEY_F9, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[20;3~"}, + {XKB_KEY_F9, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[20;4~"}, + {XKB_KEY_F9, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[20;5~"}, + {XKB_KEY_F9, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[20;6~"}, + {XKB_KEY_F9, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[20;7~"}, + {XKB_KEY_F9, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[20;8~"}, + {XKB_KEY_F9, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[20~"}, + + {XKB_KEY_F10, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[21;2~"}, + {XKB_KEY_F10, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[21;3~"}, + {XKB_KEY_F10, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[21;4~"}, + {XKB_KEY_F10, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[21;5~"}, + {XKB_KEY_F10, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[21;6~"}, + {XKB_KEY_F10, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[21;7~"}, + {XKB_KEY_F10, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[21;8~"}, + {XKB_KEY_F10, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[21~"}, + + {XKB_KEY_F11, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[23;2~"}, + {XKB_KEY_F11, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[23;3~"}, + {XKB_KEY_F11, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[23;4~"}, + {XKB_KEY_F11, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[23;5~"}, + {XKB_KEY_F11, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[23;6~"}, + {XKB_KEY_F11, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[23;7~"}, + {XKB_KEY_F11, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[23;8~"}, + {XKB_KEY_F11, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[23~"}, + + {XKB_KEY_F12, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[24;2~"}, + {XKB_KEY_F12, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[24;3~"}, + {XKB_KEY_F12, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[24;4~"}, + {XKB_KEY_F12, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[24;5~"}, + {XKB_KEY_F12, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[24;6~"}, + {XKB_KEY_F12, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[24;7~"}, + {XKB_KEY_F12, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[24;8~"}, + {XKB_KEY_F12, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[24~"}, + + {XKB_KEY_F13, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;2P"}, + {XKB_KEY_F14, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;2Q"}, + {XKB_KEY_F15, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;2R"}, + {XKB_KEY_F16, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;2S"}, + {XKB_KEY_F17, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[15;2~"}, + {XKB_KEY_F18, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[17;2~"}, + {XKB_KEY_F19, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[18;2~"}, + {XKB_KEY_F20, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[19;2~"}, + {XKB_KEY_F21, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[20;2~"}, + {XKB_KEY_F22, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[21;2~"}, + {XKB_KEY_F23, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[23;2~"}, + {XKB_KEY_F24, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[24;2~"}, + {XKB_KEY_F25, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5P"}, + {XKB_KEY_F26, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5Q"}, + {XKB_KEY_F27, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5R"}, + {XKB_KEY_F28, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5S"}, + {XKB_KEY_F29, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[15;5~"}, + {XKB_KEY_F30, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[17;5~"}, + {XKB_KEY_F31, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[18;5~"}, + {XKB_KEY_F32, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[19;5~"}, + {XKB_KEY_F33, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[20;5~"}, + {XKB_KEY_F34, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[21;5~"}, + {XKB_KEY_F35, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[23;5~"}, + + /* Keypad */ + {XKB_KEY_KP_Up, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3A"}, + {XKB_KEY_KP_Up, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5A"}, + {XKB_KEY_KP_Up, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7A"}, + {XKB_KEY_KP_Up, MOD_ANY, CURSOR_KEYS_NORMAL, KEYPAD_DONTCARE, "\033[A"}, + {XKB_KEY_KP_Up, MOD_ANY, CURSOR_KEYS_APPLICATION, KEYPAD_DONTCARE, "\033OA"}, + + {XKB_KEY_KP_Down, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3B"}, + {XKB_KEY_KP_Down, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5B"}, + {XKB_KEY_KP_Down, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7B"}, + {XKB_KEY_KP_Down, MOD_ANY, CURSOR_KEYS_NORMAL, KEYPAD_DONTCARE, "\033[B"}, + {XKB_KEY_KP_Down, MOD_ANY, CURSOR_KEYS_APPLICATION, KEYPAD_DONTCARE, "\033OB"}, + + {XKB_KEY_KP_Right, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3C"}, + {XKB_KEY_KP_Right, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5C"}, + {XKB_KEY_KP_Right, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7C"}, + {XKB_KEY_KP_Right, MOD_ANY, CURSOR_KEYS_NORMAL, KEYPAD_DONTCARE, "\033[C"}, + {XKB_KEY_KP_Right, MOD_ANY, CURSOR_KEYS_APPLICATION, KEYPAD_DONTCARE, "\033OC"}, + + {XKB_KEY_KP_Left, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3D"}, + {XKB_KEY_KP_Left, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5D"}, + {XKB_KEY_KP_Left, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7D"}, + {XKB_KEY_KP_Left, MOD_ANY, CURSOR_KEYS_NORMAL, KEYPAD_DONTCARE, "\033[D"}, + {XKB_KEY_KP_Left, MOD_ANY, CURSOR_KEYS_APPLICATION, KEYPAD_DONTCARE, "\033OD"}, + + {XKB_KEY_KP_Home, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3H"}, + {XKB_KEY_KP_Home, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5H"}, + {XKB_KEY_KP_Home, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7H"}, + {XKB_KEY_KP_Home, MOD_ANY, CURSOR_KEYS_NORMAL, KEYPAD_DONTCARE, "\033[H"}, + {XKB_KEY_KP_Home, MOD_ANY, CURSOR_KEYS_APPLICATION, KEYPAD_DONTCARE, "\033OH"}, + + {XKB_KEY_KP_End, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;3F"}, + {XKB_KEY_KP_End, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;5F"}, + {XKB_KEY_KP_End, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[1;7F"}, + {XKB_KEY_KP_End, MOD_ANY, CURSOR_KEYS_NORMAL, KEYPAD_DONTCARE, "\033[F"}, + {XKB_KEY_KP_End, MOD_ANY, CURSOR_KEYS_APPLICATION, KEYPAD_DONTCARE, "\033OF"}, + + {XKB_KEY_KP_Insert, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[2;3~"}, + {XKB_KEY_KP_Insert, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[2;5~"}, + {XKB_KEY_KP_Insert, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[2;7~"}, + {XKB_KEY_KP_Insert, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[2~"}, + + {XKB_KEY_KP_Delete, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[3;3~"}, + {XKB_KEY_KP_Delete, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[3;5~"}, + {XKB_KEY_KP_Delete, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[3;7~"}, + {XKB_KEY_KP_Delete, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[3~"}, + + {XKB_KEY_KP_Page_Up, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;3~"}, + {XKB_KEY_KP_Page_Up, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;5~"}, + {XKB_KEY_KP_Page_Up, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;7~"}, + {XKB_KEY_KP_Page_Up, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5~"}, + + {XKB_KEY_KP_Page_Down, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;3~"}, + {XKB_KEY_KP_Page_Down, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;5~"}, + {XKB_KEY_KP_Page_Down, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[5;7~"}, + {XKB_KEY_KP_Page_Down, MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033[6~"}, + + {XKB_KEY_KP_Divide, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033Oo"}, + {XKB_KEY_KP_Divide, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O2o"}, + {XKB_KEY_KP_Divide, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O3o"}, + {XKB_KEY_KP_Divide, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O4o"}, + {XKB_KEY_KP_Divide, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O5o"}, + {XKB_KEY_KP_Divide, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O6o"}, + {XKB_KEY_KP_Divide, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O7o"}, + {XKB_KEY_KP_Divide, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O8o"}, + + {XKB_KEY_KP_Multiply, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033Oj"}, + {XKB_KEY_KP_Multiply, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O2j"}, + {XKB_KEY_KP_Multiply, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O3j"}, + {XKB_KEY_KP_Multiply, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O4j"}, + {XKB_KEY_KP_Multiply, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O5j"}, + {XKB_KEY_KP_Multiply, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O6j"}, + {XKB_KEY_KP_Multiply, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O7j"}, + {XKB_KEY_KP_Multiply, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O8j"}, + + {XKB_KEY_KP_Subtract, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033Om"}, + {XKB_KEY_KP_Subtract, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O2m"}, + {XKB_KEY_KP_Subtract, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O3m"}, + {XKB_KEY_KP_Subtract, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O4m"}, + {XKB_KEY_KP_Subtract, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O5m"}, + {XKB_KEY_KP_Subtract, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O6m"}, + {XKB_KEY_KP_Subtract, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O7m"}, + {XKB_KEY_KP_Subtract, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O8m"}, + + {XKB_KEY_KP_Add, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033Ok"}, + {XKB_KEY_KP_Add, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O2k"}, + {XKB_KEY_KP_Add, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O3k"}, + {XKB_KEY_KP_Add, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O4k"}, + {XKB_KEY_KP_Add, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O5k"}, + {XKB_KEY_KP_Add, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O6k"}, + {XKB_KEY_KP_Add, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O7k"}, + {XKB_KEY_KP_Add, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O8k"}, + + {XKB_KEY_KP_Separator, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033Ol"}, + {XKB_KEY_KP_Separator, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O2l"}, + {XKB_KEY_KP_Separator, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O3l"}, + {XKB_KEY_KP_Separator, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O4l"}, + {XKB_KEY_KP_Separator, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O5l"}, + {XKB_KEY_KP_Separator, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O6l"}, + {XKB_KEY_KP_Separator, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O7l"}, + {XKB_KEY_KP_Separator, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O8l"}, + + {XKB_KEY_KP_0, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033Op"}, + {XKB_KEY_KP_0, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O2p"}, + {XKB_KEY_KP_0, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O3p"}, + {XKB_KEY_KP_0, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O4p"}, + {XKB_KEY_KP_0, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O5p"}, + {XKB_KEY_KP_0, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O6p"}, + {XKB_KEY_KP_0, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O7p"}, + {XKB_KEY_KP_0, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O8p"}, + + {XKB_KEY_KP_1, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033Oq"}, + {XKB_KEY_KP_1, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O2q"}, + {XKB_KEY_KP_1, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O3q"}, + {XKB_KEY_KP_1, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O4q"}, + {XKB_KEY_KP_1, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O5q"}, + {XKB_KEY_KP_1, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O6q"}, + {XKB_KEY_KP_1, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O7q"}, + {XKB_KEY_KP_1, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O8q"}, + + {XKB_KEY_KP_2, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033Or"}, + {XKB_KEY_KP_2, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O2r"}, + {XKB_KEY_KP_2, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O3r"}, + {XKB_KEY_KP_2, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O4r"}, + {XKB_KEY_KP_2, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O5r"}, + {XKB_KEY_KP_2, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O6r"}, + {XKB_KEY_KP_2, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O7r"}, + {XKB_KEY_KP_2, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O8r"}, + + {XKB_KEY_KP_3, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033Os"}, + {XKB_KEY_KP_3, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O2s"}, + {XKB_KEY_KP_3, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O3s"}, + {XKB_KEY_KP_3, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O4s"}, + {XKB_KEY_KP_3, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O5s"}, + {XKB_KEY_KP_3, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O6s"}, + {XKB_KEY_KP_3, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O7s"}, + {XKB_KEY_KP_3, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O8s"}, + + {XKB_KEY_KP_4, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033Ot"}, + {XKB_KEY_KP_4, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O2t"}, + {XKB_KEY_KP_4, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O3t"}, + {XKB_KEY_KP_4, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O4t"}, + {XKB_KEY_KP_4, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O5t"}, + {XKB_KEY_KP_4, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O6t"}, + {XKB_KEY_KP_4, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O7t"}, + {XKB_KEY_KP_4, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O8t"}, + + {XKB_KEY_KP_5, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033Ou"}, + {XKB_KEY_KP_5, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O2u"}, + {XKB_KEY_KP_5, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O3u"}, + {XKB_KEY_KP_5, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O4u"}, + {XKB_KEY_KP_5, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O5u"}, + {XKB_KEY_KP_5, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O6u"}, + {XKB_KEY_KP_5, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O7u"}, + {XKB_KEY_KP_5, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O8u"}, + + {XKB_KEY_KP_6, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033Ov"}, + {XKB_KEY_KP_6, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O2v"}, + {XKB_KEY_KP_6, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O3v"}, + {XKB_KEY_KP_6, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O4v"}, + {XKB_KEY_KP_6, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O5v"}, + {XKB_KEY_KP_6, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O6v"}, + {XKB_KEY_KP_6, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O7v"}, + {XKB_KEY_KP_6, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O8v"}, + + {XKB_KEY_KP_7, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033Ow"}, + {XKB_KEY_KP_7, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O2w"}, + {XKB_KEY_KP_7, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O3w"}, + {XKB_KEY_KP_7, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O4w"}, + {XKB_KEY_KP_7, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O5w"}, + {XKB_KEY_KP_7, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O6w"}, + {XKB_KEY_KP_7, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O7w"}, + {XKB_KEY_KP_7, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O8w"}, + + {XKB_KEY_KP_8, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033Ox"}, + {XKB_KEY_KP_8, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O2x"}, + {XKB_KEY_KP_8, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O3x"}, + {XKB_KEY_KP_8, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O4x"}, + {XKB_KEY_KP_8, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O5x"}, + {XKB_KEY_KP_8, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O6x"}, + {XKB_KEY_KP_8, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O7x"}, + {XKB_KEY_KP_8, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O8x"}, + + {XKB_KEY_KP_9, MOD_NONE, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033Oy"}, + {XKB_KEY_KP_9, MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O2y"}, + {XKB_KEY_KP_9, MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O3y"}, + {XKB_KEY_KP_9, MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O4y"}, + {XKB_KEY_KP_9, MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O5y"}, + {XKB_KEY_KP_9, MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O6y"}, + {XKB_KEY_KP_9, MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O7y"}, + {XKB_KEY_KP_9, MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_APPLICATION, "\033O8y"}, +}; diff --git a/vt.c b/vt.c index 967d2827..b3f5e539 100644 --- a/vt.c +++ b/vt.c @@ -639,13 +639,11 @@ esc_dispatch(struct terminal *term, uint8_t final) break; case '=': - /* Other half of xterm's smkx */ - LOG_WARN("unimplemented: keypad mode change"); + term->keypad_keys_mode = KEYPAD_APPLICATION; break; case '>': - /* Other half of xterm's rmkx */ - LOG_WARN("unimplemented: keypad mode change"); + term->keypad_keys_mode = KEYPAD_NUMERICAL; break; default: