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.

69 lines
1.8 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. typedef struct {
  10. uint8_t lower;
  11. uint8_t raise;
  12. } td_status_t;
  13. static td_status_t td_status = {NONE, NONE};
  14. uint8_t cur_dance(qk_tap_dance_state_t *state) {
  15. if (state->interrupted || !state->pressed) {
  16. return state->count == 1 ? SINGLE_TAP : DOUBLE_TAP;
  17. } else {
  18. return HOLD;
  19. }
  20. }
  21. void td_lower_finished(qk_tap_dance_state_t *state, void *user_data) {
  22. td_status.lower = cur_dance(state);
  23. switch (td_status.lower) {
  24. case SINGLE_TAP:
  25. set_japanese_mode(false);
  26. break;
  27. case DOUBLE_TAP:
  28. set_japanese_mode(false);
  29. register_code(KC_ESC);
  30. break;
  31. }
  32. layer_on(L_EDVORAKJP_LOWER);
  33. }
  34. void td_lower_reset(qk_tap_dance_state_t *state, void *user_data) {
  35. switch (td_status.lower) {
  36. case DOUBLE_TAP:
  37. unregister_code(KC_ESC);
  38. break;
  39. }
  40. layer_off(L_EDVORAKJP_LOWER);
  41. td_status.lower = NONE;
  42. }
  43. void td_raise_finished(qk_tap_dance_state_t *state, void *user_data) {
  44. td_status.raise = cur_dance(state);
  45. switch (td_status.raise) {
  46. case DOUBLE_TAP:
  47. // same as single
  48. case SINGLE_TAP:
  49. set_japanese_mode(true);
  50. break;
  51. }
  52. layer_on(L_EDVORAKJP_RAISE);
  53. }
  54. void td_raise_reset(qk_tap_dance_state_t *state, void *user_data) {
  55. layer_off(L_EDVORAKJP_RAISE);
  56. td_status.raise = NONE;
  57. }
  58. qk_tap_dance_action_t tap_dance_actions[] = {
  59. [TD_EDVORAKJP_LOWER] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, td_lower_finished, td_lower_reset, 150),
  60. [TD_EDVORAKJP_RAISE] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, td_raise_finished, td_raise_reset, 150),
  61. };