local keys = { -- Mouse buttons MOUSE_BUTTON_1 = 0, MOUSE_BUTTON_2 = 1, MOUSE_BUTTON_3 = 2, MOUSE_BUTTON_4 = 3, MOUSE_BUTTON_5 = 4, MOUSE_BUTTON_6 = 5, MOUSE_BUTTON_7 = 6, MOUSE_BUTTON_8 = 7, MOUSE_BUTTON_LAST = 7, MOUSE_BUTTON_LEFT = 0, MOUSE_BUTTON_RIGHT = 1, MOUSE_BUTTON_MIDDLE = 2, MOUSE_BUTTON_XBUTTON1 = 4, MOUSE_BUTTON_XBUTTON2 = 5, -- Keyboard buttons KEY_SPACE = 32, KEY_APOSTROPHE = 39, KEY_COMMA = 44, KEY_MINUS = 45, KEY_PERIOD = 46, KEY_SLASH = 47, KEY_0 = 48, KEY_1 = 49, KEY_2 = 50, KEY_3 = 51, KEY_4 = 52, KEY_5 = 53, KEY_6 = 54, KEY_7 = 55, KEY_8 = 56, KEY_9 = 57, KEY_SEMICOLON = 59, KEY_EQUAL = 61, KEY_A = 65, KEY_B = 66, KEY_C = 67, KEY_D = 68, KEY_E = 69, KEY_F = 70, KEY_G = 71, KEY_H = 72, KEY_I = 73, KEY_J = 74, KEY_K = 75, KEY_L = 76, KEY_M = 77, KEY_N = 78, KEY_O = 79, KEY_P = 80, KEY_Q = 81, KEY_R = 82, KEY_S = 83, KEY_T = 84, KEY_U = 85, KEY_V = 86, KEY_W = 87, KEY_X = 88, KEY_Y = 89, KEY_Z = 90, KEY_LEFT_BRACKET = 91, KEY_BACKSLASH = 92, KEY_RIGHT_BRACKET = 93, KEY_GRAVE_ACCENT = 96, KEY_WORLD_1 = 161, KEY_WORLD_2 = 162, KEY_ESCAPE = 256, KEY_ENTER = 257, KEY_TAB = 258, KEY_BACKSPACE = 259, KEY_INSERT = 260, KEY_DELETE = 261, KEY_RIGHT = 262, KEY_LEFT = 263, KEY_DOWN = 264, KEY_UP = 265, KEY_PAGE_UP = 266, KEY_PAGE_DOWN = 267, KEY_HOME = 268, KEY_END = 269, KEY_CAPS_LOCK = 280, KEY_SCROLL_LOCK = 281, KEY_NUM_LOCK = 282, KEY_PRINT_SCREEN = 283, KEY_PAUSE = 284, KEY_F1 = 290, KEY_F2 = 291, KEY_F3 = 292, KEY_F4 = 293, KEY_F5 = 294, KEY_F6 = 295, KEY_F7 = 296, KEY_F8 = 297, KEY_F9 = 298, KEY_F10 = 299, KEY_F11 = 300, KEY_F12 = 301, KEY_F13 = 302, KEY_F14 = 303, KEY_F15 = 304, KEY_F16 = 305, KEY_F17 = 306, KEY_F18 = 307, KEY_F19 = 308, KEY_F20 = 309, KEY_F21 = 310, KEY_F22 = 311, KEY_F23 = 312, KEY_F24 = 313, KEY_F25 = 314, KEY_KP_0 = 320, KEY_KP_1 = 321, KEY_KP_2 = 322, KEY_KP_3 = 323, KEY_KP_4 = 324, KEY_KP_5 = 325, KEY_KP_6 = 326, KEY_KP_7 = 327, KEY_KP_8 = 328, KEY_KP_9 = 329, KEY_KP_DECIMAL = 330, KEY_KP_DIVIDE = 331, KEY_KP_MULTIPLY = 332, KEY_KP_SUBTRACT = 333, KEY_KP_ADD = 334, KEY_KP_ENTER = 335, KEY_KP_EQUAL = 336, KEY_LEFT_SHIFT = 340, KEY_LEFT_CONTROL = 341, KEY_LEFT_ALT = 342, KEY_LEFT_SUPER = 343, KEY_RIGHT_SHIFT = 344, KEY_RIGHT_CONTROL = 345, KEY_RIGHT_ALT = 346, KEY_RIGHT_SUPER = 347, KEY_MENU = 348, KEY_LAST = 348 } local names = { -- Mouse Buttons [keys.MOUSE_BUTTON_LEFT] = 'Left Button', [keys.MOUSE_BUTTON_RIGHT] = 'Right Button', [keys.MOUSE_BUTTON_1] = 'Left Button', [keys.MOUSE_BUTTON_2] = 'Right Button', [keys.MOUSE_BUTTON_XBUTTON1] = 'X Button 1', [keys.MOUSE_BUTTON_XBUTTON2] = 'X Button 2', [keys.MOUSE_BUTTON_MIDDLE] = 'Middle Button', [keys.MOUSE_BUTTON_3] = 'Middle Button', [keys.MOUSE_BUTTON_4] = 'X Button 1', [keys.MOUSE_BUTTON_5] = 'X Button 2', [keys.MOUSE_BUTTON_6] = 'X Button 3', [keys.MOUSE_BUTTON_7] = 'X Button 4', [keys.MOUSE_BUTTON_8] = 'X Button 5', [keys.MOUSE_BUTTON_LAST] = 'X Button 5', -- Keyboard [keys.KEY_SPACE] = 'Space', [keys.KEY_COMMA] = ',', [keys.KEY_MINUS] = '-', [keys.KEY_PERIOD] = '.', [keys.KEY_SLASH] = '/', [keys.KEY_0] = '0', [keys.KEY_1] = '1', [keys.KEY_2] = '2', [keys.KEY_3] = '3', [keys.KEY_4] = '4', [keys.KEY_5] = '5', [keys.KEY_6] = '6', [keys.KEY_7] = '7', [keys.KEY_8] = '8', [keys.KEY_9] = '9', [keys.KEY_9] = '9', [keys.KEY_SEMICOLON] = ';', [keys.KEY_EQUAL] = '=', [keys.KEY_A] = 'A', [keys.KEY_B] = 'B', [keys.KEY_C] = 'C', [keys.KEY_D] = 'D', [keys.KEY_E] = 'E', [keys.KEY_F] = 'F', [keys.KEY_G] = 'G', [keys.KEY_H] = 'H', [keys.KEY_I] = 'I', [keys.KEY_J] = 'J', [keys.KEY_K] = 'K', [keys.KEY_L] = 'L', [keys.KEY_M] = 'M', [keys.KEY_N] = 'N', [keys.KEY_O] = 'O', [keys.KEY_P] = 'P', [keys.KEY_Q] = 'Q', [keys.KEY_R] = 'R', [keys.KEY_S] = 'S', [keys.KEY_T] = 'T', [keys.KEY_U] = 'U', [keys.KEY_V] = 'V', [keys.KEY_W] = 'W', [keys.KEY_X] = 'X', [keys.KEY_Y] = 'Y', [keys.KEY_Z] = 'Z', [keys.KEY_LEFT_BRACKET] = '[', [keys.KEY_BACKSLASH] = '\\', [keys.KEY_GRAVE_ACCENT] = '`', [keys.KEY_WORLD_1] = '', [keys.KEY_WORLD_2] = '', [keys.KEY_ESCAPE] = 'Escape', [keys.KEY_ENTER] = 'Enter', [keys.KEY_TAB] = 'Tab', [keys.KEY_BACKSPACE] = 'Back Space', [keys.KEY_INSERT] = 'Insert', [keys.KEY_DELETE] = 'Delete', [keys.KEY_RIGHT] = 'Arrow Right', [keys.KEY_LEFT] = 'Arrow Left', [keys.KEY_DOWN] = 'Arrow Down', [keys.KEY_UP] = 'Arrow Up', [keys.KEY_PAGE_UP] = 'Page Up', [keys.KEY_PAGE_DOWN] = 'Page Down', [keys.KEY_HOME] = 'Home', [keys.KEY_END] = 'End', [keys.KEY_CAPS_LOCK] = 'Caps Lock', [keys.KEY_SCROLL_LOCK] = 'Scroll Lock', [keys.KEY_NUM_LOCK] = 'Num Lock', [keys.KEY_PRINT_SCREEN] = 'Print Screen', [keys.KEY_PAUSE] = 'Pause', -- F [keys.KEY_F1] = 'F1', [keys.KEY_F2] = 'F2', [keys.KEY_F3] = 'F3', [keys.KEY_F4] = 'F4', [keys.KEY_F5] = 'F5', [keys.KEY_F6] = 'F6', [keys.KEY_F7] = 'F7', [keys.KEY_F8] = 'F8', [keys.KEY_F9] = 'F9', [keys.KEY_F10] = 'F10', [keys.KEY_F11] = 'F11', [keys.KEY_F12] = 'F12', [keys.KEY_F13] = 'F13', [keys.KEY_F14] = 'F14', [keys.KEY_F15] = 'F15', [keys.KEY_F16] = 'F16', [keys.KEY_F17] = 'F17', [keys.KEY_F18] = 'F18', [keys.KEY_F19] = 'F19', [keys.KEY_F20] = 'F20', [keys.KEY_F21] = 'F21', [keys.KEY_F22] = 'F22', [keys.KEY_F23] = 'F23', [keys.KEY_F24] = 'F24', [keys.KEY_F25] = 'F25', -- Numpad numbers [keys.KEY_KP_0] = 'Numpad 0', [keys.KEY_KP_1] = 'Numpad 1', [keys.KEY_KP_2] = 'Numpad 2', [keys.KEY_KP_3] = 'Numpad 3', [keys.KEY_KP_4] = 'Numpad 4', [keys.KEY_KP_5] = 'Numpad 5', [keys.KEY_KP_6] = 'Numpad 6', [keys.KEY_KP_7] = 'Numpad 7', [keys.KEY_KP_8] = 'Numpad 8', [keys.KEY_KP_9] = 'Numpad 9', [keys.KEY_KP_DECIMAL] = 'Numpad .', [keys.KEY_KP_DIVIDE] = 'Numpad /', [keys.KEY_KP_MULTIPLY] = 'Numpad *', [keys.KEY_KP_SUBTRACT] = 'Numpad -', [keys.KEY_KP_ADD] = 'Numpad +', [keys.KEY_KP_ENTER] = 'Numpad Enter', [keys.KEY_KP_EQUAL] = 'Numpad =', [keys.KEY_LEFT_SHIFT] = 'Left Shift', [keys.KEY_LEFT_CONTROL] = 'Left Control', [keys.KEY_LEFT_ALT] = 'Left Alt', [keys.KEY_LEFT_SUPER] = 'Left Super', [keys.KEY_RIGHT_SHIFT] = 'Right Shift', [keys.KEY_RIGHT_CONTROL] = 'Right Control', [keys.KEY_RIGHT_ALT] = 'Right Alt', [keys.KEY_RIGHT_SUPER] = 'Right Super', [keys.KEY_MENU] = 'Menu', [keys.KEY_LAST] = 'Menu', } keys.key_names = names --- @param vkey string --- @return string function keys.id_to_name(vkey) local name = names[vkey] if type(name) == 'table' then return name[1] end return name end --- @param keyname string --- @param case_sensitive boolean --- @return number? function keys.name_to_id(keyname, case_sensitive) if not case_sensitive then keyname = string.upper(keyname) end for id, v in pairs(names) do if type(v) == 'table' then for _, v2 in pairs(v) do v2 = (case_sensitive) and v2 or string.upper(v2) if v2 == keyname then return id end end else local name = (case_sensitive) and v or string.upper(v) if name == keyname then return id end end end return nil end return keys