~ruther/qmk_firmware

d16db6936715a98b6ae769463d5ccafab25b7203 — XScorpion2 6 years ago a07da6e
Added mod carry over from press to release. (#5866)

Update docs/feature_space_cadet.md

Co-Authored-By: fauxpark <fauxpark@gmail.com>
2 files changed, 13 insertions(+), 0 deletions(-)

M docs/feature_space_cadet.md
M quantum/process_keycode/process_space_cadet.c
M docs/feature_space_cadet.md => docs/feature_space_cadet.md +1 -0
@@ 43,6 43,7 @@ By default Space Cadet assumes a US ANSI layout, but if your layout uses differe
|`LAPO_KEYS`     |`KC_LALT, KC_LSFT, KC_9`       |Send `KC_LALT` when held, the mod `KC_LSFT` with the key `KC_9` when tapped.     |
|`RAPC_KEYS`     |`KC_RALT, KC_RSFT, KC_0`       |Send `KC_RALT` when held, the mod `KC_RSFT` with the key `KC_0` when tapped.     |
|`SFTENT_KEYS`   |`KC_RSFT, KC_TRNS, SFTENT_KEY` |Send `KC_RSFT` when held, no mod with the key `SFTENT_KEY` when tapped.          |
|`SPACE_CADET_MODIFIER_CARRYOVER`   |*Not defined* |Store current modifiers before the hold mod is pressed and use them with the tap mod and keycode. Useful for when you frequently release a modifier before triggering Space Cadet.  |


## Obsolete Configuration

M quantum/process_keycode/process_space_cadet.c => quantum/process_keycode/process_space_cadet.c +12 -0
@@ 81,11 81,17 @@

static uint8_t sc_last = 0;
static uint16_t sc_timer = 0;
#ifdef SPACE_CADET_MODIFIER_CARRYOVER
static uint8_t sc_mods = 0;
#endif

void perform_space_cadet(keyrecord_t *record, uint8_t holdMod, uint8_t tapMod, uint8_t keycode) {
  if (record->event.pressed) {
    sc_last = holdMod;
    sc_timer = timer_read ();
#ifdef SPACE_CADET_MODIFIER_CARRYOVER
    sc_mods = get_mods();
#endif
    if (IS_MOD(holdMod)) {
      register_mods(MOD_BIT(holdMod));
    }


@@ 100,7 106,13 @@ void perform_space_cadet(keyrecord_t *record, uint8_t holdMod, uint8_t tapMod, u
          register_mods(MOD_BIT(tapMod));
        }
      }
#ifdef SPACE_CADET_MODIFIER_CARRYOVER
    set_weak_mods(sc_mods);
#endif
      tap_code(keycode);
#ifdef SPACE_CADET_MODIFIER_CARRYOVER
    clear_weak_mods();
#endif
      if (IS_MOD(tapMod)) {
        unregister_mods(MOD_BIT(tapMod));
      }