Skip to content

Commit

Permalink
Improvement of Space Cadet Shift by preventing to automatically apply…
Browse files Browse the repository at this point in the history
… a modifier on the key and allow to override the default modifier. Closes qmk#3815
  • Loading branch information
Anthony Richir committed Sep 5, 2018
1 parent 1a907a1 commit 34a708f
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 8 deletions.
16 changes: 10 additions & 6 deletions docs/feature_space_cadet_shift.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,13 @@ COMMAND_ENABLE = no

By default Space Cadet assumes a US ANSI layout, but if your layout uses different keys for parentheses, you can redefine them in your `config.h`.
You can also disable the rollover, allowing you to use the opposite Shift key to cancel the Space Cadet state in the event of an erroneous press, instead of emitting a pair of parentheses when the keys are released.

|Define |Default |Description |
|------------------------------|-------------|------------------------------------------------------------|
|`LSPO_KEY` |`KC_9` |The keycode to send when Left Shift is tapped |
|`RSPC_KEY` |`KC_0` |The keycode to send when Right Shift is tapped |
|`DISABLE_SPACE_CADET_ROLLOVER`|*Not defined*|If defined, use the opposite Shift key to cancel Space Cadet|
Also, by default, the Space Cadet applies modifiers LSPO_MOD and RSPC_MOD to keys defined by LSPO_KEY and RSPC_KEY. You can override this behavior by redefining those variables in your `config.h`. You can also prevent the Space Cadet to apply a modifier by defining DISABLE_SPACE_CADET_MODIFIER in your `config.h`.

|Define |Default |Description |
|------------------------------|-------------|--------------------------------------------------------------------------------|
|`LSPO_KEY` |`KC_9` |The keycode to send when Left Shift is tapped |
|`RSPC_KEY` |`KC_0` |The keycode to send when Right Shift is tapped |
|`LSPO_MOD` |`KC_LSFT` |The keycode to send when Left Shift is tapped |
|`RSPC_MOD` |`KC_RSFT` |The keycode to send when Right Shift is tapped |
|`DISABLE_SPACE_CADET_ROLLOVER`|*Not defined*|If defined, use the opposite Shift key to cancel Space Cadet |
|`DISABLE_SPACE_CADET_MODIFIER`|*Not defined*|If defined, prevent the Space Cadet to apply a modifier to LSPO_KEY and RSPC_KEY|
25 changes: 23 additions & 2 deletions quantum/quantum.c
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,13 @@ void reset_keyboard(void) {
#define RSPC_KEY KC_0
#endif

#ifndef LSPO_MOD
#define LSPO_MOD KC_LSFT
#endif
#ifndef RSPC_MOD
#define RSPC_MOD KC_RSFT
#endif

// Shift / Enter setup
#ifndef SFTENT_KEY
#define SFTENT_KEY KC_ENT
Expand Down Expand Up @@ -627,14 +634,21 @@ bool process_record_quantum(keyrecord_t *record) {
}
else {
#ifdef DISABLE_SPACE_CADET_ROLLOVER
if (get_mods() & MOD_BIT(KC_RSFT)) {
if (get_mods() & MOD_BIT(RSPC_MOD)) {
shift_interrupted[0] = true;
shift_interrupted[1] = true;
}
#endif
if (!shift_interrupted[0] && timer_elapsed(scs_timer[0]) < TAPPING_TERM) {
unregister_mods(MOD_BIT(KC_LSFT));
#ifndef DISABLE_SPACE_CADET_MODIFIER
register_mods(MOD_BIT(LSPO_MOD));
#endif
register_code(LSPO_KEY);
unregister_code(LSPO_KEY);
#ifndef DISABLE_SPACE_CADET_MODIFIER
unregister_mods(MOD_BIT(LSPO_MOD));
#endif
}
unregister_mods(MOD_BIT(KC_LSFT));
}
Expand All @@ -649,14 +663,21 @@ bool process_record_quantum(keyrecord_t *record) {
}
else {
#ifdef DISABLE_SPACE_CADET_ROLLOVER
if (get_mods() & MOD_BIT(KC_LSFT)) {
if (get_mods() & MOD_BIT(LSPO_MOD)) {
shift_interrupted[0] = true;
shift_interrupted[1] = true;
}
#endif
if (!shift_interrupted[1] && timer_elapsed(scs_timer[1]) < TAPPING_TERM) {
unregister_mods(MOD_BIT(KC_RSFT));
#ifndef DISABLE_SPACE_CADET_MODIFIER
register_mods(MOD_BIT(RSPC_MOD));
#endif
register_code(RSPC_KEY);
unregister_code(RSPC_KEY);
#ifndef DISABLE_SPACE_CADET_MODIFIER
unregister_mods(MOD_BIT(RSPC_MOD));
#endif
}
unregister_mods(MOD_BIT(KC_RSFT));
}
Expand Down

0 comments on commit 34a708f

Please sign in to comment.