4 qk_tap_dance_action_t tap_dance_actions[] = {
5 [DA_LCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_lctl_finished,
7 [DA_LSPR] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_lspr_finished,
9 [DA_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_rctl_finished,
11 [DA_RALT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_ralt_finished,
13 [DA_UPLY] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_uply_finished,
15 [DA_DWLY] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_dwly_finished,
19 volatile uint8_t active_layer = _BL;
20 static tap upltap_state = {.state = 0};
21 static tap dwltap_state = {.state = 0};
22 static tap lsprtap_state = {.state = 0};
23 static tap ralttap_state = {.state = 0};
25 void layer_switcher_tap(uint8_t new_layer) {
26 layer_off(active_layer);
28 active_layer = new_layer;
31 int cur_dance(qk_tap_dance_state_t *state) {
32 switch (state->count) {
34 return state->pressed == 0 ? SINGLE_TAP : SINGLE_HOLD;
36 return state->pressed == 0 ? DOUBLE_TAP : DOUBLE_HOLD;
38 return state->pressed == 0 ? TRIPLE_TAP : TRIPLE_HOLD;
40 return state->pressed == 0 ? DEFAULT_TAP : DEFAULT_HOLD;
44 void dance_lctl_finished(qk_tap_dance_state_t *state, void *user_data) {
45 rbw_led_keys[RBW_LCTL].status = ENABLED;
46 register_code(KC_LCTRL);
49 void dance_lctl_reset(qk_tap_dance_state_t *state, void *user_data) {
50 unregister_code(KC_LCTRL);
51 rbw_led_keys[RBW_LCTL].status = DISABLED;
54 void dance_lspr_finished(qk_tap_dance_state_t *state, void *user_data) {
55 lsprtap_state.state = cur_dance(state);
57 switch (lsprtap_state.state) {
59 rbw_led_keys[RBW_LSPR].status = ENABLED;
60 register_code(KC_LALT);
63 register_code(KC_LGUI);
68 void dance_lspr_reset(qk_tap_dance_state_t *state, void *user_data) {
69 switch (lsprtap_state.state) {
71 unregister_code(KC_LALT);
72 rbw_led_keys[RBW_LSPR].status = DISABLED;
75 unregister_code(KC_LGUI);
80 void dance_rctl_finished(qk_tap_dance_state_t *state, void *user_data) {
81 rbw_led_keys[RBW_RCTL].status = ENABLED;
82 register_code(KC_RCTRL);
85 void dance_rctl_reset(qk_tap_dance_state_t *state, void *user_data) {
86 unregister_code(KC_RCTRL);
87 rbw_led_keys[RBW_RCTL].status = DISABLED;
90 void dance_ralt_finished(qk_tap_dance_state_t *state, void *user_data) {
91 ralttap_state.state = cur_dance(state);
93 switch (ralttap_state.state) {
95 rbw_led_keys[RBW_RALT].status = ENABLED;
96 unregister_code(KC_LGUI);
99 register_code(KC_RALT);
104 void dance_ralt_reset(qk_tap_dance_state_t *state, void *user_data) {
105 switch (ralttap_state.state) {
107 unregister_code(KC_RGUI);
108 rbw_led_keys[RBW_RALT].status = DISABLED;
111 unregister_code(KC_RALT);
116 void dance_uply_finished(qk_tap_dance_state_t *state, void *user_data) {
117 upltap_state.state = cur_dance(state);
119 switch (upltap_state.state) {
121 if (active_layer == _UL) {
122 layer_switcher_tap(_BL);
124 layer_switcher_tap(_UL);
128 layer_switcher_tap(_UL);
131 layer_switcher_tap(_BL);
136 void dance_uply_reset(qk_tap_dance_state_t *state, void *user_data) {
137 switch (upltap_state.state) {
142 layer_switcher_tap(_BL);
145 upltap_state.state = 0;
148 void dance_dwly_finished(qk_tap_dance_state_t *state, void *user_data) {
149 dwltap_state.state = cur_dance(state);
151 switch (dwltap_state.state) {
153 if (active_layer == _DL) {
154 layer_switcher_tap(_BL);
156 layer_switcher_tap(_DL);
160 layer_switcher_tap(_DL);
163 layer_switcher_tap(_AL);
166 layer_switcher_tap(_BL);
171 void dance_dwly_reset(qk_tap_dance_state_t *state, void *user_data) {
172 switch (dwltap_state.state) {
178 layer_switcher_tap(_BL);
181 dwltap_state.state = 0;