diff --git a/docs/feature_dynamic_macros.md b/docs/feature_dynamic_macros.md index 01f2a0ca407..159cd852c00 100644 --- a/docs/feature_dynamic_macros.md +++ b/docs/feature_dynamic_macros.md @@ -60,7 +60,7 @@ Note, that direction indicates which macro it is, with `1` being Macro 1, `-1` b * `dynamic_macro_record_start_user(void)` - Triggered when you start recording a macro. * `dynamic_macro_play_user(int8_t direction)` - Triggered when you play back a macro. -* `dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record)` - Triggered on each keypress while recording a macro. +* `dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record, bool success)` - Triggered on each keypress while recording a macro. * `dynamic_macro_record_end_user(int8_t direction)` - Triggered when the macro recording is stopped. Additionally, you can call `dynamic_macro_led_blink()` to flash the backlights if that feature is enabled. diff --git a/docs/ja/feature_dynamic_macros.md b/docs/ja/feature_dynamic_macros.md index 951b9031276..ee068e4b283 100644 --- a/docs/ja/feature_dynamic_macros.md +++ b/docs/ja/feature_dynamic_macros.md @@ -65,7 +65,7 @@ direction がどのマクロであるかを示すことに注意してくださ * `dynamic_macro_record_start_user(void)` - マクロの記録を開始する時に起動されます。 * `dynamic_macro_play_user(int8_t direction)` - マクロを再生する時に起動されます。 -* `dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record)` - マクロの記録中に各キー押下で起動されます。 +* `dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record, bool success)` - マクロの記録中に各キー押下で起動されます。 * `dynamic_macro_record_end_user(int8_t direction)` - マクロの記録を停止した時に起動されます。 さらに、動的マクロ機能が有効な場合にバックライトを点滅させるために `dynamic_macro_led_blink()` を呼び出すことができます。 diff --git a/quantum/process_keycode/process_dynamic_macro.c b/quantum/process_keycode/process_dynamic_macro.c index 21eb0476e9a..032d147b002 100644 --- a/quantum/process_keycode/process_dynamic_macro.c +++ b/quantum/process_keycode/process_dynamic_macro.c @@ -33,7 +33,7 @@ __attribute__((weak)) void dynamic_macro_record_start_user(void) { dynamic_macro __attribute__((weak)) void dynamic_macro_play_user(int8_t direction) { dynamic_macro_led_blink(); } -__attribute__((weak)) void dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record) { dynamic_macro_led_blink(); } +__attribute__((weak)) void dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record, bool success) { if(!success) dynamic_macro_led_blink(); } __attribute__((weak)) void dynamic_macro_record_end_user(int8_t direction) { dynamic_macro_led_blink(); } @@ -97,6 +97,8 @@ void dynamic_macro_play(keyrecord_t *macro_buffer, keyrecord_t *macro_end, int8_ * @param record[in] The current keypress. */ void dynamic_macro_record_key(keyrecord_t *macro_buffer, keyrecord_t **macro_pointer, keyrecord_t *macro2_end, int8_t direction, keyrecord_t *record) { + bool success = false; + /* If we've just started recording, ignore all the key releases. */ if (!record->event.pressed && *macro_pointer == macro_buffer) { dprintln("dynamic macro: ignoring a leading key-up event"); @@ -110,12 +112,14 @@ void dynamic_macro_record_key(keyrecord_t *macro_buffer, keyrecord_t **macro_poi **macro_pointer = *record; *macro_pointer += direction; } else { - // TBD: perform some action when the recording is still in progress but has consumed the available macro buffer dprint("dynamic macro: end of buffer. New key record not added to buffer.\n"); + success = false; + dynamic_macro_record_key_user(direction, record, success); } dprintf("dynamic macro: slot %d length: %d/%d\n", DYNAMIC_MACRO_CURRENT_SLOT(), DYNAMIC_MACRO_CURRENT_LENGTH(macro_buffer, *macro_pointer), DYNAMIC_MACRO_CURRENT_CAPACITY(macro_buffer, macro2_end)); - dynamic_macro_record_key_user(direction, record); + success = true; + dynamic_macro_record_key_user(direction, record, success); } /** diff --git a/quantum/process_keycode/process_dynamic_macro.h b/quantum/process_keycode/process_dynamic_macro.h index 39036541b8d..fae0d1de22b 100644 --- a/quantum/process_keycode/process_dynamic_macro.h +++ b/quantum/process_keycode/process_dynamic_macro.h @@ -37,5 +37,5 @@ void dynamic_macro_led_blink(void); bool process_dynamic_macro(uint16_t keycode, keyrecord_t *record); void dynamic_macro_record_start_user(void); void dynamic_macro_play_user(int8_t direction); -void dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record); +void dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record, bool success); void dynamic_macro_record_end_user(int8_t direction);