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 volatile uint8_t gm_layer_act = false;
21 static tap upltap_state = {.state = 0};
22 static tap dwltap_state = {.state = 0};
23 static tap lsprtap_state = {.state = 0};
24 static tap ralttap_state = {.state = 0};
26 void layer_switcher_tap(uint8_t new_layer) {
27 if (gm_layer_act == true) {
28 layer_off(active_layer);
29 if (new_layer == _BL) {
34 active_layer = new_layer;
37 layer_off(active_layer);
39 active_layer = new_layer;
43 int cur_dance(qk_tap_dance_state_t *state) {
44 switch (state->count) {
46 return state->pressed == 0 ? SINGLE_TAP : SINGLE_HOLD;
48 return state->pressed == 0 ? DOUBLE_TAP : DOUBLE_HOLD;
50 return state->pressed == 0 ? TRIPLE_TAP : TRIPLE_HOLD;
52 return state->pressed == 0 ? DEFAULT_TAP : DEFAULT_HOLD;
56 void dance_lctl_finished(qk_tap_dance_state_t *state, void *user_data) {
57 rbw_led_keys[RBW_LCTL].status = ENABLED;
58 register_code(KC_LCTRL);
61 void dance_lctl_reset(qk_tap_dance_state_t *state, void *user_data) {
62 unregister_code(KC_LCTRL);
63 rbw_led_keys[RBW_LCTL].status = DISABLED;
66 void dance_lspr_finished(qk_tap_dance_state_t *state, void *user_data) {
67 lsprtap_state.state = cur_dance(state);
69 switch (lsprtap_state.state) {
71 rbw_led_keys[RBW_LSPR].status = ENABLED;
72 register_code(KC_LALT);
75 register_code(KC_LGUI);
80 void dance_lspr_reset(qk_tap_dance_state_t *state, void *user_data) {
81 switch (lsprtap_state.state) {
83 unregister_code(KC_LALT);
84 rbw_led_keys[RBW_LSPR].status = DISABLED;
87 unregister_code(KC_LGUI);
92 void dance_rctl_finished(qk_tap_dance_state_t *state, void *user_data) {
93 rbw_led_keys[RBW_RCTL].status = ENABLED;
94 register_code(KC_RCTRL);
97 void dance_rctl_reset(qk_tap_dance_state_t *state, void *user_data) {
98 unregister_code(KC_RCTRL);
99 rbw_led_keys[RBW_RCTL].status = DISABLED;
102 void dance_ralt_finished(qk_tap_dance_state_t *state, void *user_data) {
103 ralttap_state.state = cur_dance(state);
105 switch (ralttap_state.state) {
107 rbw_led_keys[RBW_RALT].status = ENABLED;
108 unregister_code(KC_LGUI);
111 register_code(KC_RALT);
116 void dance_ralt_reset(qk_tap_dance_state_t *state, void *user_data) {
117 switch (ralttap_state.state) {
119 unregister_code(KC_RGUI);
120 rbw_led_keys[RBW_RALT].status = DISABLED;
123 unregister_code(KC_RALT);
128 void dance_uply_finished(qk_tap_dance_state_t *state, void *user_data) {
129 upltap_state.state = cur_dance(state);
131 switch (upltap_state.state) {
133 if (active_layer == _UL) {
134 layer_switcher_tap(_BL);
136 layer_switcher_tap(_UL);
140 layer_switcher_tap(_UL);
143 layer_switcher_tap(_BL);
148 void dance_uply_reset(qk_tap_dance_state_t *state, void *user_data) {
149 switch (upltap_state.state) {
154 layer_switcher_tap(_BL);
157 upltap_state.state = 0;
160 void dance_dwly_finished(qk_tap_dance_state_t *state, void *user_data) {
161 dwltap_state.state = cur_dance(state);
163 switch (dwltap_state.state) {
165 if (active_layer == _DL) {
166 layer_switcher_tap(_BL);
168 layer_switcher_tap(_DL);
172 layer_switcher_tap(_DL);
175 layer_switcher_tap(_AL);
178 if (gm_layer_act == true) {
179 gm_layer_act = false;
180 layer_switcher_tap(_BL);
183 layer_switcher_tap(_GM);
186 layer_switcher_tap(_BL);
191 void dance_dwly_reset(qk_tap_dance_state_t *state, void *user_data) {
192 switch (dwltap_state.state) {
199 layer_switcher_tap(_BL);
202 dwltap_state.state = 0;