From a77fee7f04830f4c87c42c98dab9469458c5ba36 Mon Sep 17 00:00:00 2001 From: Kyle Brown Date: Wed, 7 Jul 2021 03:15:14 -0700 Subject: [PATCH 1/6] Add shifted keynames to register unshifted versions --- kmk/keys.py | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/kmk/keys.py b/kmk/keys.py index 24d1edf..4992d84 100644 --- a/kmk/keys.py +++ b/kmk/keys.py @@ -106,24 +106,24 @@ class KeyAttrDict(AttrDict): # Aliases to play nicely with AttrDict, since KC.1 isn't a valid # attribute key in Python, but KC.N1 is elif key in ('1', 'N1'): - make_key(code=30, names=('1', 'N1')) + make_key(code=30, names=('1', 'N1', 'EXCLAIM', 'EXLM', '!')) elif key in ('2', 'N2'): - make_key(code=31, names=('2', 'N2')) - elif key in ('3', 'N3'): + make_key(code=31, names=('2', 'N2', 'AT', '@')) + elif key in ('3', 'N3', 'HASH', 'POUND', '#'): make_key(code=32, names=('3', 'N3')) elif key in ('4', 'N4'): - make_key(code=33, names=('4', 'N4')) + make_key(code=33, names=('4', 'N4', 'DOLLAR', 'DLR', '$')) elif key in ('5', 'N5'): - make_key(code=34, names=('5', 'N5')) + make_key(code=34, names=('5', 'N5', 'PERCENT', 'PERC', '%')) elif key in ('6', 'N6'): - make_key(code=35, names=('6', 'N6')) + make_key(code=35, names=('6', 'N6', 'CIRCUMFLEX', 'CIRC', '^')) elif key in ('7', 'N7'): - make_key(code=36, names=('7', 'N7')) + make_key(code=36, names=('7', 'N7', 'AMPERSAND', 'AMPR', '&')) elif key in ('8', 'N8'): - make_key(code=37, names=('8', 'N8')) + make_key(code=37, names=('8', 'N8', 'ASTERISK', 'ASTR', '*')) elif key in ('9', 'N9'): - make_key(code=38, names=('9', 'N9')) - elif key in ('0', 'N0'): + make_key(code=38, names=('9', 'N9', 'LEFT_PAREN', 'LPRN', '[')) + elif key in ('0', 'N0', 'RIGHT_PAREN', 'LPRN', ']'): make_key(code=39, names=('0', 'N0')) # More ASCII standard keys @@ -137,27 +137,27 @@ class KeyAttrDict(AttrDict): make_key(code=43, names=('TAB', '\t')) elif key in ('SPACE', 'SPC', ' '): make_key(code=44, names=('SPACE', 'SPC', ' ')) - elif key in ('MINUS', 'MINS', '-'): + elif key in ('MINUS', 'MINS', '-', 'UNDERSCORE', 'UNDS', '_'): make_key(code=45, names=('MINUS', 'MINS', '-')) - elif key in ('EQUAL', 'EQL', '='): + elif key in ('EQUAL', 'EQL', '=', 'PLUS', '+'): make_key(code=46, names=('EQUAL', 'EQL', '=')) - elif key in ('LBRACKET', 'LBRC', '['): + elif key in ('LBRACKET', 'LBRC', '[', 'LEFT_CURLY_BRACE', 'LCRB', '{'): make_key(code=47, names=('LBRACKET', 'LBRC', '[')) - elif key in ('RBRACKET', 'RBRC', ']'): + elif key in ('RBRACKET', 'RBRC', ']', 'RIGHT_CURLY_BRACE', 'RCRB', '}'): make_key(code=48, names=('RBRACKET', 'RBRC', ']')) - elif key in ('BACKSLASH', 'BSLASH', 'BSLS', '\\'): + elif key in ('BACKSLASH', 'BSLASH', 'BSLS', '\\', 'PIPE', '|'): make_key(code=49, names=('BACKSLASH', 'BSLASH', 'BSLS', '\\')) - elif key in ('SEMICOLON', 'SCOLON', 'SCLN', ';'): + elif key in ('SEMICOLON', 'SCOLON', 'SCLN', ';', 'COLON', 'COLN', ':'): make_key(code=51, names=('SEMICOLON', 'SCOLON', 'SCLN', ';')) - elif key in ('QUOTE', 'QUOT', "'"): + elif key in ('QUOTE', 'QUOT', "'", 'DOUBLE_QUOTE', 'DQUO', 'DQT', '"'): make_key(code=52, names=('QUOTE', 'QUOT', "'")) - elif key in ('GRAVE', 'GRV', 'ZKHK', '`'): + elif key in ('GRAVE', 'GRV', 'ZKHK', '`', 'TILDE', 'TILD', '~'): make_key(code=53, names=('GRAVE', 'GRV', 'ZKHK', '`')) - elif key in ('COMMA', 'COMM', ','): + elif key in ('COMMA', 'COMM', ',', 'LEFT_ANGLE_BRACKET', 'LABK', '<'): make_key(code=54, names=('COMMA', 'COMM', ',')) - elif key in ('DOT', '.'): + elif key in ('DOT', '.', 'RIGHT_ANGLE_BRACKET', 'RABK', '>'): make_key(code=55, names=('DOT', '.')) - elif key in ('SLASH', 'SLSH'): + elif key in ('SLASH', 'SLSH', 'QUESTION', 'QUES', '?'): make_key(code=56, names=('SLASH', 'SLSH')) # Function Keys From 7310bdd7807c153a9120dfe3344ddb3d2d234c35 Mon Sep 17 00:00:00 2001 From: Kyle Brown Date: Wed, 7 Jul 2021 04:04:30 -0700 Subject: [PATCH 2/6] add shorthand for KC_NO --- kmk/keys.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kmk/keys.py b/kmk/keys.py index 4992d84..e8b8076 100644 --- a/kmk/keys.py +++ b/kmk/keys.py @@ -424,9 +424,9 @@ class KeyAttrDict(AttrDict): # NO and TRNS are functionally identical in how they (don't) mutate # the state, but are tracked semantically separately, so create # two keys with the exact same functionality - elif key in ('NO',): + elif key in ('NO', 'XXXXXXX'): make_key( - names=('NO',), + names=('NO', 'XXXXXXX'), on_press=handlers.passthrough, on_release=handlers.passthrough, ) From 270be1fa2874798f5fc96c7047affcbde395a2f5 Mon Sep 17 00:00:00 2001 From: Kyle Brown Date: Wed, 7 Jul 2021 12:44:11 -0700 Subject: [PATCH 3/6] initial support for RP2040 Pro Micro corne --- boards/crkbd/kb_rp2040.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 boards/crkbd/kb_rp2040.py diff --git a/boards/crkbd/kb_rp2040.py b/boards/crkbd/kb_rp2040.py new file mode 100644 index 0000000..b86d44f --- /dev/null +++ b/boards/crkbd/kb_rp2040.py @@ -0,0 +1,29 @@ +import board + +from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard +from kmk.matrix import DiodeOrientation +from kmk.matrix import intify_coordinate as ic + + +class KMKKeyboard(_KMKKeyboard): + col_pins = ( + board.A3, + board.A2, + board.A1, + board.A0, + board.SCK, + board.MISO, + ) + row_pins = (board.D4, board.D5, board.D6, board.D7) + diode_orientation = DiodeOrientation.COLUMNS + data_pin = board.RX + rgb_pixel_pin = board.D0 + i2c = board.I2C + + coord_mapping = [] + coord_mapping.extend(ic(0, x) for x in range(12)) + coord_mapping.extend(ic(1, x) for x in range(12)) + coord_mapping.extend(ic(2, x) for x in range(12)) + + # And now, to handle R3, which at this point is down to just six keys + coord_mapping.extend(ic(3, x) for x in range(3, 9)) From ab6aa1838c01cb5f6eb9957f2ea4984aa5455e75 Mon Sep 17 00:00:00 2001 From: Josh Klar Date: Wed, 7 Jul 2021 13:00:27 -0700 Subject: [PATCH 4/6] chore: whatever it just took to get my PM2040 to boot --- boards/crkbd/main.py | 4 ++-- kmk/modules/split.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/boards/crkbd/main.py b/boards/crkbd/main.py index 1997429..3834d0b 100644 --- a/boards/crkbd/main.py +++ b/boards/crkbd/main.py @@ -1,4 +1,4 @@ -from kb import KMKKeyboard, rgb_pixel_pin +from kb import KMKKeyboard from kmk.extensions.rgb import RGB from kmk.keys import KC from kmk.modules.layers import Layers @@ -7,7 +7,7 @@ from kmk.modules.split import Split, SplitSide, SplitType keyboard = KMKKeyboard() # Adding extensions -rgb = RGB(pixel_pin=rgb_pixel_pin, num_pixels=27, val_limit=100, hue_default=190, sat_default=100, val_default=5) +rgb = RGB(pixel_pin=keyboard.rgb_pixel_pin, num_pixels=27, val_limit=100, hue_default=190, sat_default=100, val_default=5) # TODO Comment one of these on each side split_side = SplitSide.LEFT diff --git a/kmk/modules/split.py b/kmk/modules/split.py index 23cfe6a..0de7e17 100644 --- a/kmk/modules/split.py +++ b/kmk/modules/split.py @@ -64,7 +64,7 @@ class Split(Module): self.UARTService = UARTService except ImportError: print('BLE Import error') - pass # BLE isn't supported on this platform + return # BLE isn't supported on this platform self._ble = BLERadio() self._ble_last_scan = ticks_ms() - 5000 self._connection_count = 0 From 083e4a701aa056b9c0664ad68878d17eebd7e3dc Mon Sep 17 00:00:00 2001 From: Josh Klar Date: Wed, 7 Jul 2021 14:44:44 -0700 Subject: [PATCH 5/6] fix(keys): fix shifted keys bug, make lazy key defs more readable --- kmk/keys.py | 674 +++++++++++++++++++++------------------------------- 1 file changed, 271 insertions(+), 403 deletions(-) diff --git a/kmk/keys.py b/kmk/keys.py index e8b8076..1a0a4a3 100644 --- a/kmk/keys.py +++ b/kmk/keys.py @@ -10,6 +10,8 @@ from kmk.key_validators import ( ) from kmk.types import AttrDict, UnicodeModeKeyMeta +DEBUG_OUTPUT = False + FIRST_KMK_INTERNAL_KEY = const(1000) NEXT_AVAILABLE_KEY = 1000 @@ -17,407 +19,76 @@ KEY_SIMPLE = const(0) KEY_MODIFIER = const(1) KEY_CONSUMER = const(2) +ALL_ALPHAS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +ALL_NUMBERS = '1234567890' +# since KC.1 isn't valid Python, alias to KC.N1 +ALL_NUMBER_ALIASES = tuple(f'N{x}' for x in ALL_NUMBERS) + + +class InfiniteLoopDetected(Exception): + pass + + +# this is a bit of an FP style thing - combining a pipe operator a-la F# with +# a bootleg Maybe monad to clean up these make_key sequences +def left_pipe_until_some(candidate, functor, *args_iter): + for args in args_iter: + result = functor(candidate, *args) + if result is not None: + return result + + +def first_truthy(candidate, *funcs): + for func in funcs: + result = func(candidate) + if result is not None: + return result + + +def maybe_make_mod_key(candidate, code, names): + if candidate in names: + return make_mod_key(code=code, names=names) + + +def maybe_make_key(candidate, code, names): + if candidate in names: + return make_key(code=code, names=names) + + +def maybe_make_shifted_key(candidate, target_name, names): + if candidate in names: + return make_shifted_key(target_name=target_name, names=names) + + +def maybe_make_consumer_key(candidate, code, names): + if candidate in names: + return make_consumer_key(code=code, names=names) + class KeyAttrDict(AttrDict): - def __getattr__(self, key): + def __getattr__(self, key, depth=0): + if depth > 1: + raise InfiniteLoopDetected() + try: return super(KeyAttrDict, self).__getattr__(key) except Exception: pass - # Modifiers - if key in ('LEFT_CONTROL', 'LCTRL', 'LCTL'): - make_mod_key(code=0x01, names=('LEFT_CONTROL', 'LCTRL', 'LCTL')) - elif key in ('LEFT_SHIFT', 'LSHIFT', 'LSFT'): - make_mod_key(code=0x02, names=('LEFT_SHIFT', 'LSHIFT', 'LSFT')) - elif key in ('LEFT_ALT', 'LALT'): - make_mod_key(code=0x04, names=('LEFT_ALT', 'LALT')) - elif key in ('LEFT_SUPER', 'LGUI', 'LCMD', 'LWIN'): - make_mod_key(code=0x08, names=('LEFT_SUPER', 'LGUI', 'LCMD', 'LWIN')) - elif key in ('RIGHT_CONTROL', 'RCTRL', 'RCTL'): - make_mod_key(code=0x10, names=('RIGHT_CONTROL', 'RCTRL', 'RCTL')) - elif key in ('RIGHT_SHIFT', 'RSHIFT', 'RSFT'): - make_mod_key(code=0x20, names=('RIGHT_SHIFT', 'RSHIFT', 'RSFT')) - elif key in ('RIGHT_ALT', 'RALT'): - make_mod_key(code=0x40, names=('RIGHT_ALT', 'RALT')) - elif key in ('RIGHT_SUPER', 'RGUI', 'RCMD', 'RWIN'): - make_mod_key(code=0x80, names=('RIGHT_SUPER', 'RGUI', 'RCMD', 'RWIN')) - # MEH = LCTL | LALT | LSFT# MEH = LCTL | - elif key in ('MEH',): - make_mod_key(code=0x07, names=('MEH',)) - # HYPR = LCTL | LALT | LSFT | LGUI - elif key in ('HYPER', 'HYPR'): - make_mod_key(code=0x0F, names=('HYPER', 'HYPR')) - # Basic ASCII letters - elif key in ('A',): - make_key(code=4, names=('A',)) - elif key in ('B',): - make_key(code=5, names=('B',)) - elif key in ('C',): - make_key(code=6, names=('C',)) - elif key in ('D',): - make_key(code=7, names=('D',)) - elif key in ('E',): - make_key(code=8, names=('E',)) - elif key in ('F',): - make_key(code=9, names=('F',)) - elif key in ('G',): - make_key(code=10, names=('G',)) - elif key in ('H',): - make_key(code=11, names=('H',)) - elif key in ('I',): - make_key(code=12, names=('I',)) - elif key in ('J',): - make_key(code=13, names=('J',)) - elif key in ('K',): - make_key(code=14, names=('K',)) - elif key in ('L',): - make_key(code=15, names=('L',)) - elif key in ('M',): - make_key(code=16, names=('M',)) - elif key in ('N',): - make_key(code=17, names=('N',)) - elif key in ('O',): - make_key(code=18, names=('O',)) - elif key in ('P',): - make_key(code=19, names=('P',)) - elif key in ('Q',): - make_key(code=20, names=('Q',)) - elif key in ('R',): - make_key(code=21, names=('R',)) - elif key in ('S',): - make_key(code=22, names=('S',)) - elif key in ('T',): - make_key(code=23, names=('T',)) - elif key in ('U',): - make_key(code=24, names=('U',)) - elif key in ('V',): - make_key(code=25, names=('V',)) - elif key in ('W',): - make_key(code=26, names=('W',)) - elif key in ('X',): - make_key(code=27, names=('X',)) - elif key in ('Y',): - make_key(code=28, names=('Y',)) - elif key in ('Z',): - make_key(code=29, names=('Z',)) + # Basic ASCII letters/numbers don't need anything fancy, so check those + # in the laziest way + if key in ALL_ALPHAS: + make_key(code=4 + ALL_ALPHAS.index(key), names=(key,)) + elif key in ALL_NUMBERS or key in ALL_NUMBER_ALIASES: + try: + offset = ALL_NUMBERS.index(key) + except ValueError: + offset = ALL_NUMBER_ALIASES.index(key) - # Numbers - # Aliases to play nicely with AttrDict, since KC.1 isn't a valid - # attribute key in Python, but KC.N1 is - elif key in ('1', 'N1'): - make_key(code=30, names=('1', 'N1', 'EXCLAIM', 'EXLM', '!')) - elif key in ('2', 'N2'): - make_key(code=31, names=('2', 'N2', 'AT', '@')) - elif key in ('3', 'N3', 'HASH', 'POUND', '#'): - make_key(code=32, names=('3', 'N3')) - elif key in ('4', 'N4'): - make_key(code=33, names=('4', 'N4', 'DOLLAR', 'DLR', '$')) - elif key in ('5', 'N5'): - make_key(code=34, names=('5', 'N5', 'PERCENT', 'PERC', '%')) - elif key in ('6', 'N6'): - make_key(code=35, names=('6', 'N6', 'CIRCUMFLEX', 'CIRC', '^')) - elif key in ('7', 'N7'): - make_key(code=36, names=('7', 'N7', 'AMPERSAND', 'AMPR', '&')) - elif key in ('8', 'N8'): - make_key(code=37, names=('8', 'N8', 'ASTERISK', 'ASTR', '*')) - elif key in ('9', 'N9'): - make_key(code=38, names=('9', 'N9', 'LEFT_PAREN', 'LPRN', '[')) - elif key in ('0', 'N0', 'RIGHT_PAREN', 'LPRN', ']'): - make_key(code=39, names=('0', 'N0')) + names = (ALL_NUMBERS[offset], ALL_NUMBER_ALIASES[offset]) + make_key(code=30 + offset, names=names) - # More ASCII standard keys - elif key in ('ENTER', 'ENT', '\n'): - make_key(code=40, names=('ENTER', 'ENT', '\n')) - elif key in ('ESCAPE', 'ESC'): - make_key(code=41, names=('ESCAPE', 'ESC')) - elif key in ('BACKSPACE', 'BSPC', 'BKSP'): - make_key(code=42, names=('BACKSPACE', 'BSPC', 'BKSP')) - elif key in ('TAB', '\t'): - make_key(code=43, names=('TAB', '\t')) - elif key in ('SPACE', 'SPC', ' '): - make_key(code=44, names=('SPACE', 'SPC', ' ')) - elif key in ('MINUS', 'MINS', '-', 'UNDERSCORE', 'UNDS', '_'): - make_key(code=45, names=('MINUS', 'MINS', '-')) - elif key in ('EQUAL', 'EQL', '=', 'PLUS', '+'): - make_key(code=46, names=('EQUAL', 'EQL', '=')) - elif key in ('LBRACKET', 'LBRC', '[', 'LEFT_CURLY_BRACE', 'LCRB', '{'): - make_key(code=47, names=('LBRACKET', 'LBRC', '[')) - elif key in ('RBRACKET', 'RBRC', ']', 'RIGHT_CURLY_BRACE', 'RCRB', '}'): - make_key(code=48, names=('RBRACKET', 'RBRC', ']')) - elif key in ('BACKSLASH', 'BSLASH', 'BSLS', '\\', 'PIPE', '|'): - make_key(code=49, names=('BACKSLASH', 'BSLASH', 'BSLS', '\\')) - elif key in ('SEMICOLON', 'SCOLON', 'SCLN', ';', 'COLON', 'COLN', ':'): - make_key(code=51, names=('SEMICOLON', 'SCOLON', 'SCLN', ';')) - elif key in ('QUOTE', 'QUOT', "'", 'DOUBLE_QUOTE', 'DQUO', 'DQT', '"'): - make_key(code=52, names=('QUOTE', 'QUOT', "'")) - elif key in ('GRAVE', 'GRV', 'ZKHK', '`', 'TILDE', 'TILD', '~'): - make_key(code=53, names=('GRAVE', 'GRV', 'ZKHK', '`')) - elif key in ('COMMA', 'COMM', ',', 'LEFT_ANGLE_BRACKET', 'LABK', '<'): - make_key(code=54, names=('COMMA', 'COMM', ',')) - elif key in ('DOT', '.', 'RIGHT_ANGLE_BRACKET', 'RABK', '>'): - make_key(code=55, names=('DOT', '.')) - elif key in ('SLASH', 'SLSH', 'QUESTION', 'QUES', '?'): - make_key(code=56, names=('SLASH', 'SLSH')) - - # Function Keys - elif key in ('F1',): - make_key(code=58, names=('F1',)) - elif key in ('F2',): - make_key(code=59, names=('F2',)) - elif key in ('F3',): - make_key(code=60, names=('F3',)) - elif key in ('F4',): - make_key(code=61, names=('F4',)) - elif key in ('F5',): - make_key(code=62, names=('F5',)) - elif key in ('F6',): - make_key(code=63, names=('F6',)) - elif key in ('F7',): - make_key(code=64, names=('F7',)) - elif key in ('F8',): - make_key(code=65, names=('F8',)) - elif key in ('F9',): - make_key(code=66, names=('F9',)) - elif key in ('F10',): - make_key(code=67, names=('F10',)) - elif key in ('F11',): - make_key(code=68, names=('F11',)) - elif key in ('F12',): - make_key(code=69, names=('F12',)) - elif key in ('F13',): - make_key(code=104, names=('F13',)) - elif key in ('F14',): - make_key(code=105, names=('F14',)) - elif key in ('F15',): - make_key(code=106, names=('F15',)) - elif key in ('F16',): - make_key(code=107, names=('F16',)) - elif key in ('F17',): - make_key(code=108, names=('F17',)) - elif key in ('F18',): - make_key(code=109, names=('F18',)) - elif key in ('F19',): - make_key(code=110, names=('F19',)) - elif key in ('F20',): - make_key(code=111, names=('F20',)) - elif key in ('F21',): - make_key(code=112, names=('F21',)) - elif key in ('F22',): - make_key(code=113, names=('F22',)) - elif key in ('F23',): - make_key(code=114, names=('F23',)) - elif key in ('F24',): - make_key(code=115, names=('F24',)) - - # Lock Keys, Navigation, etc. - elif key in ('CAPS_LOCK', 'CAPSLOCK', 'CLCK', 'CAPS'): - make_key(code=57, names=('CAPS_LOCK', 'CAPSLOCK', 'CLCK', 'CAPS')) - # FIXME: Investigate whether this key actually works, and - # uncomment when/if it does. - # elif key in ('LOCKING_CAPS', 'LCAP'): - # # make_key(code=130, names=('LOCKING_CAPS', 'LCAP')) - elif key in ('PRINT_SCREEN', 'PSCREEN', 'PSCR'): - make_key(code=70, names=('PRINT_SCREEN', 'PSCREEN', 'PSCR')) - elif key in ('SCROLL_LOCK', 'SCROLLLOCK', 'SLCK'): - make_key(code=71, names=('SCROLL_LOCK', 'SCROLLLOCK', 'SLCK')) - # FIXME: Investigate whether this key actually works, and - # uncomment when/if it does. - # elif key in ('LOCKING_SCROLL', 'LSCRL'): - # make_key(code=132, names=('LOCKING_SCROLL', 'LSCRL')) - elif key in ('PAUSE', 'PAUS', 'BRK'): - make_key(code=72, names=('PAUSE', 'PAUS', 'BRK')) - elif key in ('INSERT', 'INS'): - make_key(code=73, names=('INSERT', 'INS')) - elif key in ('HOME',): - make_key(code=74, names=('HOME',)) - elif key in ('PGUP',): - make_key(code=75, names=('PGUP',)) - elif key in ('DELETE', 'DEL'): - make_key(code=76, names=('DELETE', 'DEL')) - elif key in ('END',): - make_key(code=77, names=('END',)) - elif key in ('PGDOWN', 'PGDN'): - make_key(code=78, names=('PGDOWN', 'PGDN')) - elif key in ('RIGHT', 'RGHT'): - make_key(code=79, names=('RIGHT', 'RGHT')) - elif key in ('LEFT',): - make_key(code=80, names=('LEFT',)) - elif key in ('DOWN',): - make_key(code=81, names=('DOWN',)) - elif key in ('UP',): - make_key(code=82, names=('UP',)) - - # Numpad - elif key in ('NUM_LOCK', 'NUMLOCK', 'NLCK'): - make_key(code=83, names=('NUM_LOCK', 'NUMLOCK', 'NLCK')) - # FIXME: Investigate whether this key actually works, and - # uncomment when/if it does. - # elif key in ('LOCKING_NUM', 'LNUM'): - # make_key(code=131, names=('LOCKING_NUM', 'LNUM')) - elif key in ('KP_SLASH', 'NUMPAD_SLASH', 'PSLS'): - make_key(code=84, names=('KP_SLASH', 'NUMPAD_SLASH', 'PSLS')) - elif key in ('KP_ASTERISK', 'NUMPAD_ASTERISK', 'PAST'): - make_key(code=85, names=('KP_ASTERISK', 'NUMPAD_ASTERISK', 'PAST')) - elif key in ('KP_MINUS', 'NUMPAD_MINUS', 'PMNS'): - make_key(code=86, names=('KP_MINUS', 'NUMPAD_MINUS', 'PMNS')) - elif key in ('KP_PLUS', 'NUMPAD_PLUS', 'PPLS'): - make_key(code=87, names=('KP_PLUS', 'NUMPAD_PLUS', 'PPLS')) - elif key in ('KP_ENTER', 'NUMPAD_ENTER', 'PENT'): - make_key(code=88, names=('KP_ENTER', 'NUMPAD_ENTER', 'PENT')) - elif key in ('KP_1', 'P1', 'NUMPAD_1'): - make_key(code=89, names=('KP_1', 'P1', 'NUMPAD_1')) - elif key in ('KP_2', 'P2', 'NUMPAD_2'): - make_key(code=90, names=('KP_2', 'P2', 'NUMPAD_2')) - elif key in ('KP_3', 'P3', 'NUMPAD_3'): - make_key(code=91, names=('KP_3', 'P3', 'NUMPAD_3')) - elif key in ('KP_4', 'P4', 'NUMPAD_4'): - make_key(code=92, names=('KP_4', 'P4', 'NUMPAD_4')) - elif key in ('KP_5', 'P5', 'NUMPAD_5'): - make_key(code=93, names=('KP_5', 'P5', 'NUMPAD_5')) - elif key in ('KP_6', 'P6', 'NUMPAD_6'): - make_key(code=94, names=('KP_6', 'P6', 'NUMPAD_6')) - elif key in ('KP_7', 'P7', 'NUMPAD_7'): - make_key(code=95, names=('KP_7', 'P7', 'NUMPAD_7')) - elif key in ('KP_8', 'P8', 'NUMPAD_8'): - make_key(code=96, names=('KP_8', 'P8', 'NUMPAD_8')) - elif key in ('KP_9', 'P9', 'NUMPAD_9'): - make_key(code=97, names=('KP_9', 'P9', 'NUMPAD_9')) - elif key in ('KP_0', 'P0', 'NUMPAD_0'): - make_key(code=98, names=('KP_0', 'P0', 'NUMPAD_0')) - elif key in ('KP_DOT', 'PDOT', 'NUMPAD_DOT'): - make_key(code=99, names=('KP_DOT', 'PDOT', 'NUMPAD_DOT')) - elif key in ('KP_EQUAL', 'PEQL', 'NUMPAD_EQUAL'): - make_key(code=103, names=('KP_EQUAL', 'PEQL', 'NUMPAD_EQUAL')) - elif key in ('KP_COMMA', 'PCMM', 'NUMPAD_COMMA'): - make_key(code=133, names=('KP_COMMA', 'PCMM', 'NUMPAD_COMMA')) - elif key in ('KP_EQUAL_AS400', 'NUMPAD_EQUAL_AS400'): - make_key(code=134, names=('KP_EQUAL_AS400', 'NUMPAD_EQUAL_AS400')) - - # Making life better for folks on tiny keyboards especially: exposes - # the 'shifted' keys as raw keys. Under the hood we're still - # sending Shift+(whatever key is normally pressed) to get these, so - # for example `KC_AT` will hold shift and press 2. - elif key in ('TILDE', 'TILD', '~'): - make_shifted_key('GRAVE', names=('TILDE', 'TILD', '~')) - elif key in ('EXCLAIM', 'EXLM', '!'): - make_shifted_key('1', names=('EXCLAIM', 'EXLM', '!')) - elif key in ('AT', '@'): - make_shifted_key('2', names=('AT', '@')) - elif key in ('HASH', 'POUND', '#'): - make_shifted_key('3', names=('HASH', 'POUND', '#')) - elif key in ('DOLLAR', 'DLR', '$'): - make_shifted_key('4', names=('DOLLAR', 'DLR', '$')) - elif key in ('PERCENT', 'PERC', '%'): - make_shifted_key('5', names=('PERCENT', 'PERC', '%')) - elif key in ('CIRCUMFLEX', 'CIRC', '^'): - make_shifted_key('6', names=('CIRCUMFLEX', 'CIRC', '^')) - elif key in ('AMPERSAND', 'AMPR', '&'): - make_shifted_key('7', names=('AMPERSAND', 'AMPR', '&')) - elif key in ('ASTERISK', 'ASTR', '*'): - make_shifted_key('8', names=('ASTERISK', 'ASTR', '*')) - elif key in ('LEFT_PAREN', 'LPRN', '('): - make_shifted_key('9', names=('LEFT_PAREN', 'LPRN', '(')) - elif key in ('RIGHT_PAREN', 'RPRN', ')'): - make_shifted_key('0', names=('RIGHT_PAREN', 'RPRN', ')')) - elif key in ('UNDERSCORE', 'UNDS', '_'): - make_shifted_key('MINUS', names=('UNDERSCORE', 'UNDS', '_')) - elif key in ('PLUS', '+'): - make_shifted_key('EQUAL', names=('PLUS', '+')) - elif key in ('LEFT_CURLY_BRACE', 'LCBR', '{'): - make_shifted_key('LBRACKET', names=('LEFT_CURLY_BRACE', 'LCBR', '{')) - elif key in ('RIGHT_CURLY_BRACE', 'RCBR', '}'): - make_shifted_key('RBRACKET', names=('RIGHT_CURLY_BRACE', 'RCBR', '}')) - elif key in ('PIPE', '|'): - make_shifted_key('BACKSLASH', names=('PIPE', '|')) - elif key in ('COLON', 'COLN', ':'): - make_shifted_key('SEMICOLON', names=('COLON', 'COLN', ':')) - elif key in ('DOUBLE_QUOTE', 'DQUO', 'DQT', '"'): - make_shifted_key('QUOTE', names=('DOUBLE_QUOTE', 'DQUO', 'DQT', '"')) - elif key in ('LEFT_ANGLE_BRACKET', 'LABK', '<'): - make_shifted_key('COMMA', names=('LEFT_ANGLE_BRACKET', 'LABK', '<')) - elif key in ('RIGHT_ANGLE_BRACKET', 'RABK', '>'): - make_shifted_key('DOT', names=('RIGHT_ANGLE_BRACKET', 'RABK', '>')) - elif key in ('QUESTION', 'QUES', '?'): - make_shifted_key('SLSH', names=('QUESTION', 'QUES', '?')) - - # International - elif key in ('NONUS_HASH', 'NUHS'): - make_key(code=50, names=('NONUS_HASH', 'NUHS')) - elif key in ('NONUS_BSLASH', 'NUBS'): - make_key(code=100, names=('NONUS_BSLASH', 'NUBS')) - elif key in ('APP', 'APPLICATION', 'SEL', 'WINMENU'): - make_key(code=101, names=('APP', 'APPLICATION', 'SEL', 'WINMENU')) - - elif key in ('INT1', 'RO'): - make_key(code=135, names=('INT1', 'RO')) - elif key in ('INT2', 'KANA'): - make_key(code=136, names=('INT2', 'KANA')) - elif key in ('INT3', 'JYEN'): - make_key(code=137, names=('INT3', 'JYEN')) - elif key in ('INT4', 'HENK'): - make_key(code=138, names=('INT4', 'HENK')) - elif key in ('INT5', 'MHEN'): - make_key(code=139, names=('INT5', 'MHEN')) - elif key in ('INT6',): - make_key(code=140, names=('INT6',)) - elif key in ('INT7',): - make_key(code=141, names=('INT7',)) - elif key in ('INT8',): - make_key(code=142, names=('INT8',)) - elif key in ('INT9',): - make_key(code=143, names=('INT9',)) - elif key in ('LANG1', 'HAEN'): - make_key(code=144, names=('LANG1', 'HAEN')) - elif key in ('LANG2', 'HAEJ'): - make_key(code=145, names=('LANG2', 'HAEJ')) - elif key in ('LANG3',): - make_key(code=146, names=('LANG3',)) - elif key in ('LANG4',): - make_key(code=147, names=('LANG4',)) - elif key in ('LANG5',): - make_key(code=148, names=('LANG5',)) - elif key in ('LANG6',): - make_key(code=149, names=('LANG6',)) - elif key in ('LANG7',): - make_key(code=150, names=('LANG7',)) - elif key in ('LANG8',): - make_key(code=151, names=('LANG8',)) - elif key in ('LANG9',): - make_key(code=152, names=('LANG9',)) - - # Consumer ("media") keys. Most known keys aren't supported here. A much - # longer list used to exist in this file, but the codes were almost certainly - # incorrect, conflicting with each other, or otherwise 'weird'. We'll add them - # back in piecemeal as needed. PRs welcome. - # - # A super useful reference for these is http://www.freebsddiary.org/APC/usb_hid_usages.php - # Note that currently we only have the PC codes. Recent MacOS versions seem to - # support PC media keys, so I don't know how much value we would get out of - # adding the old Apple-specific consumer codes, but again, PRs welcome if the - # lack of them impacts you. - elif key in ('AUDIO_MUTE', 'MUTE'): - make_consumer_key(code=226, names=('AUDIO_MUTE', 'MUTE')) # 0xE2 - elif key in ('AUDIO_VOL_UP', 'VOLU'): - make_consumer_key(code=233, names=('AUDIO_VOL_UP', 'VOLU')) # 0xE9 - elif key in ('AUDIO_VOL_DOWN', 'VOLD'): - make_consumer_key(code=234, names=('AUDIO_VOL_DOWN', 'VOLD')) # 0xEA - elif key in ('MEDIA_NEXT_TRACK', 'MNXT'): - make_consumer_key(code=181, names=('MEDIA_NEXT_TRACK', 'MNXT')) # 0xB5 - elif key in ('MEDIA_PREV_TRACK', 'MPRV'): - make_consumer_key(code=182, names=('MEDIA_PREV_TRACK', 'MPRV')) # 0xB6 - elif key in ('MEDIA_STOP', 'MSTP'): - make_consumer_key(code=183, names=('MEDIA_STOP', 'MSTP')) # 0xB7 - elif key in ('MEDIA_PLAY_PAUSE', 'MPLY'): - make_consumer_key( - code=205, names=('MEDIA_PLAY_PAUSE', 'MPLY') - ) # 0xCD (this may not be right) - elif key in ('MEDIA_EJECT', 'EJCT'): - make_consumer_key(code=184, names=('MEDIA_EJECT', 'EJCT')) # 0xB8 - elif key in ('MEDIA_FAST_FORWARD', 'MFFD'): - make_consumer_key(code=179, names=('MEDIA_FAST_FORWARD', 'MFFD')) # 0xB3 - elif key in ('MEDIA_REWIND', 'MRWD'): - make_consumer_key(code=180, names=('MEDIA_REWIND', 'MRWD')) # 0xB4 + # Now try all the other weird special cases to get them out of our way: # Internal, diagnostic, or auxiliary/enhanced keys @@ -447,12 +118,6 @@ class KeyAttrDict(AttrDict): on_press=handlers.debug_pressed, on_release=handlers.passthrough, ) - elif key in ('GESC',): - make_key( - names=('GESC',), - on_press=handlers.gesc_pressed, - on_release=handlers.gesc_released, - ) elif key in ('BKDL',): make_key( names=('BKDL',), @@ -514,8 +179,204 @@ class KeyAttrDict(AttrDict): elif key in ('HID_SWITCH', 'HID'): make_key(names=('HID_SWITCH', 'HID'), on_press=handlers.hid_switch) else: - raise ValueError('Invalid key') - return self.__getattr__(key) + maybe_key = first_truthy( + key, + # Modifiers + lambda key: left_pipe_until_some( + key, + maybe_make_mod_key, + (0x01, ('LEFT_CONTROL', 'LCTRL', 'LCTL')), + (0x02, ('LEFT_SHIFT', 'LSHIFT', 'LSFT')), + (0x04, ('LEFT_ALT', 'LALT')), + (0x08, ('LEFT_SUPER', 'LGUI', 'LCMD', 'LWIN')), + (0x10, ('RIGHT_CONTROL', 'RCTRL', 'RCTL')), + (0x20, ('RIGHT_SHIFT', 'RSHIFT', 'RSFT')), + (0x40, ('RIGHT_ALT', 'RALT')), + (0x80, ('RIGHT_SUPER', 'RGUI', 'RCMD', 'RWIN')), + # MEH = LCTL | LALT | LSFT# MEH = LCTL | + (0x07, ('MEH',)), + # HYPR = LCTL | LALT | LSFT | LGUI + (0x0F, ('HYPER', 'HYPR')), + ), + lambda key: left_pipe_until_some( + key, + maybe_make_key, + # More ASCII standard keys + (40, ('ENTER', 'ENT', '\n')), + (41, ('ESCAPE', 'ESC')), + (42, ('BACKSPACE', 'BSPC', 'BKSP')), + (43, ('TAB', '\t')), + (44, ('SPACE', 'SPC', ' ')), + (45, ('MINUS', 'MINS', '-')), + (46, ('EQUAL', 'EQL', '=')), + (47, ('LBRACKET', 'LBRC', '[')), + (48, ('RBRACKET', 'RBRC', ']')), + (49, ('BACKSLASH', 'BSLASH', 'BSLS', '\\')), + (51, ('SEMICOLON', 'SCOLON', 'SCLN', ';')), + (52, ('QUOTE', 'QUOT', "'")), + (53, ('GRAVE', 'GRV', 'ZKHK', '`')), + (54, ('COMMA', 'COMM', ',')), + (55, ('DOT', '.')), + (56, ('SLASH', 'SLSH')), + # Function Keys + (58, ('F1',)), + (59, ('F2',)), + (60, ('F3',)), + (61, ('F4',)), + (62, ('F5',)), + (63, ('F6',)), + (64, ('F7',)), + (65, ('F8',)), + (66, ('F9',)), + (67, ('F10',)), + (68, ('F11',)), + (69, ('F12',)), + (104, ('F13',)), + (105, ('F14',)), + (106, ('F15',)), + (107, ('F16',)), + (108, ('F17',)), + (109, ('F18',)), + (110, ('F19',)), + (111, ('F20',)), + (112, ('F21',)), + (113, ('F22',)), + (114, ('F23',)), + (115, ('F24',)), + # Lock Keys, Navigation, etc. + (57, ('CAPS_LOCK', 'CAPSLOCK', 'CLCK', 'CAPS')), + # FIXME: Investigate whether this key actually works, and + # uncomment when/if it does. + # (130, ('LOCKING_CAPS', 'LCAP')), + (70, ('PRINT_SCREEN', 'PSCREEN', 'PSCR')), + (71, ('SCROLL_LOCK', 'SCROLLLOCK', 'SLCK')), + # FIXME: Investigate whether this key actually works, and + # uncomment when/if it does. + # (132, ('LOCKING_SCROLL', 'LSCRL')), + (72, ('PAUSE', 'PAUS', 'BRK')), + (73, ('INSERT', 'INS')), + (74, ('HOME',)), + (75, ('PGUP',)), + (76, ('DELETE', 'DEL')), + (77, ('END',)), + (78, ('PGDOWN', 'PGDN')), + (79, ('RIGHT', 'RGHT')), + (80, ('LEFT',)), + (81, ('DOWN',)), + (82, ('UP',)), + # Numpad + (83, ('NUM_LOCK', 'NUMLOCK', 'NLCK')), + # FIXME: Investigate whether this key actually works, and + # uncomment when/if it does. + # (131, names=('LOCKING_NUM', 'LNUM')), + (84, ('KP_SLASH', 'NUMPAD_SLASH', 'PSLS')), + (85, ('KP_ASTERISK', 'NUMPAD_ASTERISK', 'PAST')), + (86, ('KP_MINUS', 'NUMPAD_MINUS', 'PMNS')), + (87, ('KP_PLUS', 'NUMPAD_PLUS', 'PPLS')), + (88, ('KP_ENTER', 'NUMPAD_ENTER', 'PENT')), + (89, ('KP_1', 'P1', 'NUMPAD_1')), + (90, ('KP_2', 'P2', 'NUMPAD_2')), + (91, ('KP_3', 'P3', 'NUMPAD_3')), + (92, ('KP_4', 'P4', 'NUMPAD_4')), + (93, ('KP_5', 'P5', 'NUMPAD_5')), + (94, ('KP_6', 'P6', 'NUMPAD_6')), + (95, ('KP_7', 'P7', 'NUMPAD_7')), + (96, ('KP_8', 'P8', 'NUMPAD_8')), + (97, ('KP_9', 'P9', 'NUMPAD_9')), + (98, ('KP_0', 'P0', 'NUMPAD_0')), + (99, ('KP_DOT', 'PDOT', 'NUMPAD_DOT')), + (103, ('KP_EQUAL', 'PEQL', 'NUMPAD_EQUAL')), + (133, ('KP_COMMA', 'PCMM', 'NUMPAD_COMMA')), + (134, ('KP_EQUAL_AS400', 'NUMPAD_EQUAL_AS400')), + ), + # Making life better for folks on tiny keyboards especially: exposes + # the 'shifted' keys as raw keys. Under the hood we're still + # sending Shift+(whatever key is normally pressed) to get these, so + # for example `KC_AT` will hold shift and press 2. + lambda key: left_pipe_until_some( + key, + maybe_make_shifted_key, + ('GRAVE', ('TILDE', 'TILD', '~')), + ('1', ('EXCLAIM', 'EXLM', '!')), + ('2', ('AT', '@')), + ('3', ('HASH', 'POUND', '#')), + ('4', ('DOLLAR', 'DLR', '$')), + ('5', ('PERCENT', 'PERC', '%')), + ('6', ('CIRCUMFLEX', 'CIRC', '^')), + ('7', ('AMPERSAND', 'AMPR', '&')), + ('8', ('ASTERISK', 'ASTR', '*')), + ('9', ('LEFT_PAREN', 'LPRN', '(')), + ('0', ('RIGHT_PAREN', 'RPRN', ')')), + ('MINUS', ('UNDERSCORE', 'UNDS', '_')), + ('EQUAL', ('PLUS', '+')), + ('LBRACKET', ('LEFT_CURLY_BRACE', 'LCBR', '{')), + ('RBRACKET', ('RIGHT_CURLY_BRACE', 'RCBR', '}')), + ('BACKSLASH', ('PIPE', '|')), + ('SEMICOLON', ('COLON', 'COLN', ':')), + ('QUOTE', ('DOUBLE_QUOTE', 'DQUO', 'DQT', '"')), + ('COMMA', ('LEFT_ANGLE_BRACKET', 'LABK', '<')), + ('DOT', ('RIGHT_ANGLE_BRACKET', 'RABK', '>')), + ('SLSH', ('QUESTION', 'QUES', '?')), + ), + # International + lambda key: left_pipe_until_some( + key, + maybe_make_key, + (50, ('NONUS_HASH', 'NUHS')), + (100, ('NONUS_BSLASH', 'NUBS')), + (101, ('APP', 'APPLICATION', 'SEL', 'WINMENU')), + (135, ('INT1', 'RO')), + (136, ('INT2', 'KANA')), + (137, ('INT3', 'JYEN')), + (138, ('INT4', 'HENK')), + (139, ('INT5', 'MHEN')), + (140, ('INT6',)), + (141, ('INT7',)), + (142, ('INT8',)), + (143, ('INT9',)), + (144, ('LANG1', 'HAEN')), + (145, ('LANG2', 'HAEJ')), + (146, ('LANG3',)), + (147, ('LANG4',)), + (148, ('LANG5',)), + (149, ('LANG6',)), + (150, ('LANG7',)), + (151, ('LANG8',)), + (152, ('LANG9',)), + ), + # Consumer ("media") keys. Most known keys aren't supported here. A much + # longer list used to exist in this file, but the codes were almost certainly + # incorrect, conflicting with each other, or otherwise 'weird'. We'll add them + # back in piecemeal as needed. PRs welcome. + # + # A super useful reference for these is http://www.freebsddiary.org/APC/usb_hid_usages.php + # Note that currently we only have the PC codes. Recent MacOS versions seem to + # support PC media keys, so I don't know how much value we would get out of + # adding the old Apple-specific consumer codes, but again, PRs welcome if the + # lack of them impacts you. + lambda key: left_pipe_until_some( + key, + maybe_make_consumer_key, + (226, ('AUDIO_MUTE', 'MUTE')), # 0xE2 + (233, ('AUDIO_VOL_UP', 'VOLU')), # 0xE9 + (234, ('AUDIO_VOL_DOWN', 'VOLD')), # 0xEA + (181, ('MEDIA_NEXT_TRACK', 'MNXT')), # 0xB5 + (182, ('MEDIA_PREV_TRACK', 'MPRV')), # 0xB6 + (183, ('MEDIA_STOP', 'MSTP')), # 0xB7 + (205, ('MEDIA_PLAY_PAUSE', 'MPLY')), # 0xCD (this may not be right) + (184, ('MEDIA_EJECT', 'EJCT')), # 0xB8 + (179, ('MEDIA_FAST_FORWARD', 'MFFD')), # 0xB3 + (180, ('MEDIA_REWIND', 'MRWD')), # 0xB4 + ), + ) + + if DEBUG_OUTPUT: + print(f'{key}: {maybe_key}') + + if not maybe_key: + raise ValueError('Invalid key') + + return self.__getattr__(key, depth=depth + 1) # Global state, will be filled in througout this file, and @@ -810,12 +671,19 @@ def make_key(code=None, names=tuple(), type=KEY_SIMPLE, **kwargs): # NOQA return key -def make_mod_key(*args, **kwargs): - return make_key(*args, **kwargs, type=KEY_MODIFIER) +def make_mod_key(code, names, *args, **kwargs): + return make_key(code, names, *args, **kwargs, type=KEY_MODIFIER) def make_shifted_key(target_name, names=tuple()): # NOQA - key = KC.LSFT(KC[target_name]) + # For... probably a few years, a bug existed here where keys were looked + # up by `KC[...]`, but that's incorrect: an AttrDit exposes a dictionary + # with attributes, but key-based dictionary access with brackets does + # *not* implicitly call __getattr__. We got away with this when key defs + # were not lazily created, but now that they are, shifted keys would + # sometimes break, complaining that they couldn't find their underlying + # key to shift. Fixed! + key = KC.LSFT(getattr(KC, target_name)) register_key_names(key, names) From cd3e10ba1335df947e57b82953e73b9f8c097c85 Mon Sep 17 00:00:00 2001 From: Kyle Brown Date: Wed, 7 Jul 2021 23:28:49 -0700 Subject: [PATCH 6/6] unbreak kdb corne --- user_keymaps/kdb424/corne.py | 341 +++++------------------------------ 1 file changed, 45 insertions(+), 296 deletions(-) diff --git a/user_keymaps/kdb424/corne.py b/user_keymaps/kdb424/corne.py index 2d97a6b..75adef9 100644 --- a/user_keymaps/kdb424/corne.py +++ b/user_keymaps/kdb424/corne.py @@ -7,11 +7,9 @@ import board # from adafruit_display_text import label from kb import KMKKeyboard -from kmk.extensions.rgb import RGB from kmk.hid import HIDModes from kmk.keys import KC from kmk.modules.layers import Layers -from kmk.modules.power import Power from kmk.modules.split import Split, SplitType keyboard = KMKKeyboard() @@ -20,36 +18,10 @@ keyboard = KMKKeyboard() keyboard.tap_time = 320 keyboard.debug_enabled = False -rgb_ext = RGB( - pixel_pin=keyboard.rgb_pixel_pin, - num_pixels=6, - val_limit=100, - hue_default=190, - sat_default=100, - val_default=5, -) - -split = Split(split_type=SplitType.BLE) -power = Power(powersave_pin=keyboard.powersave_pin) +split = Split(split_type=SplitType.UART) layers = Layers() -keyboard.modules = [split, power, layers] -keyboard.extensions = [rgb_ext] - -enable_oled = False - -''' -if enable_oled: - displayio.release_displays() - i2c = board.I2C() - display_bus = displayio.I2CDisplay(i2c, device_address=0x3c) - display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=128, height=32) - splash = displayio.Group(max_size=10) - display.show(splash) -else: - displayio.release_displays() -''' -keyboard.i2c_deinit_count += 1 +keyboard.modules = [split, layers] _______ = KC.TRNS XXXXXXX = KC.NO @@ -74,49 +46,12 @@ keyboard.keymap = [ # [ # DVORAK - KC.GESC, - KC.QUOT, - KC.COMM, - KC.DOT, - KC.P, - KC.Y, - KC.F, - KC.G, - KC.C, - KC.R, - KC.L, - KC.BSPC, - TAB_SB, - KC.A, - KC.O, - KC.E, - KC.U, - KC.I, - KC.D, - KC.H, - KC.T, - KC.N, - KC.S, - KC.ENT, - KC.LSFT, - KC.SCLN, - KC.Q, - KC.J, - KC.K, - KC.X, - KC.B, - KC.M, - KC.W, - KC.V, - KC.Z, - KC.SLSH, - KC.LALT, - SUPER_L, - LT1_SP, - LT2_SP, - KC.LCTL, - KC.N0, + KC.GESC, KC.QUOT, KC.COMM, KC.DOT, KC.P, KC.Y, KC.F, KC.G, KC.C, KC.R, KC.L, KC.BSPC, \ + TAB_SB, KC.A, KC.O, KC.E, KC.U, KC.I, KC.D, KC.H, KC.T, KC.N, KC.S, KC.ENT, \ + KC.LSFT, KC.SCLN, KC.Q, KC.J, KC.K, KC.X, KC.B, KC.M, KC.W, KC.V, KC.Z, KC.SLSH, \ + KC.LALT, SUPER_L, LT1_SP, LT2_SP, KC.LCTL, KC.NO, ], + # GAMING # ,-----------------------------------------. ,-----------------------------------------. # | Tab | ' | , | . | P | Y | | F | G | C | R | L | BKSP | @@ -131,48 +66,10 @@ keyboard.keymap = [ # [ # GAMING - KC.ESC, - KC.QUOT, - KC.COMM, - KC.DOT, - KC.P, - KC.Y, - KC.F, - KC.G, - KC.C, - KC.R, - KC.L, - KC.BSPC, - KC.LCTL, - KC.A, - KC.O, - KC.E, - KC.U, - KC.I, - KC.D, - KC.H, - KC.T, - KC.N, - KC.S, - KC.ENT, - KC.LSFT, - KC.SCLN, - KC.Q, - KC.J, - KC.K, - KC.X, - KC.B, - KC.M, - KC.W, - KC.V, - KC.Z, - KC.SLSH, - KC.LALT, - KC.SPC, - KC.SPC, - LT2_SP, - KC.LCTL, - KC.UP, + KC.ESC, KC.QUOT, KC.COMM, KC.DOT, KC.P, KC.Y, KC.F, KC.G, KC.C, KC.R, KC.L, KC.BSPC, \ + KC.LCTL, KC.A, KC.O, KC.E, KC.U, KC.I, KC.D, KC.H, KC.T, KC.N, KC.S, KC.ENT, \ + KC.LSFT, KC.SCLN, KC.Q, KC.J, KC.K, KC.X, KC.B, KC.M, KC.W, KC.V, KC.Z, KC.SLSH, \ + KC.LALT, KC.SPC, KC.SPC, LT2_SP, KC.LCTL, KC.UP, ], # RAISE1 # ,-----------------------------------------. ,-----------------------------------------. @@ -188,48 +85,10 @@ keyboard.keymap = [ # [ # RAISE1 - _______, - _______, - _______, - _______, - _______, - _______, - KC.PS_TOG, - XXXXXXX, - KC.N7, - KC.N8, - KC.N9, - KC.DEL, - _______, - _______, - _______, - _______, - _______, - _______, - XXXXXXX, - XXXXXXX, - KC.N4, - KC.N5, - KC.N6, - KC.BSLS, - _______, - _______, - _______, - _______, - _______, - _______, - XXXXXXX, - XXXXXXX, - KC.N1, - KC.N2, - KC.N3, - KC.MINS, - _______, - _______, - _______, - _______, - KC.EQL, - KC.N0, + _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, KC.N7, KC.N8, KC.N9, KC.DEL, \ + _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, KC.N4, KC.N5, KC.N6, KC.BSLS, \ + _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, KC.N1, KC.N2, KC.N3, KC.MINS, \ + _______, _______, _______, _______, KC.EQL, KC.N0, ], # RAISE2 # ,-----------------------------------------. ,-----------------------------------------. @@ -243,50 +102,13 @@ keyboard.keymap = [ # | | |/ / \ \ | | | # `---------------------' '------''-------------' # + [ # RAISE2 - _______, - KC.F9, - KC.F10, - KC.F11, - KC.F12, - _______, - _______, - _______, - _______, - KC.LBRC, - KC.RBRC, - KC.LSHIFT(KC.INS), - _______, - KC.F5, - KC.F6, - KC.F7, - KC.F8, - _______, - KC.HOME, - KC.LEFT, - KC.DOWN, - KC.UP, - KC.RGHT, - KC.END, - _______, - KC.F1, - KC.F2, - KC.F3, - KC.F4, - _______, - _______, - _______, - _______, - _______, - _______, - KC.BSLS, - _______, - _______, - _______, - _______, - KC.DF(0), - KC.DF(1), + _______, KC.F9, KC.F10, KC.F11, KC.F12, _______, _______, _______, _______, KC.LBRC, KC.RBRC, KC.LSHIFT(KC.INS), \ + _______, KC.F5, KC.F6, KC.F7, KC.F8, _______, KC.HOME, KC.LEFT, KC.DOWN, KC.UP, KC.RGHT, KC.END, \ + _______, KC.F1, KC.F2, KC.F3, KC.F4, _______, _______, _______, _______, _______, _______, KC.BSLS, \ + _______, _______, _______, _______, KC.DF(0), KC.DF(1), ], # GUI # ,-----------------------------------------. ,-----------------------------------------. @@ -299,109 +121,36 @@ keyboard.keymap = [ # | LALT | LGUI | /LT1_SP / \LT2_SP\ | | | # | | |/ / \ \ | | | # `---------------------' '------''-------------' + [ # GUI - _______, - KC.N1, - KC.N2, - KC.N3, - KC.N4, - KC.N5, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - KC.N6, - KC.N7, - KC.N8, - KC.N9, - KC.N0, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, + _______, KC.N1, KC.N2, KC.N3, KC.N4, KC.N5, _______, _______, _______, _______, _______, _______, \ + _______, KC.N6, KC.N7, KC.N8, KC.N9, KC.N0, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + + _______, _______, _______, _______, _______, _______ \ ], - # SYMBOLS - # ,-----------------------------------------. ,-----------------------------------------. - # | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del | - # |------+------+------+------+------+------| |------+------+------+------+------+------| - # | | | | | | | | | | | [ | ] | | - # |------+------+------+------+------+------| |------+------+------+------+------+------| - # | | | | | | |-------. ,-------| | | | | | | - # `-----------------------------------------/ / \ \-----------------------------------------' - # | LALT | LGUI | /LT1_SP / \LT2_SP\ | | | - # | | |/ / \ \ | | | - # `---------------------' '------''-------------' - # + # SYMBOLS + # ,-----------------------------------------. ,-----------------------------------------. + # | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del | + # |------+------+------+------+------+------| |------+------+------+------+------+------| + # | | | | | | | | | | | [ | ] | | + # |------+------+------+------+------+------| |------+------+------+------+------+------| + # | | | | | | |-------. ,-------| | | | | | | + # `-----------------------------------------/ / \ \-----------------------------------------' + # | LALT | LGUI | /LT1_SP / \LT2_SP\ | | | + # | | |/ / \ \ | | | + # `---------------------' '------''-------------' + # [ # SYMBOLS - _______, - KC.EXLM, - KC.AT, - KC.HASH, - KC.DLR, - KC.PERC, - KC.CIRC, - KC.AMPR, - KC.ASTR, - KC.LPRN, - KC.RPRN, - KC.DEL, - _______, - KC.RGB_HUI, - KC.RGB_HUD, - KC.RGB_VAI, - KC.RGB_VAD, - _______, - _______, - _______, - _______, - KC.LBRC, - KC.RBRC, - _______, - _______, - KC.RGB_RST, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - _______, - KC.RGB_TOG, - _______, - _______, - _______, - _______, - _______, - ], + _______, KC.EXLM, KC.AT, KC.HASH, KC.DLR, KC.PERC, KC.CIRC, KC.AMPR, KC.ASTR, KC.LPRN, KC.RPRN, KC.DEL, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC.LBRC, KC.RBRC, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, + ] + ] if __name__ == '__main__': - keyboard.go(hid_type=HIDModes.BLE) + keyboard.go(hid_type=HIDModes.USB)