You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
1.6 KiB

  1. #include "edvorakjp.h"
  2. #include "process_keycode/process_tap_dance.h"
  3. enum tap_state {
  4. NONE = 0,
  5. SINGLE_TAP = 1,
  6. DOUBLE_TAP = 2,
  7. HOLD
  8. };
  9. static int td_status_lower = NONE;
  10. static int td_status_raise = NONE;
  11. int cur_dance(qk_tap_dance_state_t *state) {
  12. if (state->interrupted || !state->pressed) {
  13. return state->count == 1 ? SINGLE_TAP : DOUBLE_TAP;
  14. } else {
  15. return HOLD;
  16. }
  17. }
  18. void td_lower_finished(qk_tap_dance_state_t *state, void *user_data) {
  19. td_status_lower = cur_dance(state);
  20. switch(td_status_lower) {
  21. case SINGLE_TAP:
  22. set_japanese_mode(false);
  23. register_code(KC_ESC);
  24. break;
  25. case DOUBLE_TAP:
  26. set_japanese_mode(false);
  27. break;
  28. case HOLD:
  29. break;
  30. }
  31. layer_on(_LOWER);
  32. }
  33. void td_lower_reset(qk_tap_dance_state_t *state, void *user_data) {
  34. if (td_status_lower == SINGLE_TAP) {
  35. unregister_code(KC_ESC);
  36. }
  37. layer_off(_LOWER);
  38. td_status_lower = NONE;
  39. }
  40. void td_raise_finished(qk_tap_dance_state_t *state, void *user_data) {
  41. td_status_raise = cur_dance(state);
  42. switch(td_status_raise) {
  43. case SINGLE_TAP:
  44. case DOUBLE_TAP:
  45. set_japanese_mode(true);
  46. break;
  47. case HOLD:
  48. break;
  49. }
  50. layer_on(_RAISE);
  51. }
  52. void td_raise_reset(qk_tap_dance_state_t *state, void *user_data) {
  53. layer_off(_RAISE);
  54. td_status_raise = NONE;
  55. }
  56. qk_tap_dance_action_t tap_dance_actions[] = {
  57. [TD_LOWER] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(
  58. NULL, td_lower_finished, td_lower_reset, TAPPING_TERM * 1.5
  59. ),
  60. [TD_RAISE] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(
  61. NULL, td_raise_finished, td_raise_reset, TAPPING_TERM * 1.5
  62. )
  63. };