111 lines
2.8 KiB
C++
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
|