Add `DYN_REC_STOP` to dynamic macros

Dynamic macro functionality is modified to check for `DYN_REC_STOP`, so
that macro recording can be stopped with a designated key combination
(e.g. `qs` or anything) instead of mandating the use of a `_DYN` layer.

`_DYN` layer stopping can still be done by passing `DYN_REC_STOP` within
`process_record_user()`:

    bool process_record_user(uint16_t keycode, keyrecord_t *record) {
      uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode);
      if (!process_record_dynamic_macro(macro_kc, record)) {
        return false;
      }
      return true;
    }
daktil_manuform
Weiyi Lou 2017-04-29 22:02:01 +10:00
parent 26bbfd7812
commit 4ff40a551a
1 changed files with 3 additions and 3 deletions

View File

@ -40,6 +40,7 @@
enum dynamic_macro_keycodes { enum dynamic_macro_keycodes {
DYN_REC_START1 = DYNAMIC_MACRO_RANGE, DYN_REC_START1 = DYNAMIC_MACRO_RANGE,
DYN_REC_START2, DYN_REC_START2,
DYN_REC_STOP,
DYN_MACRO_PLAY1, DYN_MACRO_PLAY1,
DYN_MACRO_PLAY2, DYN_MACRO_PLAY2,
}; };
@ -209,9 +210,8 @@ bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record)
} else { } else {
/* A macro is being recorded right now. */ /* A macro is being recorded right now. */
switch (keycode) { switch (keycode) {
case MO(_DYN): case DYN_REC_STOP:
/* Use the layer key used to access the macro recording as /* Stop the macro recording. */
* a stop button. */
if (record->event.pressed) { /* Ignore the initial release if (record->event.pressed) { /* Ignore the initial release
* just after the recoding * just after the recoding
* starts. */ * starts. */