From cd544e10a98b4bfd7f988d713dea446be9eb1b83 Mon Sep 17 00:00:00 2001
From: Elliot Powell <32494740+e11i0t23@users.noreply.github.com>
Date: Fri, 2 Nov 2018 23:41:26 +0000
Subject: [PATCH] Keymap: Fixed poor layout of EP40 default keymap (#4330)

* add initial ep40 files

* fixed issues

* updated keymap

* Added media control

* Update keyboards/handwired/ep40/rules.mk

Co-Authored-By: e11i0t23 <32494740+e11i0t23@users.noreply.github.com>

* Fixed requested changes

* Fixed more requested changes

* Added delete key to layor 1

* Updated defualt keympap to have a Backspace mod del key

* removed place holder

Co-Authored-By: e11i0t23 <32494740+e11i0t23@users.noreply.github.com>

* removed obsolete code

Co-Authored-By: e11i0t23 <32494740+e11i0t23@users.noreply.github.com>
---
 .../handwired/ep40/keymaps/default/keymap.c   | 38 +++++++++++++++++--
 1 file changed, 35 insertions(+), 3 deletions(-)

diff --git a/keyboards/handwired/ep40/keymaps/default/keymap.c b/keyboards/handwired/ep40/keymaps/default/keymap.c
index 2d8a5d0592..1ac66bc012 100644
--- a/keyboards/handwired/ep40/keymaps/default/keymap.c
+++ b/keyboards/handwired/ep40/keymaps/default/keymap.c
@@ -15,16 +15,22 @@
  */
 #include QMK_KEYBOARD_H
 
+static bool bsdel_mods = false;
+
+enum custom_keycodes {
+  M_BSDEL = SAFE_RANGE, // ensure these codes start after the highest keycode defined in Quantum
+};
+
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   [0] = LAYOUT( /* Base */
-    KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,\
+    KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, M_BSDEL,\
     KC_TAB,  KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,       KC_ENT, \
     KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT,  KC_RSFT,\
-    LCTL_T(KC_LBRC), KC_LGUI, KC_LALT,  KC_SPC,  LT(1, KC_SPC), KC_RGUI, MO(2), RCTL_T(KC_RBRC),  KC_RALT \
+    LCTL_T(KC_LBRC), KC_LGUI, KC_LALT,  KC_SPC,  LT(1, KC_SPC), KC_RALT, MO(2), RCTL_T(KC_RBRC),  KC_F5 \
   ),
 
   [1] = LAYOUT( /* Base */
-    KC_TRNS,  KC_1   , KC_2   , KC_3   , KC_4   , KC_5   , KC_6   , KC_7   , KC_8   , KC_9   , KC_0,    KC_DEL ,\
+    KC_TRNS,  KC_1   , KC_2   , KC_3   , KC_4   , KC_5   , KC_6   , KC_7   , KC_8   , KC_9   , KC_0,     KC_TRNS,\
     KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_UP,   KC_DOWN, KC_RIGHT,         KC_TRNS,\
     KC_TRNS,           KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_TRNS,\
     KC_TRNS,  KC_TRNS, KC_TRNS,          KC_TRNS,          KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
@@ -37,3 +43,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     KC_TRNS,  KC_TRNS, KC_TRNS,          KC_TRNS,          KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, RESET \
   ),
 };
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+      case M_BSDEL: {
+        uint8_t kc = KC_BSPC;
+
+        if (record->event.pressed) {
+            if (keyboard_report->mods) {
+                kc = KC_DEL;
+            }
+            register_code (kc);
+            bsdel_mods = keyboard_report->mods;
+        }
+        else {
+            if (bsdel_mods) {
+                kc = KC_DEL;
+            }
+            unregister_code (kc);
+        }
+
+        return false;
+        break;
+    }
+  }
+  return true;
+}