dvorak_42_key.c 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. // Copyright 2022 LucW (@luc-languagetools)
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "dvorak_42_key.h"
  4. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  5. // tap dance processing
  6. qk_tap_dance_action_t *action;
  7. switch (keycode) {
  8. case TD(TD_DEL_WORD_DEL): // list all tap dance keycodes with tap-hold configurations
  9. action = &tap_dance_actions[TD_INDEX(keycode)];
  10. if (!record->event.pressed && action->state.count && !action->state.finished) {
  11. tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
  12. tap_code16(tap_hold->tap);
  13. }
  14. }
  15. // shell macros
  16. if(record->event.pressed) {
  17. switch (keycode) {
  18. case SHELL_LS:
  19. SEND_STRING("ls\n");
  20. break;
  21. case SHELL_LSLTR:
  22. SEND_STRING("ls -ltr\n");
  23. break;
  24. case SHELL_LSLA:
  25. SEND_STRING("ls -la\n");
  26. break;
  27. case SHELL_CDPRE:
  28. SEND_STRING("cd ..\n");
  29. break;
  30. case SHELL_LESS:
  31. SEND_STRING("less ");
  32. break;
  33. case SHELL_PLESS:
  34. SEND_STRING(" | less");
  35. break;
  36. case SHELL_PGREP:
  37. SEND_STRING(" | grep ");
  38. return true;
  39. break;
  40. case SHELL_TAILF:
  41. SEND_STRING("tail -f ");
  42. break;
  43. case SHELL_SCREENRD:
  44. SEND_STRING("screen -r -d ");
  45. break;
  46. case SHELL_SCREEN_NEW:
  47. SEND_STRING("screen -S ");
  48. break;
  49. case SHELL_SCREEN_LIST:
  50. SEND_STRING("screen -list\n");
  51. break;
  52. case SHELL_GIT_DIFF:
  53. SEND_STRING("git diff\n");
  54. break;
  55. case SHELL_GIT_STATUS:
  56. SEND_STRING("git status\n");
  57. break;
  58. case WINDOWS10_WORKSPACE_LEFT:
  59. tap_code16(C(G(KC_LEFT)));
  60. break;
  61. case WINDOWS10_WORKSPACE_RIGHT:
  62. tap_code16(C(G(KC_RIGHT)));
  63. break;
  64. case WINDOWS10_TASK_VIEW:
  65. tap_code16(G(KC_TAB));
  66. break;
  67. // linux screen shortcuts
  68. case SCREEN_TAB_LEFT:
  69. SEND_STRING(SS_LCTL("a") "p");
  70. break;
  71. case SCREEN_TAB_RIGHT:
  72. SEND_STRING(SS_LCTL("a") "n");
  73. break;
  74. case SCREEN_NEW_TAB:
  75. SEND_STRING(SS_LCTL("a") "c");
  76. break;
  77. case SCREEN_DETACH:
  78. SEND_STRING(SS_LCTL("a") "d");
  79. break;
  80. case SCREEN_RENAME:
  81. SEND_STRING(SS_LCTL("a") "A");
  82. break;
  83. case SCREEN_NUMBER:
  84. SEND_STRING(SS_LCTL("a") ":number ");
  85. break;
  86. case SCREEN_0:
  87. SEND_STRING(SS_LCTL("a") "0");
  88. break;
  89. case SCREEN_1:
  90. SEND_STRING(SS_LCTL("a") "1");
  91. break;
  92. case SCREEN_2:
  93. SEND_STRING(SS_LCTL("a") "2");
  94. break;
  95. case SCREEN_3:
  96. SEND_STRING(SS_LCTL("a") "3");
  97. break;
  98. case SCREEN_4:
  99. SEND_STRING(SS_LCTL("a") "4");
  100. break;
  101. case SCREEN_5:
  102. SEND_STRING(SS_LCTL("a") "5");
  103. break;
  104. case SCREEN_6:
  105. SEND_STRING(SS_LCTL("a") "6");
  106. break;
  107. case SCREEN_7:
  108. SEND_STRING(SS_LCTL("a") "7");
  109. break;
  110. case SCREEN_8:
  111. SEND_STRING(SS_LCTL("a") "8");
  112. break;
  113. case SCREEN_9:
  114. SEND_STRING(SS_LCTL("a") "9");
  115. break;
  116. case SCREEN_COPY_MODE:
  117. SEND_STRING(SS_LCTL("a") "[");
  118. break;
  119. case SCREEN_PASTE:
  120. SEND_STRING(SS_LCTL("a") "]");
  121. break;
  122. case SCREEN_KILL:
  123. SEND_STRING(SS_LCTL("a") "ky");
  124. break;
  125. case SCREEN_READREG_1:
  126. SEND_STRING(SS_LCTL("a") ":readreg 1\n");
  127. break;
  128. case SCREEN_READREG_2:
  129. SEND_STRING(SS_LCTL("a") ":readreg 2\n");
  130. break;
  131. case SCREEN_READREG_3:
  132. SEND_STRING(SS_LCTL("a") ":readreg 3\n");
  133. break;
  134. case SCREEN_PASTEREG_1:
  135. SEND_STRING(SS_LCTL("a") ":paste 1\n");
  136. break;
  137. case SCREEN_PASTEREG_2:
  138. SEND_STRING(SS_LCTL("a") ":paste 2\n");
  139. break;
  140. case SCREEN_PASTEREG_3:
  141. SEND_STRING(SS_LCTL("a") ":paste 3\n");
  142. break;
  143. }
  144. }
  145. return true;
  146. }
  147. bool caps_word_press_user(uint16_t keycode) {
  148. switch (keycode) {
  149. // Keycodes that continue Caps Word, with shift applied.
  150. case KC_A ... KC_Z:
  151. add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to next key.
  152. return true;
  153. default:
  154. return false; // Deactivate Caps Word.
  155. }
  156. }
  157. void tap_dance_tap_hold_finished(qk_tap_dance_state_t *state, void *user_data) {
  158. tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)user_data;
  159. if (state->pressed) {
  160. if (state->count == 1
  161. #ifndef PERMISSIVE_HOLD
  162. && !state->interrupted
  163. #endif
  164. ) {
  165. register_code16(tap_hold->hold);
  166. tap_hold->held = tap_hold->hold;
  167. } else {
  168. register_code16(tap_hold->tap);
  169. tap_hold->held = tap_hold->tap;
  170. }
  171. }
  172. }
  173. void tap_dance_tap_hold_reset(qk_tap_dance_state_t *state, void *user_data) {
  174. tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)user_data;
  175. if (tap_hold->held) {
  176. unregister_code16(tap_hold->held);
  177. tap_hold->held = 0;
  178. }
  179. }
  180. // Tap Dance definitions
  181. qk_tap_dance_action_t tap_dance_actions[] = {
  182. // Tap once for Escape, twice for Caps Lock
  183. // [TD_BSPC_CTL_BSPC] = ACTION_TAP_DANCE_DOUBLE(KC_BSPC, RCTL(KC_BSPC)),
  184. // [TD_BSPC_CTL_BSPC_IOS] = ACTION_TAP_DANCE_DOUBLE(KC_BSPC, LALT(KC_BSPC)),
  185. [TD_DEL_WORD_DEL] = ACTION_TAP_DANCE_TAP_HOLD(RCTL(KC_BSPC), KC_BSPC),
  186. [TD_DEL_WORD_DEL_IOS] = ACTION_TAP_DANCE_TAP_HOLD(LALT(KC_BSPC), KC_BSPC)
  187. };