forked from mirrors/qmk_firmware
Add Per Key functionality for AutoShift (#11536)
Co-authored-by: Ryan <fauxpark@gmail.com>
This commit is contained in:
parent
49efd6abb0
commit
c02137a0d2
3 changed files with 41 additions and 7 deletions
|
@ -109,6 +109,33 @@ Do not Auto Shift numeric keys, zero through nine.
|
||||||
|
|
||||||
Do not Auto Shift alpha characters, which include A through Z.
|
Do not Auto Shift alpha characters, which include A through Z.
|
||||||
|
|
||||||
|
### Auto Shift Per Key
|
||||||
|
|
||||||
|
This is a function that allows you to determine which keys shold be autoshifted, much like the tap-hold keys.
|
||||||
|
|
||||||
|
The default function looks like this:
|
||||||
|
|
||||||
|
```c
|
||||||
|
bool get_auto_shifted_key(uint16_t keycode, keyrecord_t *record) {
|
||||||
|
switch (keycode) {
|
||||||
|
# ifndef NO_AUTO_SHIFT_ALPHA
|
||||||
|
case KC_A ... KC_Z:
|
||||||
|
# endif
|
||||||
|
# ifndef NO_AUTO_SHIFT_NUMERIC
|
||||||
|
case KC_1 ... KC_0:
|
||||||
|
# endif
|
||||||
|
# ifndef NO_AUTO_SHIFT_SPECIAL
|
||||||
|
case KC_TAB:
|
||||||
|
case KC_MINUS ... KC_SLASH:
|
||||||
|
case KC_NONUS_BSLASH:
|
||||||
|
# endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
This functionality is enabled by default, and does not need a define.
|
||||||
|
|
||||||
### AUTO_SHIFT_REPEAT (simple define)
|
### AUTO_SHIFT_REPEAT (simple define)
|
||||||
|
|
||||||
Enables keyrepeat.
|
Enables keyrepeat.
|
||||||
|
|
|
@ -216,7 +216,18 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (get_auto_shifted_key(keycode, record)) {
|
||||||
|
if (record->event.pressed) {
|
||||||
|
return autoshift_press(keycode, now, record);
|
||||||
|
} else {
|
||||||
|
autoshift_end(keycode, now, false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__((weak)) bool get_auto_shifted_key(uint16_t keycode, keyrecord_t *record) {
|
||||||
switch (keycode) {
|
switch (keycode) {
|
||||||
# ifndef NO_AUTO_SHIFT_ALPHA
|
# ifndef NO_AUTO_SHIFT_ALPHA
|
||||||
case KC_A ... KC_Z:
|
case KC_A ... KC_Z:
|
||||||
|
@ -229,14 +240,9 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
|
||||||
case KC_MINUS ... KC_SLASH:
|
case KC_MINUS ... KC_SLASH:
|
||||||
case KC_NONUS_BSLASH:
|
case KC_NONUS_BSLASH:
|
||||||
# endif
|
# endif
|
||||||
if (record->event.pressed) {
|
return true;
|
||||||
return autoshift_press(keycode, now, record);
|
|
||||||
} else {
|
|
||||||
autoshift_end(keycode, now, false);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -31,3 +31,4 @@ bool get_autoshift_state(void);
|
||||||
uint16_t get_autoshift_timeout(void);
|
uint16_t get_autoshift_timeout(void);
|
||||||
void set_autoshift_timeout(uint16_t timeout);
|
void set_autoshift_timeout(uint16_t timeout);
|
||||||
void autoshift_matrix_scan(void);
|
void autoshift_matrix_scan(void);
|
||||||
|
bool get_auto_shifted_key(uint16_t keycode, keyrecord_t *record);
|
||||||
|
|
Loading…
Reference in a new issue