aboutsummaryrefslogtreecommitdiff
path: root/users/danielo515/tap_dance.c
diff options
context:
space:
mode:
authorDaniel Rodríguez Rivero <rdanielo@gmail.com>2020-01-27 23:42:38 +0100
committerDrashna Jaelre <drashna@live.com>2020-01-27 14:42:38 -0800
commit1b7a003d842c76cd141af726c13e2af1a4458bac (patch)
tree678d8482537b4b444810fa0d520dbff9eb0c4ff4 /users/danielo515/tap_dance.c
parent0804f0a5dd08ed0807a67793ef329fa49ed5b16f (diff)
downloadqmk_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.c139
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
4int 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
33void 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
50void 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
61qk_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
89void 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
102void 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
116void 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
125void 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
131void 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}