Space Cadet Shift

Steve Losh described the Space Cadet Shift quite well. Essentially, when you tap Left Shift on its own, you get an opening parenthesis; tap Right Shift on its own and you get the closing one. When held, the Shift keys function as normal. Yes, it's as cool as it sounds.

Usage

Replace the Left Shift key in your keymap with KC_LSPO (Left Shift, Parenthesis Open), and Right Shift with KC_RSPC (Right Shift, Parenthesis Close).

Keycodes

Keycode

Description

KC_LSPO

Left Shift when held, ( when tapped

KC_RSPC

Right Shift when held, ) when tapped

Caveats

Space Cadet's functionality can conflict with the default Command functionality when both Shift keys are held at the same time. Make sure that Command is disabled in your rules.mk with:

COMMAND_ENABLE = no

Configuration

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. 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