- #include "edvorakjp.h"
- #include "process_keycode/process_tap_dance.h"
-
- enum tap_state {
- NONE = 0,
- SINGLE_TAP = 1,
- DOUBLE_TAP = 2,
- HOLD
- };
-
- typedef struct {
- uint8_t lower;
- uint8_t raise;
- } td_status_t;
- static td_status_t td_status = {NONE, NONE};
-
- int cur_dance(qk_tap_dance_state_t *state) {
- if (state->interrupted || !state->pressed) {
- return state->count == 1 ? SINGLE_TAP : DOUBLE_TAP;
- } else {
- return HOLD;
- }
- }
-
- void td_lower_finished(qk_tap_dance_state_t *state, void *user_data) {
- td_status.lower = cur_dance(state);
- switch(td_status.lower) {
- case SINGLE_TAP:
- set_japanese_mode(false);
- break;
- case DOUBLE_TAP:
- set_japanese_mode(false);
- register_code(KC_ESC);
- break;
- case HOLD:
- break;
- }
- layer_on(_LOWER);
- }
-
- void td_lower_reset(qk_tap_dance_state_t *state, void *user_data) {
- if (td_status.lower == DOUBLE_TAP) {
- unregister_code(KC_ESC);
- }
- layer_off(_LOWER);
- td_status.lower = NONE;
- }
-
- void td_raise_finished(qk_tap_dance_state_t *state, void *user_data) {
- td_status.raise = cur_dance(state);
- switch(td_status.raise) {
- case DOUBLE_TAP:
- // same as single
- case SINGLE_TAP:
- set_japanese_mode(true);
- break;
- case HOLD:
- break;
- }
- layer_on(_RAISE);
- }
-
- void td_raise_reset(qk_tap_dance_state_t *state, void *user_data) {
- layer_off(_RAISE);
- td_status.raise = NONE;
- }
-
- qk_tap_dance_action_t tap_dance_actions[] = {
- [TD_LOWER] =
- ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, td_lower_finished, td_lower_reset, 100),
- [TD_RAISE] =
- ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, td_raise_finished, td_raise_reset, 100)
- };
|