Files
gKeyMapper/shared/keys.cpp
2026-10-17 03:53:51 +02:00

111 lines
2.8 KiB
C++

// gKeyMapper - canonical key name tables.
#include "keys.h"
#include <linux/input-event-codes.h>
namespace gkeymapper {
namespace {
const KeyDef kKeys[] = {
// Modifiers (also needed as key codes when a shortcut is replayed).
{"ctrl", KEY_LEFTCTRL},
{"control", KEY_LEFTCTRL},
{"alt", KEY_LEFTALT},
{"shift", KEY_LEFTSHIFT},
{"super", KEY_LEFTMETA},
{"meta", KEY_LEFTMETA},
{"altgr", KEY_RIGHTALT},
{"iso_level3_shift", KEY_RIGHTALT},
// Letters.
{"a", KEY_A}, {"b", KEY_B}, {"c", KEY_C}, {"d", KEY_D},
{"e", KEY_E}, {"f", KEY_F}, {"g", KEY_G}, {"h", KEY_H},
{"i", KEY_I}, {"j", KEY_J}, {"k", KEY_K}, {"l", KEY_L},
{"m", KEY_M}, {"n", KEY_N}, {"o", KEY_O}, {"p", KEY_P},
{"q", KEY_Q}, {"r", KEY_R}, {"s", KEY_S}, {"t", KEY_T},
{"u", KEY_U}, {"v", KEY_V}, {"w", KEY_W}, {"x", KEY_X},
{"y", KEY_Y}, {"z", KEY_Z},
// Digits.
{"0", KEY_0}, {"1", KEY_1}, {"2", KEY_2}, {"3", KEY_3}, {"4", KEY_4},
{"5", KEY_5}, {"6", KEY_6}, {"7", KEY_7}, {"8", KEY_8}, {"9", KEY_9},
// Function keys.
{"f1", KEY_F1}, {"f2", KEY_F2}, {"f3", KEY_F3}, {"f4", KEY_F4},
{"f5", KEY_F5}, {"f6", KEY_F6}, {"f7", KEY_F7}, {"f8", KEY_F8},
{"f9", KEY_F9}, {"f10", KEY_F10}, {"f11", KEY_F11}, {"f12", KEY_F12},
// Editing / navigation.
{"escape", KEY_ESC},
{"tab", KEY_TAB},
{"space", KEY_SPACE},
{"return", KEY_ENTER},
{"backspace", KEY_BACKSPACE},
{"delete", KEY_DELETE},
{"insert", KEY_INSERT},
{"home", KEY_HOME},
{"end", KEY_END},
{"page_up", KEY_PAGEUP},
{"page_down", KEY_PAGEDOWN},
{"up", KEY_UP},
{"down", KEY_DOWN},
{"left", KEY_LEFT},
{"right", KEY_RIGHT},
{"caps_lock", KEY_CAPSLOCK},
// Punctuation.
{"minus", KEY_MINUS},
{"equal", KEY_EQUAL},
{"bracketleft", KEY_LEFTBRACE},
{"bracketright", KEY_RIGHTBRACE},
{"semicolon", KEY_SEMICOLON},
{"apostrophe", KEY_APOSTROPHE},
{"grave", KEY_GRAVE},
{"backslash", KEY_BACKSLASH},
{"comma", KEY_COMMA},
{"period", KEY_DOT},
{"slash", KEY_SLASH},
};
} // namespace
const KeyDef* key_definitions() {
return kKeys;
}
int key_definition_count() {
return static_cast<int>(sizeof(kKeys) / sizeof(kKeys[0]));
}
int linux_key_code(const std::string& name) {
for (const KeyDef& def : kKeys) {
if (name == def.name) {
return def.linux_code;
}
}
return -1;
}
unsigned modifier_bit(const std::string& name) {
if (name == "ctrl" || name == "control") {
return kModCtrl;
}
if (name == "alt") {
return kModAlt;
}
if (name == "shift") {
return kModShift;
}
if (name == "super" || name == "meta") {
return kModSuper;
}
if (name == "altgr" || name == "iso_level3_shift") {
return kModAltGr;
}
return kModNone;
}
} // namespace gkeymapper