#pragma once #include "common/string.h" #include "common/types.h" #include #include #include #include #include #include namespace EvDevKeyNames { static const std::map s_evdev_key_names = {{KEY_ESC, "Escape"}, {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, "Return"}, {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_ROTATE_DISPLAY, "Rotate_display"}, {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_AUTO, "Brightness_auto"}, {KEY_BRIGHTNESS_ZERO, "Brightness_zero"}, {KEY_DISPLAY_OFF, "Display_off"}, {KEY_WWAN, "Wwan"}, {KEY_WIMAX, "Wimax"}, {KEY_RFKILL, "Rfkill"}, {KEY_MICMUTE, "Micmute"}}; const char* GetKeyName(int key) { const auto it = s_evdev_key_names.find(key); return it == s_evdev_key_names.end() ? nullptr : it->second; } std::optional GetKeyCodeForName(const std::string_view key_name) { for (const auto& it : s_evdev_key_names) { if (key_name == it.second) return it.first; } return std::nullopt; } } // namespace EvDevKeyNames