瀏覽代碼

Add Per Key functionality for AutoShift (#11536)

Co-authored-by: Ryan <fauxpark@gmail.com>
Drashna Jaelre 4 年之前
父節點
當前提交
c02137a0d2

+ 27 - 0
docs/feature_auto_shift.md

@@ -109,6 +109,33 @@ Do not Auto Shift numeric keys, zero through nine.
 
 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)
 
 Enables keyrepeat.

+ 13 - 7
quantum/process_keycode/process_auto_shift.c

@@ -216,7 +216,18 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
 #    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) {
 #    ifndef NO_AUTO_SHIFT_ALPHA
         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_NONUS_BSLASH:
 #    endif
-            if (record->event.pressed) {
-                return autoshift_press(keycode, now, record);
-            } else {
-                autoshift_end(keycode, now, false);
-                return false;
-            }
+            return true;
     }
-    return true;
+    return false;
 }
 
 #endif

+ 1 - 0
quantum/process_keycode/process_auto_shift.h

@@ -31,3 +31,4 @@ bool     get_autoshift_state(void);
 uint16_t get_autoshift_timeout(void);
 void     set_autoshift_timeout(uint16_t timeout);
 void     autoshift_matrix_scan(void);
+bool     get_auto_shifted_key(uint16_t keycode, keyrecord_t *record);