#ifndef _KEYSH_ #define _KEYSH_ #include enum keys { ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, A_UP, A_DOWN, A_RIGHT, A_LEFT, N_CENTER, N_UP, N_DOWN, N_RIGHT, N_LEFT, INS, SUPR, HOME, END, PAGE_UP, PAGE_DOWN, }; static const char* const key_names[] = { [ESC] = "ESC", [F1] = "F1", [F2] = "F2", [F3] = "F3", [F4] = "F4", [F5] = "F5", [F6] = "F6", [F7] = "F7", [F8] = "F8", [F9] = "F9", [F10] = "F10", [F11] = "F11", [F12] = "F12", [A_UP] = "A_UP", [A_DOWN] = "A_DOWN", [A_RIGHT] = "A_RIGHT", [N_CENTER] = "N_CENTER", [A_LEFT] = "A_LEFT", [N_UP] = "N_UP", [N_DOWN] = "N_DOWN", [N_RIGHT] = "N_RIGHT", [N_LEFT] = "N_LEFT", [INS] = "INS", [SUPR] = "SUPR", [HOME] = "HOME", [END] = "END", [PAGE_UP] = "PAGE_UP", [PAGE_DOWN] = "PAGE_DOWN", }; struct key_mapping { enum keys key; const char* sequences[3]; }; static const struct key_mapping key_mappings[] = { {ESC, {"\x1b", NULL}}, {F1, {"\x1bOP", "\x1b[[A", NULL}}, {F2, {"\x1bOQ", "\x1b[[B", NULL}}, {F3, {"\x1bOR", "\x1b[[C", NULL}}, {F4, {"\x1bOS", "\x1b[[D", NULL}}, {F5, {"\x1b[15~", "\x1b[[E", NULL}}, {F6, {"\x1b[17~", NULL}}, {F7, {"\x1b[18~", NULL}}, {F8, {"\x1b[19~", NULL}}, {F9, {"\x1b[20~", NULL}}, {F10, {"\x1b[21~", NULL}}, {F11, {"\x1b[23~", NULL}}, {F12, {"\x1b[24~", NULL}}, {A_UP, {"\x1b[A", NULL}}, {A_DOWN, {"\x1b[B", NULL}}, {A_RIGHT, {"\x1b[C", NULL}}, {A_LEFT, {"\x1b[D", NULL}}, {N_CENTER, {"\x1b[E", NULL}}, {N_UP, {"\x1bOA", NULL}}, {N_DOWN, {"\x1bOB", NULL}}, {N_RIGHT, {"\x1bOC", NULL}}, {N_LEFT, {"\x1bOD", NULL}}, {INS, {"\x1b[2~", NULL}}, {SUPR, {"\x1b[3~", NULL}}, {HOME, {"\x1b[H", NULL}}, {END, {"\x1b[F", NULL}}, {PAGE_UP, {"\x1b[5~", NULL}}, {PAGE_DOWN, {"\x1b[6~", NULL}}, }; #endif