forked from mirrors/qmk_firmware
Added mod carry over from press to release. (#5866)
Update docs/feature_space_cadet.md Co-Authored-By: fauxpark <fauxpark@gmail.com>
This commit is contained in:
parent
a07da6e245
commit
d16db69367
2 changed files with 13 additions and 0 deletions
|
@ -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. |
|
|`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. |
|
|`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. |
|
|`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
|
## Obsolete Configuration
|
||||||
|
|
|
@ -81,11 +81,17 @@
|
||||||
|
|
||||||
static uint8_t sc_last = 0;
|
static uint8_t sc_last = 0;
|
||||||
static uint16_t sc_timer = 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) {
|
void perform_space_cadet(keyrecord_t *record, uint8_t holdMod, uint8_t tapMod, uint8_t keycode) {
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
sc_last = holdMod;
|
sc_last = holdMod;
|
||||||
sc_timer = timer_read ();
|
sc_timer = timer_read ();
|
||||||
|
#ifdef SPACE_CADET_MODIFIER_CARRYOVER
|
||||||
|
sc_mods = get_mods();
|
||||||
|
#endif
|
||||||
if (IS_MOD(holdMod)) {
|
if (IS_MOD(holdMod)) {
|
||||||
register_mods(MOD_BIT(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));
|
register_mods(MOD_BIT(tapMod));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef SPACE_CADET_MODIFIER_CARRYOVER
|
||||||
|
set_weak_mods(sc_mods);
|
||||||
|
#endif
|
||||||
tap_code(keycode);
|
tap_code(keycode);
|
||||||
|
#ifdef SPACE_CADET_MODIFIER_CARRYOVER
|
||||||
|
clear_weak_mods();
|
||||||
|
#endif
|
||||||
if (IS_MOD(tapMod)) {
|
if (IS_MOD(tapMod)) {
|
||||||
unregister_mods(MOD_BIT(tapMod));
|
unregister_mods(MOD_BIT(tapMod));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue