From 02655690f48ec64ba982499cd3272ee6076b73b3 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Thu, 17 Mar 2022 14:19:34 -0700 Subject: [PATCH] [Core] Add compile/make macro to core (#15959) * [Core] Add KC_MAKE keycode to core fix linting fix testing error work around test idiocyncracies fix more lint something something stupid tests add doc * updates based on feedback * Add bad names * Fixup docs * semantics but cleaner Co-authored-by: precondition <57645186+precondition@users.noreply.github.com> * Hide oneshot checks behind preprocessors * Move no-compile option around * Fix formatting * make shift optional * Make opt in * fix formatting * update send string function name Co-authored-by: Joel Challis Co-authored-by: precondition <57645186+precondition@users.noreply.github.com> Co-authored-by: Joel Challis --- docs/config_options.md | 2 ++ docs/keycodes.md | 11 ++++++----- docs/quantum_keycodes.md | 11 ++++++----- quantum/quantum.c | 20 ++++++++++++++++++++ quantum/quantum_keycodes.h | 2 ++ 5 files changed, 36 insertions(+), 10 deletions(-) diff --git a/docs/config_options.md b/docs/config_options.md index 838c4d86fdb09d6225da1d335a61d0ef6072681b..8227a0e074f9f6540cc9788f0669dd03164401f9 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -131,6 +131,8 @@ If you define these options you will disable the associated feature, which can s If you define these options you will enable the associated feature, which may increase your code size. +* `#define ENABLE_COMPILE_KEYCODE` + * Enables the `QK_MAKE` keycode * `#define FORCE_NKRO` * NKRO by default requires to be turned on, this forces it on during keyboard startup regardless of EEPROM setting. NKRO can still be turned off but will be turned on again if the keyboard reboots. * `#define STRICT_LAYER_RELEASE` diff --git a/docs/keycodes.md b/docs/keycodes.md index 58ce43d309c5e740ff9512845254466e3d070b54..942e0a661609a395a76f31a4a82dcc0bebaba2f8 100644 --- a/docs/keycodes.md +++ b/docs/keycodes.md @@ -219,11 +219,12 @@ See also: [Basic Keycodes](keycodes_basic.md) See also: [Quantum Keycodes](quantum_keycodes.md#qmk-keycodes) -|Key |Aliases |Description | -|-----------------|---------|-------------------------------------------------------| -|`QK_BOOTLOADER` |`QK_BOOT`|Put the keyboard into bootloader mode for flashing | -|`QK_DEBUG_TOGGLE`|`DB_TOGG`|Toggle debug mode | -|`QK_CLEAR_EEPROM`|`EE_CLR` |Reinitializes the keyboard's EEPROM (persistent memory)| +|Key |Aliases |Description | +|-----------------|---------|---------------------------------------------------------------------------------| +|`QK_BOOTLOADER` |`QK_BOOT`|Put the keyboard into bootloader mode for flashing | +|`QK_DEBUG_TOGGLE`|`DB_TOGG`|Toggle debug mode | +|`QK_CLEAR_EEPROM`|`EE_CLR` |Reinitializes the keyboard's EEPROM (persistent memory) | +|`QK_MAKE` | |Sends `qmk compile -kb (keyboard) -km (keymap)`, or `qmk flash` if shift is held | ## Audio Keys :id=audio-keys diff --git a/docs/quantum_keycodes.md b/docs/quantum_keycodes.md index 8e29e05886c0c8976b1b8775d253a0c9df0996d1..46a8b7de1943a2be34f079f818728a0080d72331 100644 --- a/docs/quantum_keycodes.md +++ b/docs/quantum_keycodes.md @@ -8,8 +8,9 @@ On this page we have documented keycodes between `0x00FF` and `0xFFFF` which are ## QMK Keycodes :id=qmk-keycodes -|Key |Aliases |Description | -|-----------------|---------|-------------------------------------------------------| -|`QK_BOOTLOADER` |`QK_BOOT`|Put the keyboard into bootloader mode for flashing | -|`QK_DEBUG_TOGGLE`|`DB_TOGG`|Toggle debug mode | -|`QK_CLEAR_EEPROM`|`EE_CLR` |Reinitializes the keyboard's EEPROM (persistent memory)| +|Key |Aliases |Description | +|-----------------|---------|---------------------------------------------------------------------------------| +|`QK_BOOTLOADER` |`QK_BOOT`|Put the keyboard into bootloader mode for flashing | +|`QK_DEBUG_TOGGLE`|`DB_TOGG`|Toggle debug mode | +|`QK_CLEAR_EEPROM`|`EE_CLR` |Reinitializes the keyboard's EEPROM (persistent memory) | +|`QK_MAKE` | |Sends `qmk compile -kb (keyboard) -km (keymap)`, or `qmk flash` if shift is held | diff --git a/quantum/quantum.c b/quantum/quantum.c index ef6e5ac1df75b9c35869d7555bc18b09ad767d5c..d4e91ddd37fb590f5db5f32273697f92c44aae81 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -357,6 +357,26 @@ bool process_record_quantum(keyrecord_t *record) { case ONESHOT_DISABLE: oneshot_disable(); break; +#endif +#ifdef ENABLE_COMPILE_KEYCODE + case QK_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader + { +# ifdef NO_ACTION_ONESHOT + const uint8_t temp_mod = mod_config(get_mods()); +# else + const uint8_t temp_mod = mod_config(get_mods() | get_oneshot_mods()); + clear_oneshot_mods(); +# endif + clear_mods(); + + SEND_STRING_DELAY("qmk", TAP_CODE_DELAY); + if (temp_mod & MOD_MASK_SHIFT) { // if shift is held, flash rather than compile + SEND_STRING_DELAY(" flash ", TAP_CODE_DELAY); + } else { + SEND_STRING_DELAY(" compile ", TAP_CODE_DELAY); + } + SEND_STRING_DELAY("-kb " QMK_KEYBOARD " -km " QMK_KEYMAP SS_TAP(X_ENTER), TAP_CODE_DELAY); + } #endif } } diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index 2552c48165fdedf5c2295da49ae1445e5260d69f..dacfe5bdcd27e3fc6837d92380c147dfbb551999 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -595,6 +595,8 @@ enum quantum_keycodes { MAGIC_TOGGLE_CONTROL_CAPSLOCK, + QK_MAKE, + // Start of custom keycode range for keyboards and keymaps - always leave at the end SAFE_RANGE };