diff --git a/plugins/Kaleidoscope-DynamicMacros/src/kaleidoscope/plugin/DynamicMacros.cpp b/plugins/Kaleidoscope-DynamicMacros/src/kaleidoscope/plugin/DynamicMacros.cpp index 39fa0977..c80fd15a 100644 --- a/plugins/Kaleidoscope-DynamicMacros/src/kaleidoscope/plugin/DynamicMacros.cpp +++ b/plugins/Kaleidoscope-DynamicMacros/src/kaleidoscope/plugin/DynamicMacros.cpp @@ -188,7 +188,7 @@ void DynamicMacros::play(uint8_t macro_id) { case MACRO_ACTION_STEP_TAP_SEQUENCE: { while (true) { - key.setFlags(0); + key.setFlags(Runtime.storage().read(pos++)); key.setKeyCode(Runtime.storage().read(pos++)); if (key == Key_NoKey) break; @@ -240,6 +240,17 @@ EventHandlerResult DynamicMacros::onKeyEvent(KeyEvent &event) { return EventHandlerResult::EVENT_CONSUMED; } +EventHandlerResult DynamicMacros::beforeReportingState(const KeyEvent &event) { + // Here we add keycodes to the HID report for keys held in a macro sequence. + // This is necessary because Kaleidoscope doesn't know about the supplemental + // `active_macro_keys_[]` array. + for (Key key : active_macro_keys_) { + if (key != Key_NoKey) + Runtime.addToReport(key); + } + return EventHandlerResult::OK; +} + EventHandlerResult DynamicMacros::onNameQuery() { return ::Focus.sendName(F("DynamicMacros")); } diff --git a/plugins/Kaleidoscope-DynamicMacros/src/kaleidoscope/plugin/DynamicMacros.h b/plugins/Kaleidoscope-DynamicMacros/src/kaleidoscope/plugin/DynamicMacros.h index 93a0a2af..1678187f 100644 --- a/plugins/Kaleidoscope-DynamicMacros/src/kaleidoscope/plugin/DynamicMacros.h +++ b/plugins/Kaleidoscope-DynamicMacros/src/kaleidoscope/plugin/DynamicMacros.h @@ -39,6 +39,7 @@ class DynamicMacros : public kaleidoscope::Plugin { public: EventHandlerResult onNameQuery(); EventHandlerResult onKeyEvent(KeyEvent &event); + EventHandlerResult beforeReportingState(const KeyEvent &event); EventHandlerResult onFocusEvent(const char *command); static void reserve_storage(uint16_t size); diff --git a/plugins/Kaleidoscope-Macros/src/kaleidoscope/plugin/Macros.cpp b/plugins/Kaleidoscope-Macros/src/kaleidoscope/plugin/Macros.cpp index c1c655c8..9b33c370 100644 --- a/plugins/Kaleidoscope-Macros/src/kaleidoscope/plugin/Macros.cpp +++ b/plugins/Kaleidoscope-Macros/src/kaleidoscope/plugin/Macros.cpp @@ -154,7 +154,7 @@ void Macros::play(const macro_t *macro_p) { case MACRO_ACTION_STEP_TAP_SEQUENCE: { while (true) { - key.setFlags(0); + key.setFlags(pgm_read_byte(macro_p++)); key.setKeyCode(pgm_read_byte(macro_p++)); if (key == Key_NoKey) break;