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.

127 lines
3.1 KiB

  1. #include "tapDance.h"
  2. #include "quantum.h"
  3. void left(qk_tap_dance_state_t* state, void* user_data) {
  4. switch (state->count) {
  5. case 1:
  6. if (state->pressed)
  7. tap_code16(S(KC_LBRACKET));
  8. else
  9. tap_code16(S(KC_9));
  10. break;
  11. case 2:
  12. if (state->pressed)
  13. tap_code16(S(KC_COMM));
  14. else
  15. tap_code(KC_LBRACKET);
  16. break;
  17. default:
  18. reset_tap_dance(state);
  19. }
  20. }
  21. void right(qk_tap_dance_state_t* state, void* user_data) {
  22. switch (state->count) {
  23. case 1:
  24. if (state->pressed)
  25. tap_code16(S(KC_RBRACKET));
  26. else
  27. tap_code16(S(KC_0));
  28. break;
  29. case 2:
  30. if (state->pressed)
  31. tap_code16(S(KC_DOT));
  32. else
  33. tap_code(KC_RBRACKET);
  34. break;
  35. default:
  36. reset_tap_dance(state);
  37. }
  38. }
  39. enum { REST, HOLD1, HOLD2, HOLD3 };
  40. static int Alt = REST;
  41. void altFinish(qk_tap_dance_state_t* state, void* user_data) {
  42. switch (state->count) {
  43. case 1:
  44. if (state->pressed) {
  45. register_code(KC_LALT);
  46. Alt = HOLD1;
  47. }
  48. break;
  49. case 2:
  50. if (state->pressed) {
  51. register_code(KC_RALT);
  52. Alt = HOLD2;
  53. }
  54. break;
  55. case 3:
  56. if (state->pressed) {
  57. register_code(KC_RALT);
  58. register_code(KC_RSHIFT);
  59. Alt = HOLD3;
  60. }
  61. break;
  62. default:
  63. reset_tap_dance(state);
  64. }
  65. }
  66. void altReset(qk_tap_dance_state_t* state, void* user_data) {
  67. switch (Alt) {
  68. case HOLD1:
  69. unregister_code(KC_LALT);
  70. break;
  71. case HOLD2:
  72. unregister_code(KC_RALT);
  73. break;
  74. case HOLD3:
  75. unregister_code(KC_RSHIFT);
  76. unregister_code(KC_RALT);
  77. break;
  78. }
  79. Alt = REST;
  80. }
  81. static int Ctrl = REST;
  82. void ctrlFinish(qk_tap_dance_state_t* state, void* user_data) {
  83. switch (state->count) {
  84. case 1:
  85. if (state->pressed) {
  86. register_code(KC_LCTL);
  87. Ctrl = HOLD1;
  88. } else {
  89. tap_code(KC_ESC);
  90. }
  91. break;
  92. case 2:
  93. if (state->pressed) {
  94. register_code(KC_LGUI);
  95. Ctrl = HOLD2;
  96. }
  97. break;
  98. default:
  99. reset_tap_dance(state);
  100. }
  101. }
  102. void ctrlReset(qk_tap_dance_state_t* state, void* user_data) {
  103. switch (Ctrl) {
  104. case HOLD1:
  105. unregister_code(KC_LCTL);
  106. break;
  107. case HOLD2:
  108. unregister_code(KC_LGUI);
  109. break;
  110. }
  111. Ctrl = REST;
  112. }
  113. qk_tap_dance_action_t tap_dance_actions[] = {
  114. [ALT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altFinish, altReset),
  115. [CTRL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctrlFinish, ctrlReset),
  116. [LEFT] = ACTION_TAP_DANCE_FN(left),
  117. [RIGHT] = ACTION_TAP_DANCE_FN(right),
  118. };