tapdance.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "tapdance.h"
  2. static td_state_t td_state;
  3. void dance_dlt_finished(qk_tap_dance_state_t *state, void *user_data) {
  4. if (state->count == 1) {
  5. register_code16(KC_DELT);
  6. } else {
  7. register_code16(C(KC_DELT));
  8. }
  9. }
  10. void dance_dlt_reset(qk_tap_dance_state_t *state, void *user_data) {
  11. if (state->count == 1) {
  12. unregister_code16(KC_DELT);
  13. } else {
  14. unregister_code16(C(KC_DELT));
  15. }
  16. }
  17. void dance_cln_finished(qk_tap_dance_state_t *state, void *user_data) {
  18. if (state->count == 1) {
  19. register_code(KC_LSFT);
  20. }
  21. register_code(KC_SCLN);
  22. }
  23. void dance_cln_reset(qk_tap_dance_state_t *state, void *user_data) {
  24. if (state->count == 1) {
  25. unregister_code(KC_LSFT);
  26. }
  27. unregister_code(KC_SCLN);
  28. }
  29. int current_dance(qk_tap_dance_state_t *state) {
  30. if (state->count == 1) {
  31. if (state->interrupted || !state->pressed) {
  32. return SINGLE_TAP;
  33. } else {
  34. return SINGLE_HOLD;
  35. }
  36. }
  37. if (state->count == 2) {
  38. return DOUBLE_TAP;
  39. } else {
  40. return 3;
  41. }
  42. }
  43. void dance_tmb_finished(qk_tap_dance_state_t *state, void *user_data) {
  44. td_state = current_dance(state);
  45. switch (td_state) {
  46. case SINGLE_TAP:
  47. register_code16(KC_ESC);
  48. break;
  49. case SINGLE_HOLD:
  50. register_mods(MOD_BIT(KC_LSFT));
  51. break;
  52. case DOUBLE_TAP:
  53. register_code16(KC_DELT);
  54. break;
  55. }
  56. }
  57. void dance_tmb_reset(qk_tap_dance_state_t *state, void *user_data) {
  58. switch (td_state) {
  59. case SINGLE_TAP:
  60. unregister_code16(KC_ESC);
  61. break;
  62. case SINGLE_HOLD:
  63. unregister_mods(MOD_BIT(KC_LSFT));
  64. break;
  65. case DOUBLE_TAP:
  66. unregister_code16(KC_DELT);
  67. break;
  68. }
  69. }
  70. qk_tap_dance_action_t tap_dance_actions[] = {
  71. [TD_DLT_CTLDLT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_dlt_finished, dance_dlt_reset),
  72. [TD_SCLN_CLN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_cln_finished, dance_cln_reset),
  73. [TD_LEFT_THUMB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_tmb_finished, dance_tmb_reset),
  74. };