From 980a1b05629e351d19ff9ddc1bb5a1d38bab6414 Mon Sep 17 00:00:00 2001
From: Nathan Johnson <njohnson@ena.com>
Date: Thu, 24 Mar 2022 00:24:02 -0500
Subject: [PATCH] [Keymap] ergodox: updating osx_whiskey_tango_foxtrot_capslock
 to use process_record_user (#16715)

---
 .../keymap.c                                  | 45 ++++++++++++++++++-
 .../rules.mk                                  |  2 +
 2 files changed, 46 insertions(+), 1 deletion(-)
 create mode 100644 layouts/community/ergodox/osx_whiskey_tango_foxtrot_capslock/rules.mk

diff --git a/layouts/community/ergodox/osx_whiskey_tango_foxtrot_capslock/keymap.c b/layouts/community/ergodox/osx_whiskey_tango_foxtrot_capslock/keymap.c
index 54e1183e9f..2285aa4a94 100644
--- a/layouts/community/ergodox/osx_whiskey_tango_foxtrot_capslock/keymap.c
+++ b/layouts/community/ergodox/osx_whiskey_tango_foxtrot_capslock/keymap.c
@@ -15,6 +15,10 @@ enum layer_names {
 
 typedef enum onoff_t {OFF, ON} onoff;
 
+#define caps_led_on  ergodox_right_led_2_on
+#define caps_led_off ergodox_right_led_2_off
+
+
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /* Keymap 0: Basic layer
  *
@@ -123,7 +127,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
     // MEDIA AND TENKEY
     [MDIA] = LAYOUT_ergodox(
-       KC_NO,   KC_NO,   KC_MUTE, KC_VOLD, KC_VOLU, KC_F14,  KC_F15,
+       QK_BOOT, KC_NO,   KC_MUTE, KC_VOLD, KC_VOLU, KC_F14,  KC_F15,
        KC_TRNS, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
        KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
        KC_TRNS, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
@@ -142,6 +146,45 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        KC_TRNS, KC_TRNS, KC_TRNS
     ),
 };
+#ifndef NO_FAKE_CAPS
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    static onoff caps_state = OFF;
+
+    switch (keycode) {
+        case KC_CAPS:
+            if (record->event.pressed) {
+                if (caps_state == OFF) {
+                    caps_led_on();
+                    caps_state = ON;
+                } else {
+                    caps_led_off();
+                    caps_state = OFF;
+                }
+            }
+            break;
+        default:
+            if (keycode < KC_A || keycode > KC_Z) {
+                // This isn't an alpha or a KC_CAPS, continue on as usual.
+                return true;
+            }
+            if (record->event.pressed) {
+                bool shifted = (caps_state == ON && get_mods() == 0);
+                if (shifted) {
+                    register_code(KC_LSFT);
+                }
+                register_code(keycode);
+                if (shifted) {
+                    unregister_code(KC_LSFT);
+                }
+            } else {
+                unregister_code(keycode);
+            }
+            break;
+    }
+    // If we get here, we've already handled the keypresses.
+    return false;
+}
+#endif
 
 // Runs constantly in the background, in a loop.
 void matrix_scan_user(void) {
diff --git a/layouts/community/ergodox/osx_whiskey_tango_foxtrot_capslock/rules.mk b/layouts/community/ergodox/osx_whiskey_tango_foxtrot_capslock/rules.mk
new file mode 100644
index 0000000000..e8242c2695
--- /dev/null
+++ b/layouts/community/ergodox/osx_whiskey_tango_foxtrot_capslock/rules.mk
@@ -0,0 +1,2 @@
+# uncomment below to disable fake capslock
+# OPT_DEFS += -DNO_FAKE_CAPS