gordon.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. #ifndef GORDON
  2. #define GORDON
  3. #include "quantum.h"
  4. #include "process_keycode/process_tap_dance.h"
  5. // Fillers to make layering more clear
  6. #define _______ KC_TRNS
  7. #define ________ KC_TRNS
  8. #define _________ KC_TRNS
  9. #define _XXXXXX_ KC_TRNS
  10. #define XXXXXXX KC_NO
  11. // KC codes that are too long
  12. #define DOLLAR KC_DOLLAR
  13. #define LSQUIGLY KC_LBRACKET
  14. #define RSQUIGLY KC_RBRACKET
  15. #define NUMLOCK KC_NUMLOCK
  16. #define CAPLOCK KC_CAPSLOCK
  17. #define BK_SLASH KC_BSLASH
  18. #define ASTERSK KC_KP_ASTERISK
  19. // Navigation
  20. #define SNAPLEFT LGUI(KC_LEFT)
  21. #define SNAPRGHT LGUI(KC_RIGHT)
  22. #define SNAPUP LGUI(KC_UP)
  23. #define SNAPDOWN LGUI(KC_DOWN)
  24. #define PREVTAB LCTL(LSFT(KC_TAB))
  25. #define NEXTTAB LCTL(KC_TAB)
  26. #define WORKRIGHT LCTL(LGUI(KC_RIGHT))
  27. #define WORKLEFT LCTL(LGUI(KC_LEFT))
  28. #define APP_1 LCTL(LGUI(KC_1))
  29. #define APP_2 LCTL(LGUI(KC_2))
  30. #define APP_3 LCTL(LGUI(KC_3))
  31. #define APP_4 LCTL(LGUI(KC_4))
  32. #define APP_5 LCTL(LGUI(KC_5))
  33. #define APP_6 LCTL(LGUI(KC_6))
  34. #define APP_7 LCTL(LGUI(KC_7))
  35. #define APP_8 LCTL(LGUI(KC_8))
  36. // KC/modifier hold
  37. #define CTRL_F CTL_T(KC_F)
  38. #define CTRL_J CTL_T(KC_J)
  39. #define CTRL_Z CTL_T(KC_Z)
  40. #define ALT_V ALT_T(KC_V)
  41. #define ALT_M ALT_T(KC_M)
  42. #define WIN_G GUI_T(KC_G)
  43. #define WIN_H GUI_T(KC_H)
  44. #define HYPER_X ALL_T(KC_X)
  45. #define HYPE_DOT ALL_T(KC_DOT)
  46. #define MEH_S MEH_T(KC_S)
  47. #define MEH_L MEH_T(KC_L)
  48. #define ALT_HOME ALT_T(KC_HOME)
  49. // KC/Layer Hold
  50. #define NAV_E LT(_NAV,KC_E)
  51. #define NUMPAD_D LT(_NUMPAD,KC_D)
  52. #define MOUSE_C LT(_MOUSE,KC_C)
  53. #define SYMB_BSP LT(_SYMBOLS,KC_BSPACE)
  54. #define COL_MOUS LT(_MOUSE,KC_SCOLON)
  55. #define SPAC_SYM LT(_SYMBOLS,KC_SPACE)
  56. #define SPAC_TXT LT(_TEXTNAV,KC_SPACE)
  57. #define APP_SW_I LT(_APPSWITCH,KC_I)
  58. #define APP_SW_K LT(_APPSWITCH,KC_K)
  59. // #define TLSLSH TIL_SLASH
  60. // #define TILDA_3x TILD3
  61. // #define _RESET_ UP_ENTER_RESET
  62. // Double Modifier ONLY hold
  63. #define ALT_SHFT LSFT(KC_LALT)
  64. #define CTR_SHFT LSFT(KC_LCTL)
  65. // KC/Double modifier Hold
  66. #define CTR_SH_W MT(MOD_LCTL|MOD_LSFT,KC_W)
  67. #define CTR_AL_R MT(MOD_LCTL|MOD_LALT,KC_R)
  68. #define ALT_SH_R MT(MOD_LSFT|MOD_LALT,KC_R)
  69. //MISC
  70. #define PRINTSCR KC_PSCREEN
  71. #define CALTDEL LCTL(LALT(KC_DEL))
  72. #define TSKMGR LCTL(LSFT(KC_ESC))
  73. typedef struct {
  74. bool is_press_action;
  75. int state;
  76. } xtap;
  77. enum {
  78. SINGLE_TAP = 1,
  79. SINGLE_HOLD = 2,
  80. DOUBLE_TAP = 3,
  81. DOUBLE_HOLD = 4,
  82. DOUBLE_SINGLE_TAP = 5, //send two single taps
  83. TRIPLE_TAP = 6,
  84. TRIPLE_HOLD = 7
  85. };
  86. //Tap dance enums
  87. enum
  88. {
  89. F12TAP = 0,
  90. F12ETAPS,
  91. CALCCOMP,
  92. REFRESH, //send R, or Control+R if double tapped.
  93. ENDESC,
  94. XESC, //'quad function'. x, control, escape, alt
  95. ALY2, //'quad function': a, Hyper, ctrl+a, layer 2
  96. PRLOCK,
  97. F6F7, // Shift F6 or Alt F7
  98. TABCOMBO,
  99. FCTRL,
  100. F3D,
  101. ALTF4,
  102. COMMA,
  103. AT,
  104. HTAB,
  105. F1F13,
  106. F2F14,
  107. F5F15,
  108. ENDHOME,
  109. Q_ESCAPE
  110. };
  111. #ifdef TAP_DANCE_ENABLE
  112. #define F1_F13 TD(F1F13)
  113. #define F2_F14 TD(F2F14)
  114. #define F5_F15 TD(F5F15)
  115. #define F4_ALTF4 TD(ALTF4)
  116. #define END_ESC TD(ENDESC)
  117. #define Q_ESC TD(Q_ESCAPE)
  118. #define END_HOME TD(ENDHOME)
  119. #define SHF6_AF7 TD(F6F7)
  120. #define F12_RUN TD(F12ETAPS)
  121. #define COMMA_TD TD(COMMA)
  122. #define CALC_COM TD(CALCCOMP)
  123. #else //just to make things compile
  124. #define F1_F13 KC_1
  125. #define F2_F14 KC_1
  126. #define F5_F15 KC_1
  127. #define F4_ALTF4 KC_1
  128. #define END_ESC KC_1
  129. #define END_HOME KC_1
  130. #define SHF6_AF7 KC_1
  131. #define F12_RUN KC_1
  132. #define COMMA_TD KC_1
  133. #define CALC_COM KC_1
  134. #endif
  135. enum gordon_layers
  136. {
  137. _QWERTY = 0,
  138. _SYMBOLS, // Programming and all other commonlye used symbols
  139. _MOUSE, // Mouse movement and also a few macros
  140. _NUMPAD, // For getting a numpad under the right hand, and a few helpful things under the left
  141. _NAV, // Windows navigation. Windows snapping, changing workspaces, and ARROWS
  142. _MACROS, // Non-text related Macros.
  143. _FUNCTION, // Not sure what I had in mind for this one
  144. _APPSWITCH, // For switching between apps using the `ctrl + Win + [num]` shortcut.
  145. // This allows for toggling windows of the same app with one button.
  146. // Example: Press and hold `I`, then tap `j` multiple times to cycle through all
  147. // Intellij windows (and only Intellij). This requires the app to be pinned to the Windows bar
  148. _ONESHOT, // A layer I use for shortcuts that require multiple modifiers and a button not on my home layer
  149. // Example: If I need to hit `alt + shift + 5`
  150. _TEXTNAV, // Navigate through text
  151. _QWERTY_KIDS, // So my kids can do nothing but type. Could also be a `speed typing` layer with no LT or MTs
  152. _STREET_FIGHTER, // For Street Fighter 5. Die 1000x Deaths!!!!
  153. _DIRNAV, // For navigating to different directories.
  154. _TEXT_MACROS // For text-manipulation macros. Passwords, saved strings, pre-formatting
  155. };
  156. void register_hyper (void);
  157. void unregister_hyper (void);
  158. void register_ctrl_a (void);
  159. void unregister_ctrl_a (void);
  160. void register_alt_f7 (void);
  161. void unregister_alt_f7 (void);
  162. void register_shift_f6 (void);
  163. void unregister_shift_f6 (void);
  164. void register_ctrl_shift (void);
  165. void unregister_ctrl_shift (void);
  166. void register_alt_shift (void);
  167. void unregister_alt_shift (void);
  168. int cur_dance (qk_tap_dance_state_t *state);
  169. int hold_cur_dance (qk_tap_dance_state_t *state);
  170. void x_finished (qk_tap_dance_state_t *state, void *user_data);
  171. void x_reset (qk_tap_dance_state_t *state, void *user_data);
  172. void h_finished (qk_tap_dance_state_t *state, void *user_data);
  173. void h_reset (qk_tap_dance_state_t *state, void *user_data);
  174. void tab_finished (qk_tap_dance_state_t *state, void *user_data);
  175. void tab_reset (qk_tap_dance_state_t *state, void *user_data);
  176. void comma_finished (qk_tap_dance_state_t *state, void *user_data);
  177. void comma_reset (qk_tap_dance_state_t *state, void *user_data);
  178. void bt_finished (qk_tap_dance_state_t *state, void *user_data);
  179. void bt_reset (qk_tap_dance_state_t *state, void *user_data);
  180. enum secret_strings {
  181. KC_SECRET_1 = SAFE_RANGE,
  182. KC_SECRET_2,
  183. KC_SECRET_3,
  184. KC_SECRET_4,
  185. KC_SECRET_5,
  186. END_SECRET_SAFE_RANGE
  187. };
  188. // Macro Declarations
  189. enum {
  190. INFOQM = END_SECRET_SAFE_RANGE,
  191. MODRESET,
  192. TIL_SLASH,
  193. DEREF,
  194. EQRIGHT,
  195. TILD3,
  196. TICK3,
  197. SPRK_TCK,
  198. ALTTAB_START,
  199. ALTTAB_END,
  200. UP_ENTER_RESET,
  201. DBMS_OUT,
  202. DIE_1000X_RIGHT,
  203. DIE_1000X_LEFT,
  204. ID_MAN_IP
  205. };
  206. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt);
  207. #endif