From f3ffd6ad50f0a4bf24f0a0453cc5502b4b88f390 Mon Sep 17 00:00:00 2001 From: epaew Date: Tue, 27 Nov 2018 02:50:45 +0900 Subject: Keymap: Refactor edvorakjp user library (#4480) * Refactor edvorakjp user library * add tap dance support * update keymaps * edvorakjp: add SWAP_SCLN option * fix behavior of SWAP_SCLN --- users/edvorakjp/edvorakjp_tap_dance.c | 71 +++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 users/edvorakjp/edvorakjp_tap_dance.c (limited to 'users/edvorakjp/edvorakjp_tap_dance.c') diff --git a/users/edvorakjp/edvorakjp_tap_dance.c b/users/edvorakjp/edvorakjp_tap_dance.c new file mode 100644 index 000000000..62c0c100a --- /dev/null +++ b/users/edvorakjp/edvorakjp_tap_dance.c @@ -0,0 +1,71 @@ +#include "edvorakjp.h" +#include "process_keycode/process_tap_dance.h" + +enum tap_state { + NONE = 0, + SINGLE_TAP = 1, + DOUBLE_TAP = 2, + HOLD +}; + +static int td_status_lower = NONE; +static int td_status_raise = 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); + register_code(KC_ESC); + break; + case DOUBLE_TAP: + set_japanese_mode(false); + break; + case HOLD: + break; + } + layer_on(_LOWER); +} + +void td_lower_reset(qk_tap_dance_state_t *state, void *user_data) { + if (td_status_lower == SINGLE_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 SINGLE_TAP: + case DOUBLE_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, TAPPING_TERM * 1.5 + ), + [TD_RAISE] = ACTION_TAP_DANCE_FN_ADVANCED_TIME( + NULL, td_raise_finished, td_raise_reset, TAPPING_TERM * 1.5 + ) +}; -- cgit v1.2.3-24-g4f1b