Rule to enable Modifiers with Auto-Shift (#2542)

* Re-enable modifiers with auto-shift

* Auto-shift modifiers rule

* missed a line

* Documentation

* fixing whitespace
This commit is contained in:
Jason Stillwell 2018-03-16 13:41:01 -07:00 committed by Jack Humbert
parent bb5c98699f
commit 00b4dce605
3 changed files with 20 additions and 4 deletions

View File

@ -132,6 +132,9 @@ endif
ifeq ($(strip $(AUTO_SHIFT_ENABLE)), yes) ifeq ($(strip $(AUTO_SHIFT_ENABLE)), yes)
OPT_DEFS += -DAUTO_SHIFT_ENABLE OPT_DEFS += -DAUTO_SHIFT_ENABLE
SRC += $(QUANTUM_DIR)/process_keycode/process_auto_shift.c SRC += $(QUANTUM_DIR)/process_keycode/process_auto_shift.c
ifeq ($(strip $(AUTO_SHIFT_MODIFIERS)), yes)
OPT_DEFS += -DAUTO_SHIFT_MODIFIERS
endif
endif endif
ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes) ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)

View File

@ -28,10 +28,7 @@ Yes, unfortunately.
characters, you could press and hold the 'a' key for a second or two. This no 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 longer works with Auto Shift because it is timing your depressed time instead
of emitting a depressed key state to your operating system. 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 2. You will have characters that are shifted when you did not intend on shifting, and
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
other characters you wanted shifted, but were not. This simply comes down to 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 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 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! 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 ## Configuring Auto Shift
If desired, there is some configuration that can be done to change the If desired, there is some configuration that can be done to change the

View File

@ -92,7 +92,9 @@ bool autoshift_state(void) {
} }
bool process_auto_shift(uint16_t keycode, keyrecord_t *record) { bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
#ifndef AUTO_SHIFT_MODIFIERS
static uint8_t any_mod_pressed; static uint8_t any_mod_pressed;
#endif
if (record->event.pressed) { if (record->event.pressed) {
switch (keycode) { switch (keycode) {
@ -175,6 +177,7 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
autoshift_flush(); autoshift_flush();
if (!autoshift_enabled) return true; if (!autoshift_enabled) return true;
#ifndef AUTO_SHIFT_MODIFIERS
any_mod_pressed = get_mods() & ( any_mod_pressed = get_mods() & (
MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)| MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|
MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT)| 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) { if (any_mod_pressed) {
return true; return true;
} }
#endif
autoshift_on(keycode); autoshift_on(keycode);
return false; return false;