610 lines
30 KiB
Python
610 lines
30 KiB
Python
# coding: utf-8
|
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
class Keycode:
|
|
|
|
masked_keycodes = set()
|
|
recorder_alias_to_keycode = dict()
|
|
qmk_id_to_keycode = dict()
|
|
|
|
def __init__(self, code, qmk_id, label, tooltip=None, masked=False, printable=None, recorder_alias=None,
|
|
alias=None):
|
|
self.code = code
|
|
self.qmk_id = qmk_id
|
|
self.qmk_id_to_keycode[qmk_id] = self
|
|
self.label = label
|
|
self.tooltip = tooltip
|
|
# whether this keycode requires another sub-keycode
|
|
self.masked = masked
|
|
|
|
# if this is printable keycode, what character does it normally output (i.e. non-shifted state)
|
|
self.printable = printable
|
|
|
|
self.alias = [self.qmk_id]
|
|
if alias:
|
|
self.alias += alias
|
|
|
|
if recorder_alias:
|
|
for alias in recorder_alias:
|
|
if alias in self.recorder_alias_to_keycode:
|
|
raise RuntimeError("Misconfigured: two keycodes claim the same alias {}".format(alias))
|
|
self.recorder_alias_to_keycode[alias] = self
|
|
|
|
if masked:
|
|
self.masked_keycodes.add(code)
|
|
|
|
@classmethod
|
|
def find(cls, code):
|
|
for keycode in KEYCODES:
|
|
if keycode.code == code:
|
|
return keycode
|
|
return None
|
|
|
|
@classmethod
|
|
def find_outer_keycode(cls, code):
|
|
"""
|
|
Finds outer keycode, i.e. if it is masked like 0x5Fxx, just return the 0x5F00 portion
|
|
"""
|
|
if cls.is_mask(code):
|
|
code = code & 0xFF00
|
|
return cls.find(code)
|
|
|
|
@classmethod
|
|
def find_by_recorder_alias(cls, alias):
|
|
return cls.recorder_alias_to_keycode.get(alias)
|
|
|
|
@classmethod
|
|
def find_by_qmk_id(cls, qmk_id):
|
|
return cls.qmk_id_to_keycode.get(qmk_id)
|
|
|
|
@classmethod
|
|
def is_mask(cls, code):
|
|
return (code & 0xFF00) in cls.masked_keycodes
|
|
|
|
@classmethod
|
|
def label(cls, code):
|
|
keycode = cls.find_outer_keycode(code)
|
|
if keycode is None:
|
|
return "0x{:X}".format(code)
|
|
return keycode.label
|
|
|
|
@classmethod
|
|
def tooltip(cls, code):
|
|
keycode = cls.find_outer_keycode(code)
|
|
if keycode is None:
|
|
return None
|
|
tooltip = keycode.qmk_id
|
|
if keycode.tooltip:
|
|
tooltip = "{}: {}".format(tooltip, keycode.tooltip)
|
|
return tooltip
|
|
|
|
@classmethod
|
|
def serialize(cls, code):
|
|
if not cls.is_mask(code):
|
|
kc = cls.find(code)
|
|
if kc is not None:
|
|
return kc.qmk_id
|
|
elif cls.is_mask(code):
|
|
outer = cls.find_outer_keycode(code)
|
|
inner = cls.find(code & 0xFF)
|
|
if outer is not None and inner is not None:
|
|
return outer.qmk_id.replace("kc", inner.qmk_id)
|
|
return code
|
|
|
|
@classmethod
|
|
def deserialize(cls, val, reraise=False):
|
|
from any_keycode import AnyKeycode
|
|
|
|
if isinstance(val, int):
|
|
return val
|
|
if "(" not in val and val in cls.qmk_id_to_keycode:
|
|
return cls.qmk_id_to_keycode[val].code
|
|
anykc = AnyKeycode()
|
|
try:
|
|
return anykc.decode(val)
|
|
except Exception:
|
|
if reraise:
|
|
raise
|
|
return 0
|
|
|
|
|
|
K = Keycode
|
|
|
|
KEYCODES_SPECIAL = [
|
|
K(0x00, "KC_NO", ""),
|
|
K(0x01, "KC_TRNS", "▽", alias=["KC_TRANSPARENT"]),
|
|
]
|
|
|
|
KEYCODES_BASIC = [
|
|
K(0x04, "KC_A", "A", printable="a", recorder_alias=["a"]),
|
|
K(0x05, "KC_B", "B", printable="b", recorder_alias=["b"]),
|
|
K(0x06, "KC_C", "C", printable="c", recorder_alias=["c"]),
|
|
K(0x07, "KC_D", "D", printable="d", recorder_alias=["d"]),
|
|
K(0x08, "KC_E", "E", printable="e", recorder_alias=["e"]),
|
|
K(0x09, "KC_F", "F", printable="f", recorder_alias=["f"]),
|
|
K(0x0A, "KC_G", "G", printable="g", recorder_alias=["g"]),
|
|
K(0x0B, "KC_H", "H", printable="h", recorder_alias=["h"]),
|
|
K(0x0C, "KC_I", "I", printable="i", recorder_alias=["i"]),
|
|
K(0x0D, "KC_J", "J", printable="j", recorder_alias=["j"]),
|
|
K(0x0E, "KC_K", "K", printable="k", recorder_alias=["k"]),
|
|
K(0x0F, "KC_L", "L", printable="l", recorder_alias=["l"]),
|
|
K(0x10, "KC_M", "M", printable="m", recorder_alias=["m"]),
|
|
K(0x11, "KC_N", "N", printable="n", recorder_alias=["n"]),
|
|
K(0x12, "KC_O", "O", printable="o", recorder_alias=["o"]),
|
|
K(0x13, "KC_P", "P", printable="p", recorder_alias=["p"]),
|
|
K(0x14, "KC_Q", "Q", printable="q", recorder_alias=["q"]),
|
|
K(0x15, "KC_R", "R", printable="r", recorder_alias=["r"]),
|
|
K(0x16, "KC_S", "S", printable="s", recorder_alias=["s"]),
|
|
K(0x17, "KC_T", "T", printable="t", recorder_alias=["t"]),
|
|
K(0x18, "KC_U", "U", printable="u", recorder_alias=["u"]),
|
|
K(0x19, "KC_V", "V", printable="v", recorder_alias=["v"]),
|
|
K(0x1A, "KC_W", "W", printable="w", recorder_alias=["w"]),
|
|
K(0x1B, "KC_X", "X", printable="x", recorder_alias=["x"]),
|
|
K(0x1C, "KC_Y", "Y", printable="y", recorder_alias=["y"]),
|
|
K(0x1D, "KC_Z", "Z", printable="z", recorder_alias=["z"]),
|
|
K(0x1E, "KC_1", "!\n1", printable="1", recorder_alias=["1"]),
|
|
K(0x1F, "KC_2", "@\n2", printable="2", recorder_alias=["2"]),
|
|
K(0x20, "KC_3", "#\n3", printable="3", recorder_alias=["3"]),
|
|
K(0x21, "KC_4", "$\n4", printable="4", recorder_alias=["4"]),
|
|
K(0x22, "KC_5", "%\n5", printable="5", recorder_alias=["5"]),
|
|
K(0x23, "KC_6", "^\n6", printable="6", recorder_alias=["6"]),
|
|
K(0x24, "KC_7", "&\n7", printable="7", recorder_alias=["7"]),
|
|
K(0x25, "KC_8", "*\n8", printable="8", recorder_alias=["8"]),
|
|
K(0x26, "KC_9", "(\n9", printable="9", recorder_alias=["9"]),
|
|
K(0x27, "KC_0", ")\n0", printable="0", recorder_alias=["0"]),
|
|
K(0x28, "KC_ENTER", "Enter", recorder_alias=["enter"], alias=["KC_ENT"]),
|
|
K(0x29, "KC_ESCAPE", "Esc", recorder_alias=["esc"], alias=["KC_ESC"]),
|
|
K(0x2A, "KC_BSPACE", "Bksp", recorder_alias=["backspace"], alias=["KC_BSPC"]),
|
|
K(0x2B, "KC_TAB", "Tab", recorder_alias=["tab"]),
|
|
K(0x2C, "KC_SPACE", "Space", recorder_alias=["space"], alias=["KC_SPC"]),
|
|
K(0x2D, "KC_MINUS", "_\n-", printable="-", recorder_alias=["-"], alias=["KC_MINS"]),
|
|
K(0x2E, "KC_EQUAL", "+\n=", printable="=", recorder_alias=["="], alias=["KC_EQL"]),
|
|
K(0x2F, "KC_LBRACKET", "{\n[", printable="[", recorder_alias=["["], alias=["KC_LBRC"]),
|
|
K(0x30, "KC_RBRACKET", "}\n]", printable="]", recorder_alias=["]"], alias=["KC_RBRC"]),
|
|
K(0x31, "KC_BSLASH", "|\n\\", printable="\\", recorder_alias=["\\"], alias=["KC_BSLS"]),
|
|
K(0x33, "KC_SCOLON", ":\n;", printable=";", recorder_alias=[";"], alias=["KC_SCLN"]),
|
|
K(0x34, "KC_QUOTE", "\"\n'", printable="'", recorder_alias=["'"], alias=["KC_QUOT"]),
|
|
K(0x35, "KC_GRAVE", "~\n`", printable="`", recorder_alias=["`"], alias=["KC_GRV", "KC_ZKHK"]),
|
|
K(0x36, "KC_COMMA", "<\n,", printable=",", recorder_alias=[","], alias=["KC_COMM"]),
|
|
K(0x37, "KC_DOT", ">\n.", printable=".", recorder_alias=["."]),
|
|
K(0x38, "KC_SLASH", "?\n/", printable="/", recorder_alias=["/"], alias=["KC_SLSH"]),
|
|
K(0x39, "KC_CAPSLOCK", "Caps\nLock", recorder_alias=["caps lock"], alias=["KC_CLCK", "KC_CAPS"]),
|
|
K(0x3A, "KC_F1", "F1", recorder_alias=["f1"]),
|
|
K(0x3B, "KC_F2", "F2", recorder_alias=["f2"]),
|
|
K(0x3C, "KC_F3", "F3", recorder_alias=["f3"]),
|
|
K(0x3D, "KC_F4", "F4", recorder_alias=["f4"]),
|
|
K(0x3E, "KC_F5", "F5", recorder_alias=["f5"]),
|
|
K(0x3F, "KC_F6", "F6", recorder_alias=["f6"]),
|
|
K(0x40, "KC_F7", "F7", recorder_alias=["f7"]),
|
|
K(0x41, "KC_F8", "F8", recorder_alias=["f8"]),
|
|
K(0x42, "KC_F9", "F9", recorder_alias=["f9"]),
|
|
K(0x43, "KC_F10", "F10", recorder_alias=["f10"]),
|
|
K(0x44, "KC_F11", "F11", recorder_alias=["f11"]),
|
|
K(0x45, "KC_F12", "F12", recorder_alias=["f12"]),
|
|
K(0x46, "KC_PSCREEN", "Print\nScreen", alias=["KC_PSCR"]),
|
|
K(0x47, "KC_SCROLLLOCK", "Scroll\nLock", recorder_alias=["scroll lock"], alias=["KC_SLCK", "KC_BRMD"]),
|
|
K(0x48, "KC_PAUSE", "Pause", recorder_alias=["pause", "break"], alias=["KC_PAUS", "KC_BRK", "KC_BRMU"]),
|
|
K(0x49, "KC_INSERT", "Insert", recorder_alias=["insert"], alias=["KC_INS"]),
|
|
K(0x4A, "KC_HOME", "Home", recorder_alias=["home"]),
|
|
K(0x4B, "KC_PGUP", "Page\nUp", recorder_alias=["page up"]),
|
|
K(0x4C, "KC_DELETE", "Del", recorder_alias=["delete"], alias=["KC_DEL"]),
|
|
K(0x4D, "KC_END", "End", recorder_alias=["end"]),
|
|
K(0x4E, "KC_PGDOWN", "Page\nDown", recorder_alias=["page down"], alias=["KC_PGDN"]),
|
|
K(0x4F, "KC_RIGHT", "Right", recorder_alias=["right"], alias=["KC_RGHT"]),
|
|
K(0x50, "KC_LEFT", "Left", recorder_alias=["left"]),
|
|
K(0x51, "KC_DOWN", "Down", recorder_alias=["down"]),
|
|
K(0x52, "KC_UP", "Up", recorder_alias=["up"]),
|
|
K(0x53, "KC_NUMLOCK", "Num\nLock", recorder_alias=["num lock"], alias=["KC_NLCK"]),
|
|
K(0x54, "KC_KP_SLASH", "/", alias=["KC_PSLS"]),
|
|
K(0x55, "KC_KP_ASTERISK", "*", alias=["KC_PAST"]),
|
|
K(0x56, "KC_KP_MINUS", "-", alias=["KC_PMNS"]),
|
|
K(0x57, "KC_KP_PLUS", "+", alias=["KC_PPLS"]),
|
|
K(0x58, "KC_KP_ENTER", "Num\nEnter", alias=["KC_PENT"]),
|
|
K(0x59, "KC_KP_1", "1", alias=["KC_P1"]),
|
|
K(0x5A, "KC_KP_2", "2", alias=["KC_P2"]),
|
|
K(0x5B, "KC_KP_3", "3", alias=["KC_P3"]),
|
|
K(0x5C, "KC_KP_4", "4", alias=["KC_P4"]),
|
|
K(0x5D, "KC_KP_5", "5", alias=["KC_P5"]),
|
|
K(0x5E, "KC_KP_6", "6", alias=["KC_P6"]),
|
|
K(0x5F, "KC_KP_7", "7", alias=["KC_P7"]),
|
|
K(0x60, "KC_KP_8", "8", alias=["KC_P8"]),
|
|
K(0x61, "KC_KP_9", "9", alias=["KC_P9"]),
|
|
K(0x62, "KC_KP_0", "0", alias=["KC_P0"]),
|
|
K(0x63, "KC_KP_DOT", ".", alias=["KC_PDOT"]),
|
|
K(0x65, "KC_APPLICATION", "Menu", recorder_alias=["menu", "left menu", "right menu"], alias=["KC_APP"]),
|
|
K(0x67, "KC_KP_EQUAL", "=", alias=["KC_PEQL"]),
|
|
K(0x85, "KC_KP_COMMA", ",", alias=["KC_PCMM"]),
|
|
|
|
K(0xE0, "KC_LCTRL", "LCtrl", recorder_alias=["left ctrl", "ctrl"], alias=["KC_LCTL"]),
|
|
K(0xE1, "KC_LSHIFT", "LShift", recorder_alias=["left shift", "shift"], alias=["KC_LSFT"]),
|
|
K(0xE2, "KC_LALT", "LAlt", recorder_alias=["alt"], alias=["KC_LOPT"]),
|
|
K(0xE3, "KC_LGUI", "LGui", recorder_alias=["left windows", "windows"], alias=["KC_LCMD", "KC_LWIN"]),
|
|
K(0xE4, "KC_RCTRL", "RCtrl", recorder_alias=["right ctrl"], alias=["KC_RCTL"]),
|
|
K(0xE5, "KC_RSHIFT", "RShift", recorder_alias=["right shift"], alias=["KC_RSFT"]),
|
|
K(0xE6, "KC_RALT", "RAlt", alias=["KC_ALGR", "KC_ROPT"]),
|
|
K(0xE7, "KC_RGUI", "RGui", recorder_alias=["right windows"], alias=["KC_RCMD", "KC_RWIN"]),
|
|
]
|
|
|
|
KEYCODES_SHIFTED = [
|
|
K(0x235, "KC_TILD", "~"),
|
|
K(0x21E, "KC_EXLM", "!"),
|
|
K(0x21F, "KC_AT", "@"),
|
|
K(0x220, "KC_HASH", "#"),
|
|
K(0x221, "KC_DLR", "$"),
|
|
K(0x222, "KC_PERC", "%"),
|
|
K(0x223, "KC_CIRC", "^"),
|
|
K(0x224, "KC_AMPR", "&"),
|
|
K(0x225, "KC_ASTR", "*"),
|
|
K(0x226, "KC_LPRN", "("),
|
|
K(0x227, "KC_RPRN", ")"),
|
|
K(0x22D, "KC_UNDS", "_"),
|
|
K(0x22E, "KC_PLUS", "+"),
|
|
K(0x22F, "KC_LCBR", "{"),
|
|
K(0x230, "KC_RCBR", "}"),
|
|
K(0x236, "KC_LT", "<"),
|
|
K(0x237, "KC_GT", ">"),
|
|
K(0x233, "KC_COLN", ":"),
|
|
K(0x231, "KC_PIPE", "|"),
|
|
K(0x238, "KC_QUES", "?"),
|
|
K(0x234, "KC_DQUO", '"'),
|
|
]
|
|
|
|
KEYCODES_ISO = [
|
|
K(0x32, "KC_NONUS_HASH", "~\n#", "Non-US # and ~", alias=["KC_NUHS"]),
|
|
K(0x64, "KC_NONUS_BSLASH", "|\n\\", "Non-US \\ and |", alias=["KC_NUBS"]),
|
|
K(0x87, "KC_RO", "_\n\\", "JIS \\ and _", alias=["KC_INT1"]),
|
|
K(0x88, "KC_KANA", "カタカナ\nひらがな", "JIS Katakana/Hiragana", alias=["KC_INT2"]),
|
|
K(0x89, "KC_JYEN", "|\n¥", alias=["KC_INT3"]),
|
|
K(0x8A, "KC_HENK", "変換", "JIS Henkan", alias=["KC_INT4"]),
|
|
K(0x8B, "KC_MHEN", "無変換", "JIS Muhenkan", alias=["KC_INT5"]),
|
|
K(0x90, "KC_LANG1", "한영\nかな", "Korean Han/Yeong / JP Mac Kana", alias=["KC_HAEN"]),
|
|
K(0x91, "KC_LANG2", "漢字\n英数", "Korean Hanja / JP Mac Eisu", alias=["KC_HANJ"]),
|
|
]
|
|
|
|
KEYCODES_LAYERS = []
|
|
|
|
QK_LAYER_TAP = 0x4000
|
|
QK_ONE_SHOT_MOD = 0x5500
|
|
QK_MOD_TAP = 0x6000
|
|
|
|
MOD_LCTL = 0x01
|
|
MOD_LSFT = 0x02
|
|
MOD_LALT = 0x04
|
|
MOD_LGUI = 0x08
|
|
MOD_RCTL = 0x11
|
|
MOD_RSFT = 0x12
|
|
MOD_RALT = 0x14
|
|
MOD_RGUI = 0x18
|
|
|
|
MOD_HYPR = 0xF
|
|
MOD_MEH = 0x7
|
|
|
|
QK_LCTL = 0x0100
|
|
QK_LSFT = 0x0200
|
|
QK_LALT = 0x0400
|
|
QK_LGUI = 0x0800
|
|
QK_RCTL = 0x1100
|
|
QK_RSFT = 0x1200
|
|
QK_RALT = 0x1400
|
|
QK_RGUI = 0x1800
|
|
|
|
|
|
def MT(mod):
|
|
return QK_MOD_TAP | (mod << 8)
|
|
|
|
|
|
def LT(layer):
|
|
return QK_LAYER_TAP | (((layer) & 0xF) << 8)
|
|
|
|
|
|
RESET_KEYCODE = 0x5C00
|
|
|
|
|
|
KEYCODES_QUANTUM = [
|
|
K(RESET_KEYCODE, "RESET", "Reset", "Reboot to bootloader"),
|
|
K(QK_ONE_SHOT_MOD | MOD_LSFT, "OSM(MOD_LSFT)", "OSM\nLSft", "Enable Left Shift for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_LCTL, "OSM(MOD_LCTL)", "OSM\nLCtl", "Enable Left Control for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_LALT, "OSM(MOD_LALT)", "OSM\nLAlt", "Enable Left Alt for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_LGUI, "OSM(MOD_LGUI)", "OSM\nLGUI", "Enable Left GUI for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_RSFT, "OSM(MOD_RSFT)", "OSM\nRSft", "Enable Right Shift for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_RCTL, "OSM(MOD_RCTL)", "OSM\nRCtl", "Enable Right Control for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_RALT, "OSM(MOD_RALT)", "OSM\nRAlt", "Enable Right Alt for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_RGUI, "OSM(MOD_RGUI)", "OSM\nRGUI", "Enable Right GUI for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_LCTL | MOD_LSFT, "OSM(MOD_LCTL|MOD_LSFT)", "OSM\nCS",
|
|
"Enable Control and Shift for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_LCTL | MOD_LALT, "OSM(MOD_LCTL|MOD_LALT)", "OSM\nCA",
|
|
"Enable Control and Alt for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_LCTL | MOD_LGUI, "OSM(MOD_LCTL|MOD_LGUI)", "OSM\nCG",
|
|
"Enable Control and GUI for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_LSFT | MOD_LALT, "OSM(MOD_LSFT|MOD_LALT)", "OSM\nSA",
|
|
"Enable Shift and Alt for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_LSFT | MOD_LGUI, "OSM(MOD_LSFT|MOD_LGUI)", "OSM\nSG",
|
|
"Enable Shift and GUI for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_LALT | MOD_LGUI, "OSM(MOD_LALT|MOD_LGUI)", "OSM\nAG",
|
|
"Enable Alt and GUI for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_LCTL | MOD_LSFT | MOD_LGUI, "OSM(MOD_LCTL|MOD_LSFT|MOD_LGUI)", "OSM\nCSG",
|
|
"Enable Control, Shift, and GUI for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_LCTL | MOD_LALT | MOD_LGUI, "OSM(MOD_LCTL|MOD_LALT|MOD_LGUI)", "OSM\nCAG",
|
|
"Enable Control, Alt, and GUI for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_LSFT | MOD_LALT | MOD_LGUI, "OSM(MOD_LSFT|MOD_LALT|MOD_LGUI)", "OSM\nSAG",
|
|
"Enable Shift, Alt, and GUI for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_MEH, "OSM(MOD_MEH)", "OSM\nMeh", "Enable Control, Shift, and Alt for one keypress"),
|
|
K(QK_ONE_SHOT_MOD | MOD_HYPR, "OSM(MOD_HYPR)", "OSM\nHyper",
|
|
"Enable Control, Shift, Alt, and GUI for one keypress"),
|
|
|
|
K(QK_LSFT, "LSFT(kc)", "LSft\n(kc)", masked=True),
|
|
K(QK_LCTL, "LCTL(kc)", "LCtl\n(kc)", masked=True),
|
|
K(QK_LALT, "LALT(kc)", "LAlt\n(kc)", masked=True),
|
|
K(QK_LGUI, "LGUI(kc)", "LGui\n(kc)", masked=True),
|
|
K(QK_RSFT, "RSFT(kc)", "RSft\n(kc)", masked=True),
|
|
K(QK_RCTL, "RCTL(kc)", "RCtl\n(kc)", masked=True),
|
|
K(QK_RALT, "RALT(kc)", "RAlt\n(kc)", masked=True),
|
|
K(QK_RGUI, "RGUI(kc)", "RGui\n(kc)", masked=True),
|
|
|
|
K(MT(MOD_LSFT), "LSFT_T(kc)", "LSft_T\n(kc)", "Left Shift when held, kc when tapped", masked=True),
|
|
K(MT(MOD_LCTL), "LCTL_T(kc)", "LCtl_T\n(kc)", "Left Control when held, kc when tapped", masked=True),
|
|
K(MT(MOD_LALT), "LALT_T(kc)", "LAlt_T\n(kc)", "Left Alt when held, kc when tapped", masked=True),
|
|
K(MT(MOD_LGUI), "LGUI_T(kc)", "LGui_T\n(kc)", "Left GUI when held, kc when tapped", masked=True),
|
|
K(MT(MOD_RSFT), "RSFT_T(kc)", "RSft_T\n(kc)", "Right Shift when held, kc when tapped", masked=True),
|
|
K(MT(MOD_RCTL), "RCTL_T(kc)", "RCtl_T\n(kc)", "Right Control when held, kc when tapped", masked=True),
|
|
K(MT(MOD_RALT), "RALT_T(kc)", "RAlt_T\n(kc)", "Right Alt when held, kc when tapped", masked=True),
|
|
K(MT(MOD_RGUI), "RGUI_T(kc)", "RGui_T\n(kc)", "Right GUI when held, kc when tapped", masked=True),
|
|
K(MT(MOD_LCTL|MOD_LSFT), "C_S_T(kc)", "C_S_T\n(kc)", "Left Control + Left Shift when held, kc when tapped",
|
|
masked=True),
|
|
K(MT(MOD_LCTL|MOD_LSFT|MOD_LALT|MOD_LGUI), "ALL_T(kc)",
|
|
"ALL_T\n(kc)", "LCTL + LSFT + LALT + LGUI when held, kc when tapped", masked=True),
|
|
K(MT(MOD_LCTL|MOD_LSFT|MOD_LALT), "MEH_T(kc)", "Meh_T\n(kc)", "LCTL + LSFT + LALT when held, kc when tapped",
|
|
masked=True),
|
|
K(MT(MOD_LCTL|MOD_LALT|MOD_LGUI), "LCAG_T(kc)", "LCAG_T\n(kc)", "LCTL + LALT + LGUI when held, kc when tapped",
|
|
masked=True),
|
|
K(MT(MOD_RCTL|MOD_RALT|MOD_RGUI), "RCAG_T(kc)", "RCAG_T\n(kc)", "RCTL + RALT + RGUI when held, kc when tapped",
|
|
masked=True),
|
|
K(MT(MOD_LGUI|MOD_LSFT), "SGUI_T(kc)", "SGUI_T\n(kc)", "LGUI + LSFT when held, kc when tapped", masked=True),
|
|
K(MT(MOD_LCTL|MOD_LALT), "LCA_T(kc)", "LCA_T\n(kc)", "LCTL + LALT when held, kc when tapped", masked=True),
|
|
K(MT(MOD_LSFT|MOD_LALT), "LSA_T(kc)", "LSA_T\n(kc)", "LSFT + LALT when held, kc when tapped", masked=True),
|
|
|
|
K(QK_LCTL|QK_LSFT|QK_LALT|QK_LGUI, "HYPR(kc)", "Hyper\n(kc)", "LCTL + LSFT + LALT + LGUI", masked=True),
|
|
K(QK_LCTL|QK_LSFT|QK_LALT, "MEH(kc)", "Meh\n(kc)", "LCTL + LSFT + LALT", masked=True),
|
|
K(QK_LCTL|QK_LALT|QK_LGUI, "LCAG(kc)", "LCAG\n(kc)", "LCTL + LALT + LGUI", masked=True),
|
|
K(QK_LGUI|QK_LSFT, "SGUI(kc)", "SGUI\n(kc)", "LGUI + LSFT", masked=True),
|
|
K(QK_LCTL|QK_LALT, "LCA(kc)", "LCA\n(kc)", "LCTL + LALT", masked=True),
|
|
K(QK_LSFT|QK_LALT, "LSA(kc)", "LSA\n(kc)", "LSFT + LALT", masked=True),
|
|
K(QK_LCTL|QK_LSFT, "C_S(kc)", "C_S\n(kc)", "LCTL + LSFT", masked=True),
|
|
|
|
K(0x5C16, "KC_GESC", "~\nEsc", "Esc normally, but ~ when Shift or GUI is pressed"),
|
|
K(0x5CD7, "KC_LSPO", "LS\n(", "Left Shift when held, ( when tapped"),
|
|
K(0x5CD8, "KC_RSPC", "RS\n)", "Right Shift when held, ) when tapped"),
|
|
K(0x5CF3, "KC_LCPO", "LC\n(", "Left Control when held, ( when tapped"),
|
|
K(0x5CF4, "KC_RCPC", "RC\n)", "Right Control when held, ) when tapped"),
|
|
K(0x5CF5, "KC_LAPO", "LA\n(", "Left Alt when held, ( when tapped"),
|
|
K(0x5CF6, "KC_RAPC", "RA\n)", "Right Alt when held, ) when tapped"),
|
|
K(0x5CD9, "KC_SFTENT", "RS\nEnter", "Right Shift when held, Enter when tapped"),
|
|
|
|
K(23554, "MAGIC_SWAP_CONTROL_CAPSLOCK", "Swap\nCtrl\nCaps", "Swap Caps Lock and Left Control", alias=["CL_SWAP"]),
|
|
K(23563, "MAGIC_UNSWAP_CONTROL_CAPSLOCK", "Unswap\nCtrl\nCaps", "Unswap Caps Lock and Left Control",
|
|
alias=["CL_NORM"]),
|
|
K(23555, "MAGIC_CAPSLOCK_TO_CONTROL", "Caps\nto\nCtrl", "Treat Caps Lock as Control", alias=["CL_CTRL"]),
|
|
K(23564, "MAGIC_UNCAPSLOCK_TO_CONTROL", "Caps\nnot to\nCtrl", "Stop treating Caps Lock as Control",
|
|
alias=["CL_CAPS"]),
|
|
K(23802, "MAGIC_SWAP_LCTL_LGUI", "Swap\nLCtl\nLGui", "Swap Left Control and GUI", alias=["LCG_SWP"]),
|
|
K(23804, "MAGIC_UNSWAP_LCTL_LGUI", "Unswap\nLCtl\nLGui", "Unswap Left Control and GUI", alias=["LCG_NRM"]),
|
|
K(23803, "MAGIC_SWAP_RCTL_RGUI", "Swap\nRCtl\nRGui", "Swap Right Control and GUI", alias=["RCG_SWP"]),
|
|
K(23805, "MAGIC_UNSWAP_RCTL_RGUI", "Unswap\nRCtl\nRGui", "Unswap Right Control and GUI", alias=["RCG_NRM"]),
|
|
K(23806, "MAGIC_SWAP_CTL_GUI", "Swap\nCtl\nGui", "Swap Control and GUI on both sides", alias=["CG_SWAP"]),
|
|
K(23807, "MAGIC_UNSWAP_CTL_GUI", "Unswap\nCtl\nGui", "Unswap Control and GUI on both sides", alias=["CG_NORM"]),
|
|
K(23808, "MAGIC_TOGGLE_CTL_GUI", "Toggle\nCtl\nGui", "Toggle Control and GUI swap on both sides",
|
|
alias=["CG_TOGG"]),
|
|
K(23556, "MAGIC_SWAP_LALT_LGUI", "Swap\nLAlt\nLGui", "Swap Left Alt and GUI", alias=["LAG_SWP"]),
|
|
K(23565, "MAGIC_UNSWAP_LALT_LGUI", "Unswap\nLAlt\nLGui", "Unswap Left Alt and GUI", alias=["LAG_NRM"]),
|
|
K(23557, "MAGIC_SWAP_RALT_RGUI", "Swap\nRAlt\nRGui", "Swap Right Alt and GUI", alias=["RAG_SWP"]),
|
|
K(23566, "MAGIC_UNSWAP_RALT_RGUI", "Unswap\nRAlt\nRGui", "Unswap Right Alt and GUI", alias=["RAG_NRM"]),
|
|
K(23562, "MAGIC_SWAP_ALT_GUI", "Swap\nAlt\nGui", "Swap Alt and GUI on both sides", alias=["AG_SWAP"]),
|
|
K(23571, "MAGIC_UNSWAP_ALT_GUI", "Unswap\nAlt\nGui", "Unswap Alt and GUI on both sides", alias=["AG_NORM"]),
|
|
K(23573, "MAGIC_TOGGLE_ALT_GUI", "Toggle\nAlt\nGui", "Toggle Alt and GUI swap on both sides", alias=["AG_TOGG"]),
|
|
K(23558, "MAGIC_NO_GUI", "GUI\nOff", "Disable the GUI keys", alias=["GUI_OFF"]),
|
|
K(23567, "MAGIC_UNNO_GUI", "GUI\nOn", "Enable the GUI keys", alias=["GUI_ON"]),
|
|
K(23559, "MAGIC_SWAP_GRAVE_ESC", "Swap\n`\nEsc", "Swap ` and Escape", alias=["GE_SWAP"]),
|
|
K(23568, "MAGIC_UNSWAP_GRAVE_ESC", "Unswap\n`\nEsc", "Unswap ` and Escape", alias=["GE_NORM"]),
|
|
K(23560, "MAGIC_SWAP_BACKSLASH_BACKSPACE", "Swap\n\\\nBS", "Swap \\ and Backspace", alias=["BS_SWAP"]),
|
|
K(23569, "MAGIC_UNSWAP_BACKSLASH_BACKSPACE", "Unswap\n\\\nBS", "Unswap \\ and Backspace",
|
|
alias=["BS_NORM"]),
|
|
K(23561, "MAGIC_HOST_NKRO", "NKRO\nOn", "Enable N-key rollover", alias=["NK_ON"]),
|
|
K(23570, "MAGIC_UNHOST_NKRO", "NKRO\nOff", "Disable N-key rollover", alias=["NK_OFF"]),
|
|
K(23572, "MAGIC_TOGGLE_NKRO", "NKRO\nToggle", "Toggle N-key rollover", alias=["NK_TOGG"]),
|
|
K(23809, "MAGIC_EE_HANDS_LEFT", "EEH\nLeft",
|
|
"Set the master half of a split keyboard as the left hand (for EE_HANDS)", alias=["EH_LEFT"]),
|
|
K(23810, "MAGIC_EE_HANDS_RIGHT", "EEH\nRight",
|
|
"Set the master half of a split keyboard as the right hand (for EE_HANDS)", alias=["EH_RGHT"]),
|
|
]
|
|
|
|
KEYCODES_BACKLIGHT = [
|
|
K(23743, "BL_TOGG", "BL\nToggle", "Turn the backlight on or off"),
|
|
K(23744, "BL_STEP", "BL\nCycle", "Cycle through backlight levels"),
|
|
K(23745, "BL_BRTG", "BL\nBreath", "Toggle backlight breathing"),
|
|
K(23739, "BL_ON", "BL On", "Set the backlight to max brightness"),
|
|
K(23740, "BL_OFF", "BL Off", "Turn the backlight off"),
|
|
K(23742, "BL_INC", "BL +", "Increase the backlight level"),
|
|
K(23741, "BL_DEC", "BL - ", "Decrease the backlight level"),
|
|
|
|
K(23746, "RGB_TOG", "RGB\nToggle", "Toggle RGB lighting on or off"),
|
|
K(23747, "RGB_MOD", "RGB\nMode +", "Next RGB mode"),
|
|
K(23748, "RGB_RMOD", "RGB\nMode -", "Previous RGB mode"),
|
|
K(23749, "RGB_HUI", "Hue +", "Increase hue"),
|
|
K(23750, "RGB_HUD", "Hue -", "Decrease hue"),
|
|
K(23751, "RGB_SAI", "Sat +", "Increase saturation"),
|
|
K(23752, "RGB_SAD", "Sat -", "Decrease saturation"),
|
|
K(23753, "RGB_VAI", "Bright +", "Increase value"),
|
|
K(23754, "RGB_VAD", "Bright -", "Decrease value"),
|
|
K(23755, "RGB_SPI", "Effect +", "Increase RGB effect speed"),
|
|
K(23756, "RGB_SPD", "Effect -", "Decrease RGB effect speed"),
|
|
K(23757, "RGB_M_P", "RGB\nMode P", "RGB Mode: Plain"),
|
|
K(23758, "RGB_M_B", "RGB\nMode B", "RGB Mode: Breathe"),
|
|
K(23759, "RGB_M_R", "RGB\nMode R", "RGB Mode: Rainbow"),
|
|
K(23760, "RGB_M_SW", "RGB\nMode SW", "RGB Mode: Swirl"),
|
|
K(23761, "RGB_M_SN", "RGB\nMode SN", "RGB Mode: Snake"),
|
|
K(23762, "RGB_M_K", "RGB\nMode K", "RGB Mode: Knight Rider"),
|
|
K(23763, "RGB_M_X", "RGB\nMode X", "RGB Mode: Christmas"),
|
|
K(23764, "RGB_M_G", "RGB\nMode G", "RGB Mode: Gradient"),
|
|
K(23765, "RGB_M_T", "RGB\nMode T", "RGB Mode: Test"),
|
|
]
|
|
|
|
KEYCODES_MEDIA = [
|
|
K(104, "KC_F13", "F13"),
|
|
K(105, "KC_F14", "F14"),
|
|
K(106, "KC_F15", "F15"),
|
|
K(107, "KC_F16", "F16"),
|
|
K(108, "KC_F17", "F17"),
|
|
K(109, "KC_F18", "F18"),
|
|
K(110, "KC_F19", "F19"),
|
|
K(111, "KC_F20", "F20"),
|
|
K(112, "KC_F21", "F21"),
|
|
K(113, "KC_F22", "F22"),
|
|
K(114, "KC_F23", "F23"),
|
|
K(115, "KC_F24", "F24"),
|
|
|
|
K(165, "KC_PWR", "Power", "System Power Down", alias=["KC_SYSTEM_POWER"]),
|
|
K(166, "KC_SLEP", "Sleep", "System Sleep", alias=["KC_SYSTEM_SLEEP"]),
|
|
K(167, "KC_WAKE", "Wake", "System Wake", alias=["KC_SYSTEM_WAKE"]),
|
|
K(116, "KC_EXEC", "Exec", "Execute", alias=["KC_EXECUTE"]),
|
|
K(117, "KC_HELP", "Help"),
|
|
K(119, "KC_SLCT", "Select", alias=["KC_SELECT"]),
|
|
K(120, "KC_STOP", "Stop"),
|
|
K(121, "KC_AGIN", "Again", alias=["KC_AGAIN"]),
|
|
K(122, "KC_UNDO", "Undo"),
|
|
K(123, "KC_CUT", "Cut"),
|
|
K(124, "KC_COPY", "Copy"),
|
|
K(125, "KC_PSTE", "Paste", alias=["KC_PASTE"]),
|
|
K(126, "KC_FIND", "Find"),
|
|
|
|
K(178, "KC_CALC", "Calc", "Launch Calculator (Windows)", alias=["KC_CALCULATOR"]),
|
|
K(177, "KC_MAIL", "Mail", "Launch Mail (Windows)"),
|
|
K(175, "KC_MSEL", "Media\nPlayer", "Launch Media Player (Windows)", alias=["KC_MEDIA_SELECT"]),
|
|
K(179, "KC_MYCM", "My\nPC", "Launch My Computer (Windows)", alias=["KC_MY_COMPUTER"]),
|
|
K(180, "KC_WSCH", "Browser\nSearch", "Browser Search (Windows)", alias=["KC_WWW_SEARCH"]),
|
|
K(181, "KC_WHOM", "Browser\nHome", "Browser Home (Windows)", alias=["KC_WWW_HOME"]),
|
|
K(182, "KC_WBAK", "Browser\nBack", "Browser Back (Windows)", alias=["KC_WWW_BACK"]),
|
|
K(183, "KC_WFWD", "Browser\nForward", "Browser Forward (Windows)", alias=["KC_WWW_FORWARD"]),
|
|
K(184, "KC_WSTP", "Browser\nStop", "Browser Stop (Windows)", alias=["KC_WWW_STOP"]),
|
|
K(185, "KC_WREF", "Browser\nRefresh", "Browser Refresh (Windows)", alias=["KC_WWW_REFRESH"]),
|
|
K(186, "KC_WFAV", "Browser\nFav.", "Browser Favorites (Windows)", alias=["KC_WWW_FAVORITES"]),
|
|
K(189, "KC_BRIU", "Bright.\nUp", "Increase the brightness of screen (Laptop)", alias=["KC_BRIGHTNESS_UP"]),
|
|
K(190, "KC_BRID", "Bright.\nDown", "Decrease the brightness of screen (Laptop)", alias=["KC_BRIGHTNESS_DOWN"]),
|
|
|
|
K(172, "KC_MPRV", "Media\nPrev", "Previous Track", alias=["KC_MEDIA_PREV_TRACK"]),
|
|
K(171, "KC_MNXT", "Media\nNext", "Next Track", alias=["KC_MEDIA_NEXT_TRACK"]),
|
|
K(168, "KC_MUTE", "Mute", "Mute Audio", alias=["KC_AUDIO_MUTE"]),
|
|
K(170, "KC_VOLD", "Vol -", "Volume Down", alias=["KC_AUDIO_VOL_DOWN"]),
|
|
K(169, "KC_VOLU", "Vol +", "Volume Up", alias=["KC_AUDIO_VOL_UP"]),
|
|
K(173, "KC_MSTP", "Media\nStop", alias=["KC_MEDIA_STOP"]),
|
|
K(174, "KC_MPLY", "Media\nPlay", "Play/Pause", alias=["KC_MEDIA_PLAY_PAUSE"]),
|
|
K(188, "KC_MRWD", "Prev\nTrack\n(macOS)", "Previous Track / Rewind (macOS)", alias=["KC_MEDIA_REWIND"]),
|
|
K(187, "KC_MFFD", "Next\nTrack\n(macOS)", "Next Track / Fast Forward (macOS)", alias=["KC_MEDIA_FAST_FORWARD"]),
|
|
K(176, "KC_EJCT", "Eject", "Eject (macOS)", alias=["KC_MEDIA_EJECT"]),
|
|
|
|
K(240, "KC_MS_U", "Mouse\nUp", "Mouse Cursor Up", alias=["KC_MS_UP"]),
|
|
K(241, "KC_MS_D", "Mouse\nDown", "Mouse Cursor Down", alias=["KC_MS_DOWN"]),
|
|
K(242, "KC_MS_L", "Mouse\nLeft", "Mouse Cursor Left", alias=["KC_MS_LEFT"]),
|
|
K(243, "KC_MS_R", "Mouse\nRight", "Mouse Cursor Right", alias=["KC_MS_RIGHT"]),
|
|
K(244, "KC_BTN1", "Mouse\n1", "Mouse Button 1", alias=["KC_MS_BTN1"]),
|
|
K(245, "KC_BTN2", "Mouse\n2", "Mouse Button 2", alias=["KC_MS_BTN2"]),
|
|
K(246, "KC_BTN3", "Mouse\n3", "Mouse Button 3", alias=["KC_MS_BTN3"]),
|
|
K(247, "KC_BTN4", "Mouse\n4", "Mouse Button 4", alias=["KC_MS_BTN4"]),
|
|
K(248, "KC_BTN5", "Mouse\n5", "Mouse Button 5", alias=["KC_MS_BTN5"]),
|
|
K(249, "KC_WH_U", "Mouse\nWheel\nUp", alias=["KC_MS_WH_UP"]),
|
|
K(250, "KC_WH_D", "Mouse\nWheel\nDown", alias=["KC_MS_WH_DOWN"]),
|
|
K(251, "KC_WH_L", "Mouse\nWheel\nLeft", alias=["KC_MS_WH_LEFT"]),
|
|
K(252, "KC_WH_R", "Mouse\nWheel\nRight", alias=["KC_MS_WH_RIGHT"]),
|
|
K(253, "KC_ACL0", "Mouse\nAccel\n0", "Set mouse acceleration to 0", alias=["KC_MS_ACCEL0"]),
|
|
K(254, "KC_ACL1", "Mouse\nAccel\n1", "Set mouse acceleration to 1", alias=["KC_MS_ACCEL1"]),
|
|
K(255, "KC_ACL2", "Mouse\nAccel\n2", "Set mouse acceleration to 2", alias=["KC_MS_ACCEL2"]),
|
|
|
|
K(130, "KC_LCAP", "Locking\nCaps", "Locking Caps Lock", alias=["KC_LOCKING_CAPS"]),
|
|
K(131, "KC_LNUM", "Locking\nNum", "Locking Num Lock", alias=["KC_LOCKING_NUM"]),
|
|
K(132, "KC_LSCR", "Locking\nScroll", "Locking Scroll Lock", alias=["KC_LOCKING_SCROLL"]),
|
|
]
|
|
|
|
KEYCODES_USER = []
|
|
|
|
KEYCODES_MACRO = []
|
|
|
|
KEYCODES = []
|
|
|
|
K = None
|
|
|
|
|
|
def recreate_keycodes():
|
|
""" Regenerates global KEYCODES array """
|
|
|
|
KEYCODES.clear()
|
|
KEYCODES.extend(KEYCODES_SPECIAL + KEYCODES_BASIC + KEYCODES_SHIFTED + KEYCODES_ISO + KEYCODES_LAYERS +
|
|
KEYCODES_QUANTUM + KEYCODES_BACKLIGHT + KEYCODES_MEDIA + KEYCODES_MACRO + KEYCODES_USER)
|
|
|
|
def create_user_keycodes():
|
|
KEYCODES_USER.clear()
|
|
for x in range(16):
|
|
KEYCODES_USER.append(
|
|
Keycode(
|
|
0x5F80 + x,
|
|
"USER{:02}".format(x),
|
|
"User {}".format(x),
|
|
"User keycode {}".format(x)
|
|
)
|
|
)
|
|
|
|
def create_custom_user_keycodes(custom_keycodes):
|
|
KEYCODES_USER.clear()
|
|
for x, c_keycode in enumerate(custom_keycodes):
|
|
KEYCODES_USER.append(
|
|
Keycode(
|
|
0x5F80 + x,
|
|
c_keycode.get("shortName", "USER{:02}".format(x)),
|
|
c_keycode.get("name", "USER{:02}".format(x)),
|
|
c_keycode.get("title", "USER{:02}".format(x))
|
|
)
|
|
)
|
|
|
|
def recreate_keyboard_keycodes(keyboard):
|
|
""" Generates keycodes based on information the keyboard provides (e.g. layer keycodes, macros) """
|
|
|
|
layers = keyboard.layers
|
|
|
|
def generate_keycodes_for_mask(label, mask):
|
|
keycodes = []
|
|
for layer in range(layers):
|
|
lbl = "{}({})".format(label, layer)
|
|
keycodes.append(Keycode(mask | layer, lbl, lbl))
|
|
return keycodes
|
|
|
|
KEYCODES_LAYERS.clear()
|
|
|
|
if layers >= 4:
|
|
KEYCODES_LAYERS.append(Keycode(0x5F10, "FN_MO13", "Fn1\n(Fn3)"))
|
|
KEYCODES_LAYERS.append(Keycode(0x5F11, "FN_MO23", "Fn2\n(Fn3)"))
|
|
|
|
KEYCODES_LAYERS.extend(generate_keycodes_for_mask("MO", 0x5100))
|
|
KEYCODES_LAYERS.extend(generate_keycodes_for_mask("DF", 0x5200))
|
|
KEYCODES_LAYERS.extend(generate_keycodes_for_mask("TG", 0x5300))
|
|
KEYCODES_LAYERS.extend(generate_keycodes_for_mask("TT", 0x5800))
|
|
KEYCODES_LAYERS.extend(generate_keycodes_for_mask("OSL", 0x5400))
|
|
KEYCODES_LAYERS.extend(generate_keycodes_for_mask("TO", 0x5000 | (1 << 4)))
|
|
|
|
for x in range(layers):
|
|
KEYCODES_LAYERS.append(Keycode(LT(x), "LT({}, kc)".format(x), "LT {}\n(kc)".format(x),
|
|
"kc on tap, switch to layer {} while held".format(x), masked=True))
|
|
|
|
KEYCODES_MACRO.clear()
|
|
for x in range(keyboard.macro_count):
|
|
lbl = "M{}".format(x)
|
|
KEYCODES_MACRO.append(Keycode(0x5F12 + x, lbl, lbl))
|
|
|
|
# Check if custom keycodes are defined in keyboard, and if so add them to user keycodes
|
|
if keyboard.custom_keycodes is not None and len(keyboard.custom_keycodes) > 0:
|
|
create_custom_user_keycodes(keyboard.custom_keycodes)
|
|
else:
|
|
create_user_keycodes()
|
|
|
|
recreate_keycodes()
|
|
|
|
recreate_keycodes()
|