[Keymap] Romain's Preonic layout (#7067)
[jackhill/qmk/firmware.git] / quantum / keycode_config.c
index 4f7bc52..f340905 100644 (file)
 
 extern keymap_config_t keymap_config;
 
+/** \brief keycode_config
+ *
+ * This function is used to check a specific keycode against the bootmagic config,
+ * and will return the corrected keycode, when appropriate.
+ */
 uint16_t keycode_config(uint16_t keycode) {
-
     switch (keycode) {
         case KC_CAPSLOCK:
         case KC_LOCKING_CAPS:
@@ -31,6 +35,12 @@ uint16_t keycode_config(uint16_t keycode) {
             if (keymap_config.swap_control_capslock) {
                 return KC_CAPSLOCK;
             }
+            if (keymap_config.swap_lctl_lgui) {
+                if (keymap_config.no_gui) {
+                    return KC_NO;
+                }
+                return KC_LGUI;
+            }
             return KC_LCTL;
         case KC_LALT:
             if (keymap_config.swap_lalt_lgui) {
@@ -44,10 +54,21 @@ uint16_t keycode_config(uint16_t keycode) {
             if (keymap_config.swap_lalt_lgui) {
                 return KC_LALT;
             }
+            if (keymap_config.swap_lctl_lgui) {
+                return KC_LCTRL;
+            }
             if (keymap_config.no_gui) {
                 return KC_NO;
             }
             return KC_LGUI;
+        case KC_RCTL:
+            if (keymap_config.swap_rctl_rgui) {
+                if (keymap_config.no_gui) {
+                    return KC_NO;
+                }
+                return KC_RGUI;
+            }
+            return KC_RCTL;
         case KC_RALT:
             if (keymap_config.swap_ralt_rgui) {
                 if (keymap_config.no_gui) {
@@ -60,6 +81,9 @@ uint16_t keycode_config(uint16_t keycode) {
             if (keymap_config.swap_ralt_rgui) {
                 return KC_RALT;
             }
+            if (keymap_config.swap_rctl_rgui) {
+                return KC_RCTL;
+            }
             if (keymap_config.no_gui) {
                 return KC_NO;
             }
@@ -88,3 +112,54 @@ uint16_t keycode_config(uint16_t keycode) {
             return keycode;
     }
 }
+
+/** \brief mod_config
+ *
+ *  This function checks the mods passed to it against the bootmagic config,
+ *  and will remove or replace mods, based on that.
+ */
+
+uint8_t mod_config(uint8_t mod) {
+    if (keymap_config.swap_lalt_lgui) {
+        if ((mod & MOD_RGUI) == MOD_LGUI) {
+            mod &= ~MOD_LGUI;
+            mod |= MOD_LALT;
+        } else if ((mod & MOD_RALT) == MOD_LALT) {
+            mod &= ~MOD_LALT;
+            mod |= MOD_LGUI;
+        }
+    }
+    if (keymap_config.swap_ralt_rgui) {
+        if ((mod & MOD_RGUI) == MOD_RGUI) {
+            mod &= ~MOD_RGUI;
+            mod |= MOD_RALT;
+        } else if ((mod & MOD_RALT) == MOD_RALT) {
+            mod &= ~MOD_RALT;
+            mod |= MOD_RGUI;
+        }
+    }
+    if (keymap_config.swap_lctl_lgui) {
+        if ((mod & MOD_RGUI) == MOD_LGUI) {
+            mod &= ~MOD_LGUI;
+            mod |= MOD_LCTL;
+        } else if ((mod & MOD_RCTL) == MOD_LCTL) {
+            mod &= ~MOD_LCTL;
+            mod |= MOD_LGUI;
+        }
+    }
+    if (keymap_config.swap_rctl_rgui) {
+        if ((mod & MOD_RGUI) == MOD_RGUI) {
+            mod &= ~MOD_RGUI;
+            mod |= MOD_RCTL;
+        } else if ((mod & MOD_RCTL) == MOD_RCTL) {
+            mod &= ~MOD_RCTL;
+            mod |= MOD_RGUI;
+        }
+    }
+    if (keymap_config.no_gui) {
+        mod &= ~MOD_LGUI;
+        mod &= ~MOD_RGUI;
+    }
+
+    return mod;
+}