diff options
| -rw-r--r-- | keyboards/satan/keymaps/lepa/keymap.c | 119 | ||||
| -rw-r--r-- | keyboards/satan/keymaps/lepa/readme.md | 4 | ||||
| -rw-r--r-- | keyboards/satan/keymaps/lepa/rules.mk | 22 |
3 files changed, 145 insertions, 0 deletions
diff --git a/keyboards/satan/keymaps/lepa/keymap.c b/keyboards/satan/keymaps/lepa/keymap.c new file mode 100644 index 000000000..080068427 --- /dev/null +++ b/keyboards/satan/keymaps/lepa/keymap.c | |||
| @@ -0,0 +1,119 @@ | |||
| 1 | #include QMK_KEYBOARD_H | ||
| 2 | |||
| 3 | #define MY_LESC LT(1, KC_ESC) | ||
| 4 | #define MY_RENT LT(1, KC_ENT) | ||
| 5 | #define MY_LCA TD(TD_LCA) | ||
| 6 | #define MY_RCA TD(TD_RCA) | ||
| 7 | #define MY_LGA TD(TD_LGA) | ||
| 8 | #define MY_RGA TD(TD_RGA) | ||
| 9 | #define MY_APP TD(TD_APP_HYPR) | ||
| 10 | |||
| 11 | enum { | ||
| 12 | TD_LCA, | ||
| 13 | TD_RCA, | ||
| 14 | TD_LGA, | ||
| 15 | TD_RGA, | ||
| 16 | TD_APP_HYPR | ||
| 17 | }; | ||
| 18 | |||
| 19 | |||
| 20 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
| 21 | LAYOUT_60_ansi( | ||
| 22 | KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, | ||
| 23 | KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, | ||
| 24 | MY_LESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, MY_RENT, | ||
| 25 | KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, | ||
| 26 | MY_LGA, KC_LALT, MY_LCA, KC_SPC, MY_RCA, KC_RALT, MY_APP, MY_RGA), | ||
| 27 | |||
| 28 | LAYOUT_60_ansi( | ||
| 29 | KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, | ||
| 30 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 31 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 32 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 33 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), | ||
| 34 | }; | ||
| 35 | |||
| 36 | enum { | ||
| 37 | SINGLE_TAP = 1, | ||
| 38 | SINGLE_HOLD = 2, | ||
| 39 | DOUBLE_TAP = 3, | ||
| 40 | DOUBLE_HOLD = 4, | ||
| 41 | DOUBLE_SINGLE_TAP = 5, | ||
| 42 | UNKNOWN_TAP = 6 | ||
| 43 | }; | ||
| 44 | |||
| 45 | typedef struct { | ||
| 46 | bool is_press_action; | ||
| 47 | int state; | ||
| 48 | } tap; | ||
| 49 | |||
| 50 | int cur_dance(qk_tap_dance_state_t *state) { | ||
| 51 | switch (state->count) { | ||
| 52 | case 1: | ||
| 53 | if (state->interrupted || state->pressed == 0) { | ||
| 54 | return SINGLE_TAP; | ||
| 55 | } | ||
| 56 | return SINGLE_HOLD; | ||
| 57 | case 2: | ||
| 58 | if (state->interrupted) { | ||
| 59 | return DOUBLE_SINGLE_TAP; | ||
| 60 | } | ||
| 61 | if (state->pressed) { | ||
| 62 | return DOUBLE_HOLD; | ||
| 63 | } | ||
| 64 | return DOUBLE_TAP; | ||
| 65 | } | ||
| 66 | return UNKNOWN_TAP; | ||
| 67 | } | ||
| 68 | |||
| 69 | #define my_dance_combo(N, K1, K2) \ | ||
| 70 | static tap N ## _state = { \ | ||
| 71 | .is_press_action = true, \ | ||
| 72 | .state = 0 \ | ||
| 73 | }; \ | ||
| 74 | \ | ||
| 75 | void N ## _finished(qk_tap_dance_state_t *state, void *user_data) { \ | ||
| 76 | N ## _state.state = cur_dance(state); \ | ||
| 77 | switch (N ## _state.state) { \ | ||
| 78 | case SINGLE_TAP: \ | ||
| 79 | case SINGLE_HOLD: \ | ||
| 80 | register_code(K1); \ | ||
| 81 | break; \ | ||
| 82 | case DOUBLE_TAP: \ | ||
| 83 | case DOUBLE_SINGLE_TAP: \ | ||
| 84 | case DOUBLE_HOLD: \ | ||
| 85 | register_code(K1); \ | ||
| 86 | register_code(K2); \ | ||
| 87 | break; \ | ||
| 88 | } \ | ||
| 89 | } \ | ||
| 90 | \ | ||
| 91 | void N ## _reset(qk_tap_dance_state_t *state, void *user_data) { \ | ||
| 92 | switch (N ## _state.state) { \ | ||
| 93 | case SINGLE_TAP: \ | ||
| 94 | case SINGLE_HOLD: \ | ||
| 95 | unregister_code(K1); \ | ||
| 96 | break; \ | ||
| 97 | case DOUBLE_TAP: \ | ||
| 98 | case DOUBLE_SINGLE_TAP: \ | ||
| 99 | case DOUBLE_HOLD: \ | ||
| 100 | unregister_code(K2); \ | ||
| 101 | unregister_code(K1); \ | ||
| 102 | break; \ | ||
| 103 | } \ | ||
| 104 | N ## _state.state = 0; \ | ||
| 105 | } | ||
| 106 | |||
| 107 | my_dance_combo(lca, KC_LCTL, KC_LALT) | ||
| 108 | my_dance_combo(rca, KC_RCTL, KC_RALT) | ||
| 109 | my_dance_combo(lga, KC_LGUI, KC_LALT) | ||
| 110 | my_dance_combo(rga, KC_RGUI, KC_RALT) | ||
| 111 | |||
| 112 | qk_tap_dance_action_t tap_dance_actions[] = { | ||
| 113 | [TD_LCA] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lca_finished, lca_reset), | ||
| 114 | [TD_RCA] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rca_finished, rca_reset), | ||
| 115 | [TD_LGA] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lga_finished, lga_reset), | ||
| 116 | [TD_RGA] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rga_finished, rga_reset), | ||
| 117 | |||
| 118 | [TD_APP_HYPR] = ACTION_TAP_DANCE_DOUBLE(KC_APP, KC_HYPR) | ||
| 119 | }; | ||
diff --git a/keyboards/satan/keymaps/lepa/readme.md b/keyboards/satan/keymaps/lepa/readme.md new file mode 100644 index 000000000..99ee135f0 --- /dev/null +++ b/keyboards/satan/keymaps/lepa/readme.md | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | # Satan GH60 ANSI Layout that uses tap dance | ||
| 2 | |||
| 3 |  | ||
| 4 | |||
diff --git a/keyboards/satan/keymaps/lepa/rules.mk b/keyboards/satan/keymaps/lepa/rules.mk new file mode 100644 index 000000000..636dd1b1d --- /dev/null +++ b/keyboards/satan/keymaps/lepa/rules.mk | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | # Build Options | ||
| 2 | # change to "no" to disable the options, or define them in the Makefile in | ||
| 3 | # the appropriate keymap folder that will get included automatically | ||
| 4 | # | ||
| 5 | BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) | ||
| 6 | MOUSEKEY_ENABLE = no # Mouse keys(+4700) | ||
| 7 | EXTRAKEY_ENABLE = no # Audio control and System control(+450) | ||
| 8 | CONSOLE_ENABLE = no # Console for debug(+400) | ||
| 9 | COMMAND_ENABLE = yes # Commands for debug and configuration | ||
| 10 | NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work | ||
| 11 | BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality | ||
| 12 | MIDI_ENABLE = no # MIDI controls | ||
| 13 | AUDIO_ENABLE = no # Audio output on port C6 | ||
| 14 | UNICODE_ENABLE = no # Unicode | ||
| 15 | BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID | ||
| 16 | RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. | ||
| 17 | SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend | ||
| 18 | TAP_DANCE_ENABLE = yes | ||
| 19 | |||
| 20 | ifndef QUANTUM_DIR | ||
| 21 | include ../../../../Makefile | ||
| 22 | endif | ||
