+ /* 4: Morse Code Layer
+
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ │ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ │ │ │ │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ ' │ , │ . │ P │ Y │ F │ G │ C │ R │ L │ / │ = │BSPC │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ A │ O │ E │ U │ I │ D │ H │ T │ N │ S │ - │▒▒▒▒▒│ENTER│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │SHIFT│▒▒▒▒▒│ ; │ Q │ J │ K │ X │ B │ M │ W │ V │ Z │▒▒▒▒▒│SHIFT│▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │█████│█████│█████│SPACE│█████│█████│█████│ │ │ │ │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+
+ [MORSE] = KEYMAP(
+ KC_NO, MC_1, MC_2, MC_3, MC_4, MC_5, MC_6, MC_7, MC_8, MC_9, MC_0, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_NO, MC_APOS, MC_COMM, MC_DOT, MC_P, MC_Y, MC_F, MC_G, MC_C, MC_R, MC_L, MC_SLSH, MC_EQL, KC_BSPC, \
+ KC_NO, MC_A, MC_O, MC_E, MC_U, MC_I, MC_D, MC_H, MC_T, MC_N, MC_S, MC_MINS, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, MC_SCLN, MC_Q, MC_J, MC_K, MC_X, MC_B, MC_M, MC_W, MC_V, MC_Z, KC_NO, KC_RSFT, KC_NO, \
+ KC_NO, KC_NO, KC_NO, MC_SPACE, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+
+};
+
+// Morse Code Macros
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case 0: //Number 0
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(MINS), T(MINS), T(MINS), T(MINS), T(SPACE), END); //-----
+ }
+ break;
+ case 1: //Number 1
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(MINS), T(SPACE), END); //.----
+ }
+ break;
+ case 2: //Number 2
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(MINS), T(SPACE), END); //..---
+ }
+ break;
+ case 3: // Number 3
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //...--
+ }
+ break;
+ case 4: //Number 4
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //....-
+ }
+ break;
+ case 5: //Number 5
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.....
+ }
+ break;
+ case 6: //Number 6
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-....
+ }
+ break;
+ case 7: //Number 7
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //--...
+ }
+ break;
+ case 8: //Number 8
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //---..
+ }
+ break;
+ case 9: //Number 9
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(MINS), T(MINS), T(MINS), T(DOT), T(SPACE), END); //----.
+ }
+ break;
+ case 10: //Letter A
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(MINS), T(SPACE), END); //.-
+ }
+ break;
+ case 11: //Letter B
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //-...
+ }
+ break;
+ case 12: //Letter C
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-.-.
+ }
+ break;
+ case 13: //Letter D
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(DOT), T(DOT), T(SPACE), END); //-..
+ }
+ break;
+ case 14: //Letter E
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(SPACE), END); //.
+ }
+ break;
+ case 15: //Letter F
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //..-.
+ }
+ break;
+ case 16: //Letter G
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(MINS), T(DOT), T(SPACE), END); //--.
+ }
+ break;
+ case 17: //Letter H
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(DOT), T(DOT), T(DOT), T(SPACE), END); //....
+ }
+ break;
+ case 18: //Letter I
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(DOT), T(SPACE), END); //..
+ }
+ break;
+ case 19: //Letter J
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(SPACE), END); //.---
+ }
+ break;
+ case 20: //Letter K
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.-
+ }
+ break;
+ case 21: //Letter L
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(SPACE), END); //.-..
+ }
+ break;
+ case 22: //Letter M
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(MINS), T(SPACE), END); //--
+ }
+ break;
+ case 23: //Letter N
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(DOT), T(SPACE), END); //-.
+ }
+ break;
+ case 24: //Letter O
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(MINS), T(MINS), T(SPACE), END); //---
+ }
+ break;
+ case 25: //Letter P
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //.--.
+ }
+ break;
+ case 26: //Letter Q
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //--.-
+ }
+ break;
+ case 27: //Letter R
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-.
+ }
+ break;
+ case 28: //Letter S
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(DOT), T(DOT), T(SPACE), END); //...
+ }
+ break;
+ case 29: //Letter T
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(SPACE), END); //-
+ }
+ break;
+ case 30: //Letter U
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(DOT), T(MINS), T(SPACE), END); //..-
+ }
+ break;
+ case 31: //Letter V
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...-
+ }
+ break;
+ case 32: //Letter W
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(MINS), T(MINS), T(SPACE), END); //.--
+ }
+ break;
+ case 33: //Letter X
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-..-
+ }
+ break;
+ case 34: //Letter Y
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.--
+ }
+ break;
+ case 35: //Letter Z
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //--..
+ }
+ break;
+ case 36: //Punctuation .
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(SPACE), END); //.-.-.-
+ }
+ break;
+ case 37: //Punctuation ,
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(MINS), T(DOT), T(DOT), T(MINS), T(MINS), T(SPACE), END); //--..--
+ }
+ break;
+ case 38: //Punctuation ?
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(DOT), T(SPACE), END); //..--..
+ }
+ break;
+ case 39: //Punctuation '
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(MINS), T(MINS), T(MINS), T(MINS), T(DOT), T(SPACE), END); //-....-
+ }
+ break;
+ case 40: //Punctuation !
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(MINS), T(SPACE), END); //-.-.--
+ }
+ break;
+ case 41: //Punctuation /
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-..-.
+ }
+ break;
+ case 42: //Punctuation (
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(SPACE), END); //-.--.
+ }
+ break;
+ case 43: //Punctuation )
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //-.--.-
+ }
+ break;
+ case 44: //Punctuation &
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //.-...
+ }
+ break;
+ case 45: //Punctuation :
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(MINS), T(MINS), T(DOT), T(DOT), T(DOT), T(SPACE), END); //---...
+ }
+ break;
+ case 46: //Punctuation ;
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //-.-.-.
+ }
+ break;
+ case 47: //Punctuation =
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-...-
+ }
+ break;
+ case 48: //Punctuation +
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-.-.
+ }
+ break;
+ case 49: //Punctuation -
+ if (record->event.pressed) {
+ return MACRO(T(MINS), T(DOT), T(DOT), T(DOT), T(DOT), T(MINS), T(SPACE), END); //-....-
+ }
+ break;
+ case 50: //Punctuation "
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.-..-.
+ }
+ break;
+ case 51: //Punctuation $
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(DOT), T(DOT), T(MINS), T(DOT), T(DOT), T(MINS), T(SPACE), END); //...-..-
+ }
+ break;
+ case 52: //Punctuation @
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(DOT), T(SPACE), END); //.--.-.
+ }
+ break;
+ case 53: //Punctuation _
+ if (record->event.pressed) {
+ return MACRO(T(DOT), T(DOT), T(MINS), T(MINS), T(DOT), T(MINS), T(SPACE), END); //..--.-
+ case 54: //Morse Space
+ if (record->event.pressed) {
+ return MACRO(T(BSLS), T(SPACE), END); //When pressed, this sends a slash followed by a space, making it easier to distinguish words in Morse
+ }
+ break;
+ }
+ return MACRO_NONE;