]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - quantum/process_keycode/process_auto_shift.c
Added amj40 keymap (#2754)
[qmk_firmware.git] / quantum / process_keycode / process_auto_shift.c
index d096cde567eaf210444a16720b36d8e96bef48c5..01d99445b00b5f0d72800f6e38685aea59899576 100644 (file)
@@ -67,8 +67,34 @@ void autoshift_flush(void) {
   }
 }
 
+bool autoshift_enabled = true;
+
+void autoshift_enable(void) {
+    autoshift_enabled = true;
+}
+void autoshift_disable(void) {
+  autoshift_enabled = false;
+  autoshift_flush();
+}
+
+void autoshift_toggle(void) {
+  if (autoshift_enabled) {
+    autoshift_enabled = false;
+    autoshift_flush();
+  }
+  else {
+    autoshift_enabled = true;
+  }
+}
+
+bool autoshift_state(void) {
+  return autoshift_enabled;
+}
+
 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) {
@@ -84,6 +110,16 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
         autoshift_timer_report();
         return false;
 
+      case KC_ASTG:
+        autoshift_toggle();
+        return false;
+      case KC_ASON:
+        autoshift_enable();
+        return false;
+      case KC_ASOFF:
+        autoshift_disable();
+        return false;
+
 #ifndef NO_AUTO_SHIFT_ALPHA
       case KC_A:
       case KC_B:
@@ -136,9 +172,13 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
       case KC_COMM:
       case KC_DOT:
       case KC_SLSH:
+      case KC_GRAVE:
 #endif
+
         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)|
@@ -149,6 +189,7 @@ bool process_auto_shift(uint16_t keycode, keyrecord_t *record) {
         if (any_mod_pressed) {
           return true;
         }
+#endif
 
         autoshift_on(keycode);
         return false;