~ruther/qmk_firmware

00b4dce605bc44a2ee6babaf93dbe3640e735d2e — Jason Stillwell 7 years ago bb5c986
Rule to enable Modifiers with Auto-Shift (#2542)

* Re-enable modifiers with auto-shift

* Auto-shift modifiers rule

* missed a line

* Documentation

* fixing whitespace
3 files changed, 20 insertions(+), 4 deletions(-)

M common_features.mk
M docs/feature_auto_shift.md
M quantum/process_keycode/process_auto_shift.c
M common_features.mk => common_features.mk +3 -0
@@ 132,6 132,9 @@ endif
ifeq ($(strip $(AUTO_SHIFT_ENABLE)), yes)
    OPT_DEFS += -DAUTO_SHIFT_ENABLE
    SRC += $(QUANTUM_DIR)/process_keycode/process_auto_shift.c
    ifeq ($(strip $(AUTO_SHIFT_MODIFIERS)), yes)
        OPT_DEFS += -DAUTO_SHIFT_MODIFIERS
    endif
endif

ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)

M docs/feature_auto_shift.md => docs/feature_auto_shift.md +13 -4
@@ 28,10 28,7 @@ Yes, unfortunately.
   characters, you could press and hold the 'a' key for a second or two. This no
   longer works with Auto Shift because it is timing your depressed time instead
   of emitting a depressed key state to your operating system.
2. Auto Shift is disabled for any key press that is accompanied by one or more
   modifiers. Thus, Ctrl+A that you hold for a really long time is not the same
   as Ctrl+Shift+A.
3. You will have characters that are shifted when you did not intend on shifting, and
2. You will have characters that are shifted when you did not intend on shifting, and
   other characters you wanted shifted, but were not. This simply comes down to
   practice. As we get in a hurry, we think we have hit the key long enough
   for a shifted version, but we did not. On the other hand, we may think we are


@@ 48,6 45,18 @@ If no `rules.mk` exists, you can create one.

Then compile and install your new firmware with Auto Key enabled! That's it!

## Modifiers

By default, Auto Shift is disabled for any key press that is accompanied by one or more
modifiers. Thus, Ctrl+A that you hold for a really long time is not the same
as Ctrl+Shift+A.

You can re-enable Auto Shift for modifiers by adding another rule to your `rules.mk`

    AUTO_SHIFT_MODIFIERS = yes

In which case, Ctrl+A held past the `AUTO_SHIFT_TIMEOUT` will be sent as Ctrl+Shift+A

## Configuring Auto Shift

If desired, there is some configuration that can be done to change the

M quantum/process_keycode/process_auto_shift.c => quantum/process_keycode/process_auto_shift.c +4 -0
@@ 92,7 92,9 @@ bool autoshift_state(void) {
}

bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
#ifndef AUTO_SHIFT_MODIFIERS
  static uint8_t any_mod_pressed;
#endif

  if (record->event.pressed) {
    switch (keycode) {


@@ 175,6 177,7 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
        autoshift_flush();
        if (!autoshift_enabled) return true;

#ifndef AUTO_SHIFT_MODIFIERS
        any_mod_pressed = get_mods() & (
          MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|
          MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT)|


@@ 185,6 188,7 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
        if (any_mod_pressed) {
          return true;
        }
#endif

        autoshift_on(keycode);
        return false;