diff options
| author | Daniel RodrÃguez Rivero <rdanielo@gmail.com> | 2020-01-27 23:42:38 +0100 |
|---|---|---|
| committer | Drashna Jaelre <drashna@live.com> | 2020-01-27 14:42:38 -0800 |
| commit | 1b7a003d842c76cd141af726c13e2af1a4458bac (patch) | |
| tree | 678d8482537b4b444810fa0d520dbff9eb0c4ff4 /users/danielo515/tap_dance.c | |
| parent | 0804f0a5dd08ed0807a67793ef329fa49ed5b16f (diff) | |
| download | qmk_firmware-1b7a003d842c76cd141af726c13e2af1a4458bac.tar.gz qmk_firmware-1b7a003d842c76cd141af726c13e2af1a4458bac.zip | |
[Keymap] update to Danielo515 keymaps (#8004)
* feat(build): added script for compiling with docker easily
* chore: bring my own build with docker to master
* feat: merge ergodox ez into latest maste
* chore: remove my build with docker file
* chore: remove my changes to process_leader
* feat: more modular user danielo515
* Apply suggestions from @ridingqwerty
Co-Authored-By: ridingqwerty <george.g.koenig@gmail.com>
* chore: more suggestions implemented
* chore: add my basic details
* Apply suggestions from @drashna
Co-Authored-By: Drashna Jaelre <drashna@live.com>
* fix: more @drashna fixes
* feat: @fauxpark optimization
* fix: some more @drashna improvements
Co-Authored-By: Drashna Jaelre <drashna@live.com>
* chore: small improvement on layout
* fix: some more @drashna improvements
* chore: remove some F dance
Co-authored-by: ridingqwerty <george.g.koenig@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Diffstat (limited to 'users/danielo515/tap_dance.c')
| -rw-r--r-- | users/danielo515/tap_dance.c | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/users/danielo515/tap_dance.c b/users/danielo515/tap_dance.c new file mode 100644 index 000000000..7ddb55c29 --- /dev/null +++ b/users/danielo515/tap_dance.c | |||
| @@ -0,0 +1,139 @@ | |||
| 1 | #include "tap_dance.h" | ||
| 2 | //**************** Definitions needed for quad function to work *********************// | ||
| 3 | #ifdef QUAD_DANCE | ||
| 4 | int cur_dance(qk_tap_dance_state_t *state) | ||
| 5 | { | ||
| 6 | if (state->count == 1) | ||
| 7 | { | ||
| 8 | //If count = 1, and it has been interrupted - it doesn't matter if it is pressed or not: Send SINGLE_TAP | ||
| 9 | if (state->interrupted || state->pressed == 0) | ||
| 10 | return SINGLE_TAP; | ||
| 11 | else | ||
| 12 | return SINGLE_HOLD; | ||
| 13 | } | ||
| 14 | //If count = 2, and it has been interrupted - assume that user is trying to type the letter associated | ||
| 15 | //with single tap. In example below, that means to send `xx` instead of `Escape`. | ||
| 16 | else if (state->count == 2) | ||
| 17 | { | ||
| 18 | if (state->interrupted) | ||
| 19 | return DOUBLE_SINGLE_TAP; | ||
| 20 | else if (state->pressed) | ||
| 21 | return DOUBLE_HOLD; | ||
| 22 | else | ||
| 23 | return DOUBLE_TAP; | ||
| 24 | } | ||
| 25 | else | ||
| 26 | return 6; //magic number. At some point this method will expand to work for more presses | ||
| 27 | }; | ||
| 28 | |||
| 29 | //**************** Definitions needed for quad function to work *********************// | ||
| 30 | # endif | ||
| 31 | |||
| 32 | // Slightly better tap dance double: interruption sends double single and any number over double sends the single that number of times | ||
| 33 | void qk_tap_dance_pair_finished_safe(qk_tap_dance_state_t *state, void *user_data) { | ||
| 34 | qk_tap_dance_pair_t *pair = (qk_tap_dance_pair_t *)user_data; | ||
| 35 | int count = state->count; | ||
| 36 | if (state->count == 2) { | ||
| 37 | if (state->interrupted){ | ||
| 38 | tap_code16(pair->kc1);register_code16 (pair->kc1); | ||
| 39 | state->count = 1; // Reset the counter as we are using the first key | ||
| 40 | } else register_code16 (pair->kc2); | ||
| 41 | return; | ||
| 42 | } | ||
| 43 | register_code16 (pair->kc1); | ||
| 44 | while(--count){ | ||
| 45 | unregister_code16(pair->kc1); | ||
| 46 | register_code16 (pair->kc1); | ||
| 47 | } | ||
| 48 | } | ||
| 49 | |||
| 50 | void qk_tap_dance_pair_reset_safe(qk_tap_dance_state_t *state, void *user_data) { | ||
| 51 | qk_tap_dance_pair_t *pair = (qk_tap_dance_pair_t *)user_data; | ||
| 52 | if (state->count == 2) { | ||
| 53 | unregister_code16 (pair->kc2); | ||
| 54 | return; | ||
| 55 | } | ||
| 56 | unregister_code16(pair->kc1); | ||
| 57 | } | ||
| 58 | |||
| 59 | //**************** Tap dance functions *********************// | ||
| 60 | |||
| 61 | qk_tap_dance_action_t tap_dance_actions[] = { | ||
| 62 | [COPY_CUT] = ACTION_TAP_DANCE_FN(td_copy_cut), | ||
| 63 | [PASTE_DANCE] = ACTION_TAP_DANCE_FN(td_paste), | ||
| 64 | [_TD_F1] = ACTION_TAP_DANCE_DOUBLE(KC_1, KC_F1), | ||
| 65 | [_TD_F2] = ACTION_TAP_DANCE_DOUBLE(KC_2, KC_F2), | ||
| 66 | [_TD_F3] = ACTION_TAP_DANCE_DOUBLE(KC_3, KC_F3), | ||
| 67 | [_TD_F4] = ACTION_TAP_DANCE_DOUBLE(KC_4, KC_F4), | ||
| 68 | [_TD_F5] = ACTION_TAP_DANCE_DOUBLE(KC_5, KC_F5), | ||
| 69 | [_TD_F6] = ACTION_TAP_DANCE_DOUBLE(KC_6, KC_F6), | ||
| 70 | [_TD_F7] = ACTION_TAP_DANCE_DOUBLE(KC_7, KC_F7), | ||
| 71 | [_TD_F8] = ACTION_TAP_DANCE_DOUBLE(KC_8, KC_F8), | ||
| 72 | [_TD_F9] = ACTION_TAP_DANCE_DOUBLE(KC_9, KC_F9), | ||
| 73 | [_TD_F10] = ACTION_TAP_DANCE_DOUBLE(KC_0, KC_F10), | ||
| 74 | [_TD_F11] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_F11), | ||
| 75 | [_TD_F12] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_F12), | ||
| 76 | [_TD_H_ENTER] = ACTION_TAP_DANCE_DOUBLE(KC_H, KC_ENT), | ||
| 77 | [_TD_CLN] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_COLON), | ||
| 78 | [_TD_SLASH] = ACTION_TAP_DANCE_DOUBLE(KC_SLASH, KC_BSLASH), | ||
| 79 | // OLD ONES | ||
| 80 | [LEFT_HOME] = ACTION_TAP_DANCE_DOUBLE(KC_LEFT, KC_HOME), | ||
| 81 | [RGT_HOME] = ACTION_TAP_DANCE_DOUBLE_SAFE(KC_RGHT, KC_END), | ||
| 82 | [J_ENT] = ACTION_TAP_DANCE_DOUBLE_SAFE(KC_J,KC_ENT), | ||
| 83 | [H_MINS] = ACTION_TAP_DANCE_DOUBLE_SAFE(KC_H,KC_SLASH), | ||
| 84 | [_TD_COPY] = ACTION_TAP_DANCE_FN(dance_copy), | ||
| 85 | [_TD_CUT] = ACTION_TAP_DANCE_FN(dance_cut), | ||
| 86 | [_TD_PASTE] = ACTION_TAP_DANCE_FN(dance_paste) | ||
| 87 | }; | ||
| 88 | |||
| 89 | void td_copy_cut(qk_tap_dance_state_t *state, void *user_data) | ||
| 90 | { | ||
| 91 | if (state->count == 2) | ||
| 92 | { | ||
| 93 | onMac ? SEND_STRING(SS_LGUI("x")) : SEND_STRING(SS_LCTRL("x")); | ||
| 94 | } | ||
| 95 | else | ||
| 96 | { | ||
| 97 | onMac ? SEND_STRING(SS_LGUI("c")) : SEND_STRING(SS_LCTRL("c")); | ||
| 98 | } | ||
| 99 | reset_tap_dance(state); | ||
| 100 | }; | ||
| 101 | |||
| 102 | void td_paste(qk_tap_dance_state_t *state, void *user_data) | ||
| 103 | { | ||
| 104 | if (state->count == 2) | ||
| 105 | { | ||
| 106 | onMac ? SEND_STRING(SS_DOWN(X_RSHIFT) SS_LGUI("v") SS_UP(X_RSHIFT)) : SEND_STRING(SS_DOWN(X_RSHIFT) SS_LCTRL("v") SS_UP(X_RSHIFT)); | ||
| 107 | } | ||
| 108 | else | ||
| 109 | { | ||
| 110 | onMac ? SEND_STRING(SS_LGUI("v")) : SEND_STRING(SS_LCTRL("v")); | ||
| 111 | } | ||
| 112 | reset_tap_dance(state); | ||
| 113 | }; | ||
| 114 | |||
| 115 | //===== The awesome tap dance for CUT, COPY and PASTE letters | ||
| 116 | void dance_copy (qk_tap_dance_state_t *state, void *user_data) { | ||
| 117 | if (state->count == 1) { tap_code16(KC_C); } | ||
| 118 | else | ||
| 119 | if (state->interrupted) { tap_code16(KC_C);tap_code16(KC_C);} | ||
| 120 | else CMD(KC_C); | ||
| 121 | |||
| 122 | reset_tap_dance (state); | ||
| 123 | } | ||
| 124 | |||
| 125 | void dance_cut (qk_tap_dance_state_t *state, void *user_data) { | ||
| 126 | if (state->count == 1) { tap_code16(KC_X); } | ||
| 127 | else { CMD(KC_X); } | ||
| 128 | reset_tap_dance (state); | ||
| 129 | } | ||
| 130 | |||
| 131 | void dance_paste (qk_tap_dance_state_t *state, void *user_data) { | ||
| 132 | if (state->count == 1) { | ||
| 133 | tap_code16(KC_V); | ||
| 134 | } | ||
| 135 | else { | ||
| 136 | CMD(KC_V); | ||
| 137 | } | ||
| 138 | reset_tap_dance (state); | ||
| 139 | } | ||
