aboutsummaryrefslogtreecommitdiff
path: root/users/imchipwood/imchipwood.c
diff options
context:
space:
mode:
Diffstat (limited to 'users/imchipwood/imchipwood.c')
-rw-r--r--users/imchipwood/imchipwood.c141
1 files changed, 141 insertions, 0 deletions
diff --git a/users/imchipwood/imchipwood.c b/users/imchipwood/imchipwood.c
new file mode 100644
index 000000000..e319c00ce
--- /dev/null
+++ b/users/imchipwood/imchipwood.c
@@ -0,0 +1,141 @@
1/* Copyright 2021 imchipwood
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "imchipwood.h"
17
18static td_state_t td_state[3];
19
20// determine the tapdance state to return
21int cur_dance(qk_tap_dance_state_t *state) {
22 if (state->count == 1) {
23 if (state->interrupted || !state->pressed) {
24 return SINGLE_TAP;
25 } else {
26 return SINGLE_HOLD;
27 }
28 }
29 if (state->count == 2) {
30 return DOUBLE_TAP;
31 } else {
32 return 3;
33 } // any number higher than the maximum state value you return above
34}
35
36void altf2_finished(qk_tap_dance_state_t *state, void *user_data) {
37 td_state[0] = cur_dance(state);
38 switch (td_state[0]) {
39 case SINGLE_TAP:
40 register_code(KC_F2);
41 break;
42 case SINGLE_HOLD:
43 register_mods(MOD_BIT(KC_LALT));
44 break;
45 case DOUBLE_TAP:
46 register_mods(MOD_BIT(KC_LALT));
47 tap_code(KC_F2);
48 break;
49 }
50}
51
52void altf2_reset(qk_tap_dance_state_t *state, void *user_data) {
53 switch (td_state[0]) {
54 case SINGLE_TAP:
55 unregister_code(KC_F2);
56 break;
57 case SINGLE_HOLD:
58 unregister_mods(MOD_BIT(KC_LALT));
59 break;
60 case DOUBLE_TAP:
61 unregister_code(KC_F2);
62 unregister_mods(MOD_BIT(KC_LALT));
63 break;
64 }
65}
66
67
68void ctlf5_finished(qk_tap_dance_state_t *state, void *user_data) {
69 td_state[1] = cur_dance(state);
70 switch (td_state[1]) {
71 case SINGLE_TAP:
72 register_code(KC_F5);
73 break;
74 case SINGLE_HOLD:
75 register_mods(MOD_BIT(KC_LCTL));
76 break;
77 case DOUBLE_TAP:
78 register_mods(MOD_BIT(KC_LCTL));
79 tap_code(KC_F5);
80 break;
81 }
82}
83
84void ctlf5_reset(qk_tap_dance_state_t *state, void *user_data) {
85 switch (td_state[1]) {
86 case SINGLE_TAP:
87 unregister_code(KC_F5);
88 break;
89 case SINGLE_HOLD:
90 unregister_mods(MOD_BIT(KC_LCTL));
91 break;
92 case DOUBLE_TAP:
93 unregister_code(KC_F5);
94 unregister_mods(MOD_BIT(KC_LCTL));
95 break;
96 }
97}
98
99void altf7_finished(qk_tap_dance_state_t *state, void *user_data) {
100 td_state[2] = cur_dance(state);
101 switch (td_state[2]) {
102 case SINGLE_TAP:
103 register_code(KC_F7);
104 break;
105 case SINGLE_HOLD:
106 register_mods(MOD_BIT(KC_LALT));
107 break;
108 case DOUBLE_TAP:
109 register_mods(MOD_BIT(KC_LALT));
110 tap_code(KC_F7);
111 break;
112 }
113}
114
115void altf7_reset(qk_tap_dance_state_t *state, void *user_data) {
116 switch (td_state[2]) {
117 case SINGLE_TAP:
118 unregister_code(KC_F7);
119 break;
120 case SINGLE_HOLD:
121 unregister_mods(MOD_BIT(KC_LALT));
122 break;
123 case DOUBLE_TAP:
124 unregister_code(KC_F7);
125 unregister_mods(MOD_BIT(KC_LALT));
126 break;
127 }
128}
129
130qk_tap_dance_action_t tap_dance_actions[] = {
131 [ALT_F2] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altf2_finished, altf2_reset),
132 [CTL_F5] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctlf5_finished, ctlf5_reset),
133 [ALT_F7] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altf7_finished, altf7_reset),
134 [DEL_NLCK] = ACTION_TAP_DANCE_DOUBLE(KC_DEL, KC_NLCK),
135 // Double tap right -> END
136 [TD_REND] = ACTION_TAP_DANCE_DOUBLE(KC_RIGHT, KC_END),
137 // Double tap left -> HOME
138 [TD_LOME] = ACTION_TAP_DANCE_DOUBLE(KC_LEFT, KC_HOME),
139 // Double tap right shift -> CAPS LOCK
140 [TD_RSFT_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_RSFT, KC_CAPS),
141};