Macro keycode name refactoring (#18958)

This commit is contained in:
Nick Brassel 2022-11-05 23:22:11 +11:00 committed by GitHub
parent fe00c80211
commit 4d33f356a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 243 additions and 116 deletions

View File

@ -3,131 +3,227 @@
"0x7700": { "0x7700": {
"group": "macro", "group": "macro",
"key": "MACRO_0" "key": "QK_MACRO_0",
"aliases": [
"MC_0"
]
}, },
"0x7701": { "0x7701": {
"group": "macro", "group": "macro",
"key": "MACRO_1" "key": "QK_MACRO_1",
"aliases": [
"MC_1"
]
}, },
"0x7702": { "0x7702": {
"group": "macro", "group": "macro",
"key": "MACRO_2" "key": "QK_MACRO_2",
"aliases": [
"MC_2"
]
}, },
"0x7703": { "0x7703": {
"group": "macro", "group": "macro",
"key": "MACRO_3" "key": "QK_MACRO_3",
"aliases": [
"MC_3"
]
}, },
"0x7704": { "0x7704": {
"group": "macro", "group": "macro",
"key": "MACRO_4" "key": "QK_MACRO_4",
"aliases": [
"MC_4"
]
}, },
"0x7705": { "0x7705": {
"group": "macro", "group": "macro",
"key": "MACRO_5" "key": "QK_MACRO_5",
"aliases": [
"MC_5"
]
}, },
"0x7706": { "0x7706": {
"group": "macro", "group": "macro",
"key": "MACRO_6" "key": "QK_MACRO_6",
"aliases": [
"MC_6"
]
}, },
"0x7707": { "0x7707": {
"group": "macro", "group": "macro",
"key": "MACRO_7" "key": "QK_MACRO_7",
"aliases": [
"MC_7"
]
}, },
"0x7708": { "0x7708": {
"group": "macro", "group": "macro",
"key": "MACRO_8" "key": "QK_MACRO_8",
"aliases": [
"MC_8"
]
}, },
"0x7709": { "0x7709": {
"group": "macro", "group": "macro",
"key": "MACRO_9" "key": "QK_MACRO_9",
"aliases": [
"MC_9"
]
}, },
"0x770A": { "0x770A": {
"group": "macro", "group": "macro",
"key": "MACRO_10" "key": "QK_MACRO_10",
"aliases": [
"MC_10"
]
}, },
"0x770B": { "0x770B": {
"group": "macro", "group": "macro",
"key": "MACRO_11" "key": "QK_MACRO_11",
"aliases": [
"MC_11"
]
}, },
"0x770C": { "0x770C": {
"group": "macro", "group": "macro",
"key": "MACRO_12" "key": "QK_MACRO_12",
"aliases": [
"MC_12"
]
}, },
"0x770D": { "0x770D": {
"group": "macro", "group": "macro",
"key": "MACRO_13" "key": "QK_MACRO_13",
"aliases": [
"MC_13"
]
}, },
"0x770E": { "0x770E": {
"group": "macro", "group": "macro",
"key": "MACRO_14" "key": "QK_MACRO_14",
"aliases": [
"MC_14"
]
}, },
"0x770F": { "0x770F": {
"group": "macro", "group": "macro",
"key": "MACRO_15" "key": "QK_MACRO_15",
"aliases": [
"MC_15"
]
}, },
"0x7710": { "0x7710": {
"group": "macro", "group": "macro",
"key": "MACRO_16" "key": "QK_MACRO_16",
"aliases": [
"MC_16"
]
}, },
"0x7711": { "0x7711": {
"group": "macro", "group": "macro",
"key": "MACRO_17" "key": "QK_MACRO_17",
"aliases": [
"MC_17"
]
}, },
"0x7712": { "0x7712": {
"group": "macro", "group": "macro",
"key": "MACRO_18" "key": "QK_MACRO_18",
"aliases": [
"MC_18"
]
}, },
"0x7713": { "0x7713": {
"group": "macro", "group": "macro",
"key": "MACRO_19" "key": "QK_MACRO_19",
"aliases": [
"MC_19"
]
}, },
"0x7714": { "0x7714": {
"group": "macro", "group": "macro",
"key": "MACRO_20" "key": "QK_MACRO_20",
"aliases": [
"MC_20"
]
}, },
"0x7715": { "0x7715": {
"group": "macro", "group": "macro",
"key": "MACRO_21" "key": "QK_MACRO_21",
"aliases": [
"MC_21"
]
}, },
"0x7716": { "0x7716": {
"group": "macro", "group": "macro",
"key": "MACRO_22" "key": "QK_MACRO_22",
"aliases": [
"MC_22"
]
}, },
"0x7717": { "0x7717": {
"group": "macro", "group": "macro",
"key": "MACRO_23" "key": "QK_MACRO_23",
"aliases": [
"MC_23"
]
}, },
"0x7718": { "0x7718": {
"group": "macro", "group": "macro",
"key": "MACRO_24" "key": "QK_MACRO_24",
"aliases": [
"MC_24"
]
}, },
"0x7719": { "0x7719": {
"group": "macro", "group": "macro",
"key": "MACRO_25" "key": "QK_MACRO_25",
"aliases": [
"MC_25"
]
}, },
"0x771A": { "0x771A": {
"group": "macro", "group": "macro",
"key": "MACRO_26" "key": "QK_MACRO_26",
"aliases": [
"MC_26"
]
}, },
"0x771B": { "0x771B": {
"group": "macro", "group": "macro",
"key": "MACRO_27" "key": "QK_MACRO_27",
"aliases": [
"MC_27"
]
}, },
"0x771C": { "0x771C": {
"group": "macro", "group": "macro",
"key": "MACRO_28" "key": "QK_MACRO_28",
"aliases": [
"MC_28"
]
}, },
"0x771D": { "0x771D": {
"group": "macro", "group": "macro",
"key": "MACRO_29" "key": "QK_MACRO_29",
"aliases": [
"MC_29"
]
}, },
"0x771E": { "0x771E": {
"group": "macro", "group": "macro",
"key": "MACRO_30" "key": "QK_MACRO_30",
"aliases": [
"MC_30"
]
}, },
"0x771F": { "0x771F": {
"group": "macro", "group": "macro",
"key": "MACRO_31" "key": "QK_MACRO_31",
"aliases": [
"MC_31"
]
} }
} }
} }

View File

@ -56,19 +56,19 @@ You can now define up to 32 macros in your `keymap.json` file, as used by [QMK C
"keyboard": "handwired/my_macropad", "keyboard": "handwired/my_macropad",
"keymap": "my_keymap", "keymap": "my_keymap",
"macros": [ "macros": [
[ // first listed is MACRO_0... [ // first listed is QK_MACRO_0...
{"action":"down", "keycodes": ["LSFT"]}, {"action":"down", "keycodes": ["LSFT"]},
"hello world1", "hello world1",
{"action": "up","keycodes": ["LSFT"]} {"action": "up","keycodes": ["LSFT"]}
], ],
[ // ...then MACRO_1... [ // ...then QK_MACRO_1...
{"action":"tap", "keycodes": ["LCTL", "LALT", "DEL"]} {"action":"tap", "keycodes": ["LCTL", "LALT", "DEL"]}
], ],
[ // ...then MACRO_2... [ // ...then QK_MACRO_2...
"ding!", "ding!",
{"action":"beep"} {"action":"beep"}
], ],
[ // ...and MACRO_3. [ // ...and QK_MACRO_3.
{"action":"tap", "keycodes": ["F1"]}, {"action":"tap", "keycodes": ["F1"]},
{"action":"delay", "duration": "1000"}, {"action":"delay", "duration": "1000"},
{"action":"tap", "keycodes": ["PGDN"]} {"action":"tap", "keycodes": ["PGDN"]}
@ -76,7 +76,7 @@ You can now define up to 32 macros in your `keymap.json` file, as used by [QMK C
], ],
"layout": "LAYOUT_all", "layout": "LAYOUT_all",
"layers": [ "layers": [
["MACRO_0", "MACRO_1", "MACRO_2", "MACRO_3"] ["QK_MACRO_0", "QK_MACRO_1", "QK_MACRO_2", "QK_MACRO_3"]
] ]
} }
``` ```

View File

@ -122,26 +122,26 @@ There is a way to support custom keycodes: if the logic for a custom keycode is
```c ```c
enum custom_keycodes { enum custom_keycodes {
MACRO_1 = SAFE_RANGE, CUSTOM_1 = SAFE_RANGE,
MACRO_2, CUSTOM_2,
MACRO_3 CUSTOM_3
}; };
... ...
bool process_record_user(uint16_t keycode, keyrecord_t *record) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch(keycode) { switch(keycode) {
case MACRO_1: case CUSTOM_1:
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("This is macro #1."); SEND_STRING("This is custom keycode #1.");
} }
return false; return false;
case MACRO_2: case CUSTOM_2:
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("This is macro #2."); SEND_STRING("This is custom keycode #2.");
} }
return false; return false;
case MACRO_3: case CUSTOM_3:
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("This is macro #3."); SEND_STRING("This is custom keycode #3.");
} }
return false; return false;
} }
@ -153,9 +153,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
```c ```c
enum keyboard_keycodes { enum keyboard_keycodes {
MACRO_1 = SAFE_RANGE, CUSTOM_1 = SAFE_RANGE,
MACRO_2, CUSTOM_2,
MACRO_3, CUSTOM_3,
NEW_SAFE_RANGE // Important! NEW_SAFE_RANGE // Important!
}; };
``` ```
@ -165,19 +165,19 @@ enum keyboard_keycodes {
```c ```c
bool process_record_kb(uint16_t keycode, keyrecord_t *record) { bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
switch(keycode) { switch(keycode) {
case MACRO_1: case CUSTOM_1:
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("This is macro #1."); SEND_STRING("This is custom keycode #1.");
} }
return false; return false;
case MACRO_2: case CUSTOM_2:
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("This is macro #2."); SEND_STRING("This is custom keycode #2.");
} }
return false; return false;
case MACRO_3: case CUSTOM_3:
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("This is macro #3."); SEND_STRING("This is custom keycode #3.");
} }
return false; return false;
} }

View File

@ -33,7 +33,7 @@ You can define up to 32 macros in a `keymap.json` file, as used by [Configurator
], ],
"layout": "LAYOUT_all", "layout": "LAYOUT_all",
"layers": [ "layers": [
["MACRO_0", "MACRO_1", "MACRO_2", "MACRO_3"] ["QK_MACRO_0", "QK_MACRO_1", "QK_MACRO_2", "QK_MACRO_3"]
] ]
} }
``` ```
@ -52,7 +52,7 @@ If you type in a language other than English, or use a non-QWERTY layout like Co
], ],
"layout": "LAYOUT_all", "layout": "LAYOUT_all",
"layers": [ "layers": [
["MACRO_0"] ["QK_MACRO_0"]
] ]
} }
``` ```
@ -199,7 +199,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
#### Advanced Macros #### Advanced Macros
In addition to the `process_record_user()` function, is the `post_process_record_user()` function. This runs after `process_record` and can be used to do things after a keystroke has been sent. This is useful if you want to have a key pressed before and released after a normal key, for instance. In addition to the `process_record_user()` function, is the `post_process_record_user()` function. This runs after `process_record` and can be used to do things after a keystroke has been sent. This is useful if you want to have a key pressed before and released after a normal key, for instance.
In this example, we modify most normal keypresses so that `F22` is pressed before the keystroke is normally sent, and release it __only after__ it's been released. In this example, we modify most normal keypresses so that `F22` is pressed before the keystroke is normally sent, and release it __only after__ it's been released.

View File

@ -127,26 +127,26 @@ enum layer_names {
```c ```c
enum custom_keycodes { enum custom_keycodes {
MACRO_1 = SAFE_RANGE, CUSTOM_1 = SAFE_RANGE,
MACRO_2, CUSTOM_2,
MACRO_3 CUSTOM_3
}; };
... ...
bool process_record_user(uint16_t keycode, keyrecord_t *record) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch(keycode) { switch(keycode) {
case MACRO_1: case CUSTOM_1:
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("This is macro #1."); SEND_STRING("This is custom keycode #1.");
} }
return false; return false;
case MACRO_2: case CUSTOM_2:
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("This is macro #2."); SEND_STRING("This is custom keycode #2.");
} }
return false; return false;
case MACRO_3: case CUSTOM_3:
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("This is macro #3."); SEND_STRING("This is custom keycode #3.");
} }
return false; return false;
} }
@ -158,9 +158,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
```c ```c
enum keyboard_keycodes { enum keyboard_keycodes {
MACRO_1 = SAFE_RANGE, CUSTOM_1 = SAFE_RANGE,
MACRO_2, CUSTOM_2,
MACRO_3, CUSTOM_3,
NEW_SAFE_RANGE // 重要! NEW_SAFE_RANGE // 重要!
}; };
``` ```
@ -170,19 +170,19 @@ enum keyboard_keycodes {
```c ```c
bool process_record_kb(uint16_t keycode, keyrecord_t *record) { bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
switch(keycode) { switch(keycode) {
case MACRO_1: case CUSTOM_1:
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("This is macro #1."); SEND_STRING("This is custom keycode #1.");
} }
return false; return false;
case MACRO_2: case CUSTOM_2:
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("This is macro #2."); SEND_STRING("This is custom keycode #2.");
} }
return false; return false;
case MACRO_3: case CUSTOM_3:
if (record->event.pressed) { if (record->event.pressed) {
SEND_STRING("This is macro #3."); SEND_STRING("This is custom keycode #3.");
} }
return false; return false;
} }

View File

@ -2,7 +2,7 @@
"keyboard": "handwired/pytest/basic", "keyboard": "handwired/pytest/basic",
"keymap": "default_json", "keymap": "default_json",
"layout": "LAYOUT_ortho_1x1", "layout": "LAYOUT_ortho_1x1",
"layers": [["MACRO_0"]], "layers": [["QK_MACRO_0"]],
"macros": [ "macros": [
[ [
"Hello, World!", "Hello, World!",

View File

@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, _______, KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, _______,
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______,
_______, _______, _______, MACRO_1, _______, MACRO_0, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY _______, _______, _______, MC_1, _______, MC_0, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
), ),
[_RAISE] = LAYOUT( [_RAISE] = LAYOUT(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, _______, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, _______,

View File

@ -266,7 +266,7 @@ def generate_c(keymap_json):
new_macro = "".join(macro) new_macro = "".join(macro)
new_macro = new_macro.replace('""', '') new_macro = new_macro.replace('""', '')
macro_txt.append(f' case MACRO_{i}:') macro_txt.append(f' case QK_MACRO_{i}:')
macro_txt.append(f' SEND_STRING({new_macro});') macro_txt.append(f' SEND_STRING({new_macro});')
macro_txt.append(' return false;') macro_txt.append(' return false;')

View File

@ -150,8 +150,8 @@ def test_json2c():
def test_json2c_macros(): def test_json2c_macros():
result = check_subcommand("json2c", 'keyboards/handwired/pytest/macro/keymaps/default/keymap.json') result = check_subcommand("json2c", 'keyboards/handwired/pytest/macro/keymaps/default/keymap.json')
check_returncode(result) check_returncode(result)
assert 'LAYOUT_ortho_1x1(MACRO_0)' in result.stdout assert 'LAYOUT_ortho_1x1(QK_MACRO_0)' in result.stdout
assert 'case MACRO_0:' in result.stdout assert 'case QK_MACRO_0:' in result.stdout
assert 'SEND_STRING("Hello, World!"SS_TAP(X_ENTER));' in result.stdout assert 'SEND_STRING("Hello, World!"SS_TAP(X_ENTER));' in result.stdout

View File

@ -582,38 +582,38 @@ enum qk_keycode_defines {
QK_STENO_GEMINI = 0x74F1, QK_STENO_GEMINI = 0x74F1,
QK_STENO_COMB = 0x74F2, QK_STENO_COMB = 0x74F2,
QK_STENO_COMB_MAX = 0x74FC, QK_STENO_COMB_MAX = 0x74FC,
MACRO_0 = 0x7700, QK_MACRO_0 = 0x7700,
MACRO_1 = 0x7701, QK_MACRO_1 = 0x7701,
MACRO_2 = 0x7702, QK_MACRO_2 = 0x7702,
MACRO_3 = 0x7703, QK_MACRO_3 = 0x7703,
MACRO_4 = 0x7704, QK_MACRO_4 = 0x7704,
MACRO_5 = 0x7705, QK_MACRO_5 = 0x7705,
MACRO_6 = 0x7706, QK_MACRO_6 = 0x7706,
MACRO_7 = 0x7707, QK_MACRO_7 = 0x7707,
MACRO_8 = 0x7708, QK_MACRO_8 = 0x7708,
MACRO_9 = 0x7709, QK_MACRO_9 = 0x7709,
MACRO_10 = 0x770A, QK_MACRO_10 = 0x770A,
MACRO_11 = 0x770B, QK_MACRO_11 = 0x770B,
MACRO_12 = 0x770C, QK_MACRO_12 = 0x770C,
MACRO_13 = 0x770D, QK_MACRO_13 = 0x770D,
MACRO_14 = 0x770E, QK_MACRO_14 = 0x770E,
MACRO_15 = 0x770F, QK_MACRO_15 = 0x770F,
MACRO_16 = 0x7710, QK_MACRO_16 = 0x7710,
MACRO_17 = 0x7711, QK_MACRO_17 = 0x7711,
MACRO_18 = 0x7712, QK_MACRO_18 = 0x7712,
MACRO_19 = 0x7713, QK_MACRO_19 = 0x7713,
MACRO_20 = 0x7714, QK_MACRO_20 = 0x7714,
MACRO_21 = 0x7715, QK_MACRO_21 = 0x7715,
MACRO_22 = 0x7716, QK_MACRO_22 = 0x7716,
MACRO_23 = 0x7717, QK_MACRO_23 = 0x7717,
MACRO_24 = 0x7718, QK_MACRO_24 = 0x7718,
MACRO_25 = 0x7719, QK_MACRO_25 = 0x7719,
MACRO_26 = 0x771A, QK_MACRO_26 = 0x771A,
MACRO_27 = 0x771B, QK_MACRO_27 = 0x771B,
MACRO_28 = 0x771C, QK_MACRO_28 = 0x771C,
MACRO_29 = 0x771D, QK_MACRO_29 = 0x771D,
MACRO_30 = 0x771E, QK_MACRO_30 = 0x771E,
MACRO_31 = 0x771F, QK_MACRO_31 = 0x771F,
BL_ON = 0x7800, BL_ON = 0x7800,
BL_OFF = 0x7801, BL_OFF = 0x7801,
BL_DEC = 0x7802, BL_DEC = 0x7802,
@ -1000,6 +1000,38 @@ enum qk_keycode_defines {
CK_UP = CLICKY_UP, CK_UP = CLICKY_UP,
CK_DOWN = CLICKY_DOWN, CK_DOWN = CLICKY_DOWN,
CK_RST = CLICKY_RESET, CK_RST = CLICKY_RESET,
MC_0 = QK_MACRO_0,
MC_1 = QK_MACRO_1,
MC_2 = QK_MACRO_2,
MC_3 = QK_MACRO_3,
MC_4 = QK_MACRO_4,
MC_5 = QK_MACRO_5,
MC_6 = QK_MACRO_6,
MC_7 = QK_MACRO_7,
MC_8 = QK_MACRO_8,
MC_9 = QK_MACRO_9,
MC_10 = QK_MACRO_10,
MC_11 = QK_MACRO_11,
MC_12 = QK_MACRO_12,
MC_13 = QK_MACRO_13,
MC_14 = QK_MACRO_14,
MC_15 = QK_MACRO_15,
MC_16 = QK_MACRO_16,
MC_17 = QK_MACRO_17,
MC_18 = QK_MACRO_18,
MC_19 = QK_MACRO_19,
MC_20 = QK_MACRO_20,
MC_21 = QK_MACRO_21,
MC_22 = QK_MACRO_22,
MC_23 = QK_MACRO_23,
MC_24 = QK_MACRO_24,
MC_25 = QK_MACRO_25,
MC_26 = QK_MACRO_26,
MC_27 = QK_MACRO_27,
MC_28 = QK_MACRO_28,
MC_29 = QK_MACRO_29,
MC_30 = QK_MACRO_30,
MC_31 = QK_MACRO_31,
RGB_MOD = RGB_MODE_FORWARD, RGB_MOD = RGB_MODE_FORWARD,
RGB_RMOD = RGB_MODE_REVERSE, RGB_RMOD = RGB_MODE_REVERSE,
RGB_M_P = RGB_MODE_PLAIN, RGB_M_P = RGB_MODE_PLAIN,
@ -1108,8 +1140,7 @@ enum qk_keycode_defines {
#define IS_PROGRAMMABLE_BUTTON_KEYCODE(code) ((code) >= QK_PROGRAMMABLE_BUTTON_1 && (code) <= QK_PROGRAMMABLE_BUTTON_32) #define IS_PROGRAMMABLE_BUTTON_KEYCODE(code) ((code) >= QK_PROGRAMMABLE_BUTTON_1 && (code) <= QK_PROGRAMMABLE_BUTTON_32)
#define IS_AUDIO_KEYCODE(code) ((code) >= AU_ON && (code) <= MUV_DE) #define IS_AUDIO_KEYCODE(code) ((code) >= AU_ON && (code) <= MUV_DE)
#define IS_STENO_KEYCODE(code) ((code) >= QK_STENO_BOLT && (code) <= QK_STENO_COMB_MAX) #define IS_STENO_KEYCODE(code) ((code) >= QK_STENO_BOLT && (code) <= QK_STENO_COMB_MAX)
#define IS_MACRO_KEYCODE(code) ((code) >= MACRO_0 && (code) <= MACRO_31) #define IS_MACRO_KEYCODE(code) ((code) >= QK_MACRO_0 && (code) <= QK_MACRO_31)
#define IS_BACKLIGHT_KEYCODE(code) ((code) >= BL_ON && (code) <= BL_BRTG) #define IS_BACKLIGHT_KEYCODE(code) ((code) >= BL_ON && (code) <= BL_BRTG)
#define IS_RGB_KEYCODE(code) ((code) >= RGB_TOG && (code) <= RGB_MODE_TWINKLE) #define IS_RGB_KEYCODE(code) ((code) >= RGB_TOG && (code) <= RGB_MODE_TWINKLE)
#define IS_QUANTUM_KEYCODE(code) ((code) >= QK_BOOTLOADER && (code) <= QK_AUTOCORRECT_TOGGLE) #define IS_QUANTUM_KEYCODE(code) ((code) >= QK_BOOTLOADER && (code) <= QK_AUTOCORRECT_TOGGLE)