aboutsummaryrefslogtreecommitdiff
path: root/users/ibnuda/tapdance.c
diff options
context:
space:
mode:
Diffstat (limited to 'users/ibnuda/tapdance.c')
-rw-r--r--users/ibnuda/tapdance.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/users/ibnuda/tapdance.c b/users/ibnuda/tapdance.c
new file mode 100644
index 000000000..c0d219258
--- /dev/null
+++ b/users/ibnuda/tapdance.c
@@ -0,0 +1,83 @@
1#include "tapdance.h"
2
3static td_state_t td_state;
4
5void dance_dlt_finished(qk_tap_dance_state_t *state, void *user_data) {
6 if (state->count == 1) {
7 register_code16(KC_DELT);
8 } else {
9 register_code16(C(KC_DELT));
10 }
11}
12
13void dance_dlt_reset(qk_tap_dance_state_t *state, void *user_data) {
14 if (state->count == 1) {
15 unregister_code16(KC_DELT);
16 } else {
17 unregister_code16(C(KC_DELT));
18 }
19}
20
21void dance_cln_finished(qk_tap_dance_state_t *state, void *user_data) {
22 if (state->count == 1) {
23 register_code(KC_LSFT);
24 }
25 register_code(KC_SCLN);
26}
27
28void dance_cln_reset(qk_tap_dance_state_t *state, void *user_data) {
29 if (state->count == 1) {
30 unregister_code(KC_LSFT);
31 }
32 unregister_code(KC_SCLN);
33}
34
35int current_dance(qk_tap_dance_state_t *state) {
36 if (state->count == 1) {
37 if (state->interrupted || !state->pressed) {
38 return SINGLE_TAP;
39 } else {
40 return SINGLE_HOLD;
41 }
42 }
43 if (state->count == 2) {
44 return DOUBLE_TAP;
45 } else {
46 return 3;
47 }
48}
49
50void dance_tmb_finished(qk_tap_dance_state_t *state, void *user_data) {
51 td_state = current_dance(state);
52 switch (td_state) {
53 case SINGLE_TAP:
54 register_code16(KC_ESC);
55 break;
56 case SINGLE_HOLD:
57 register_mods(MOD_BIT(KC_LSFT));
58 break;
59 case DOUBLE_TAP:
60 register_code16(KC_DELT);
61 break;
62 }
63}
64
65void dance_tmb_reset(qk_tap_dance_state_t *state, void *user_data) {
66 switch (td_state) {
67 case SINGLE_TAP:
68 unregister_code16(KC_ESC);
69 break;
70 case SINGLE_HOLD:
71 unregister_mods(MOD_BIT(KC_LSFT));
72 break;
73 case DOUBLE_TAP:
74 unregister_code16(KC_DELT);
75 break;
76 }
77}
78
79qk_tap_dance_action_t tap_dance_actions[] = {
80 [TD_DLT_CTLDLT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_dlt_finished, dance_dlt_reset),
81 [TD_SCLN_CLN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_cln_finished, dance_cln_reset),
82 [TD_LEFT_THUMB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_tmb_finished, dance_tmb_reset),
83};