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