Split tapdance code
This commit is contained in:
21
keymaps/default/tapdance/tapdance.c
Normal file
21
keymaps/default/tapdance/tapdance.c
Normal file
@ -0,0 +1,21 @@
|
||||
#include "keymap.h"
|
||||
#include "tapdance.h"
|
||||
|
||||
uint8_t dance_step(qk_tap_dance_state_t *state) {
|
||||
if (state->count == 1) {
|
||||
if (state->interrupted || !state->pressed) {
|
||||
return SINGLE_TAP;
|
||||
} else {
|
||||
return SINGLE_HOLD;
|
||||
}
|
||||
} else if (state->count == 2) {
|
||||
if (state->interrupted) {
|
||||
return DOUBLE_SINGLE_TAP;
|
||||
} else if (state->pressed) {
|
||||
return DOUBLE_HOLD;
|
||||
} else {
|
||||
return DOUBLE_TAP;
|
||||
}
|
||||
}
|
||||
return MORE_TAPS;
|
||||
}
|
52
keymaps/default/tapdance/wmlayout.c
Normal file
52
keymaps/default/tapdance/wmlayout.c
Normal file
@ -0,0 +1,52 @@
|
||||
#include "keymap.h"
|
||||
#include "tapdance.h"
|
||||
|
||||
typedef struct {
|
||||
bool is_press_action;
|
||||
uint8_t step;
|
||||
} tap;
|
||||
|
||||
static tap dance_state[1];
|
||||
|
||||
void td_wmlayout_dance(qk_tap_dance_state_t *state, void *user_data) {
|
||||
if(state->count == 3) {
|
||||
tap_code16(LGUI(KC_L));
|
||||
tap_code16(LGUI(KC_L));
|
||||
tap_code16(LGUI(KC_L));
|
||||
}
|
||||
if(state->count > 3) {
|
||||
tap_code16(LGUI(KC_L));
|
||||
}
|
||||
}
|
||||
|
||||
void td_wmlayout_finished(qk_tap_dance_state_t *state, void *user_data) {
|
||||
dance_state[0].step = dance_step(state);
|
||||
switch (dance_state[0].step) {
|
||||
case SINGLE_TAP:
|
||||
register_code16(LGUI(KC_L));
|
||||
break;
|
||||
case DOUBLE_TAP:
|
||||
register_code16(LGUI(KC_K));
|
||||
break;
|
||||
case DOUBLE_SINGLE_TAP:
|
||||
tap_code16(LGUI(KC_L));
|
||||
register_code16(LGUI(KC_L));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void td_wmlayout_reset(qk_tap_dance_state_t *state, void *user_data) {
|
||||
wait_ms(10);
|
||||
switch (dance_state[0].step) {
|
||||
case SINGLE_TAP:
|
||||
unregister_code16(LGUI(KC_L));
|
||||
break;
|
||||
case DOUBLE_TAP:
|
||||
unregister_code16(LGUI(KC_K));
|
||||
break;
|
||||
case DOUBLE_SINGLE_TAP:
|
||||
unregister_code16(LGUI(KC_L));
|
||||
break;
|
||||
}
|
||||
dance_state[0].step = 0;
|
||||
}
|
Reference in New Issue
Block a user