diff options
Diffstat (limited to 'layouts/community/ergodox/teckinesis/keymap.c')
-rw-r--r-- | layouts/community/ergodox/teckinesis/keymap.c | 455 |
1 files changed, 455 insertions, 0 deletions
diff --git a/layouts/community/ergodox/teckinesis/keymap.c b/layouts/community/ergodox/teckinesis/keymap.c new file mode 100644 index 000000000..0b65572f6 --- /dev/null +++ b/layouts/community/ergodox/teckinesis/keymap.c | |||
@@ -0,0 +1,455 @@ | |||
1 | #include QMK_KEYBOARD_H | ||
2 | #include "led.h" | ||
3 | #include "debug.h" | ||
4 | #include "action_layer.h" | ||
5 | #include "action_util.h" | ||
6 | #include "mousekey.h" | ||
7 | |||
8 | #define BASE 0 // default layer | ||
9 | #define SYMB 1 // symbols layer | ||
10 | #define MDIA 2 // media layer | ||
11 | #define SPEC 3 // special layer | ||
12 | |||
13 | #define LCaps 10 // left caps-shift key | ||
14 | #define LSymb 11 // left symbol-shift key | ||
15 | #define LMdia 12 // left media-shift key | ||
16 | #define LSpec 13 // left special-shift key | ||
17 | #define RCaps 14 // right caps-shift key | ||
18 | #define RSymb 15 // right symbol-shift key | ||
19 | #define RMdia 16 // right media-shift key | ||
20 | #define RSpec 17 // right special-shift key | ||
21 | |||
22 | #define MUL 20 // mouse up left | ||
23 | #define MUR 21 // mouse up right | ||
24 | #define MDL 22 // mouse down left | ||
25 | #define MDR 23 // mouse down right | ||
26 | |||
27 | /* | ||
28 | * teckinesis layout for ErgoDox (EZ) | ||
29 | * | ||
30 | * Modifications from The Ordinary Layout v4 by Will Wolff-Myren willwm@gmail.com | ||
31 | * Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com | ||
32 | * | ||
33 | * No rights reserved. This software is in the public domain. | ||
34 | * Credit me if you are friendly but if you're a jerk don't bother. | ||
35 | * | ||
36 | * Details: readme.md | ||
37 | * https://github.com/willwm/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/teckinesis | ||
38 | */ | ||
39 | |||
40 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
41 | |||
42 | /******* Base Layer ******************************************************************************************************** | ||
43 | * | ||
44 | * ,------------------------------------------------------. ,------------------------------------------------------. | ||
45 | * | Special =+ | 1 | 2 | 3 | 4 | 5 | ESC | | ` | 6 | 7 | 8 | 9 | 0 | -_ Special | | ||
46 | * |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------| | ||
47 | * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media | | ||
48 | * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------| | ||
49 | * | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | '" Symbol | | ||
50 | * |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------| | ||
51 | * | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals | | ||
52 | * `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------' | ||
53 | * | LCtrl |Meh/\ |Hypr//| LAlt | LGui | | RGui | RAlt |Hypr/[|Meh/] | RCtrl | | ||
54 | * `-----------------------------------' `-----------------------------------' | ||
55 | * ,-------------. ,-------------. | ||
56 | * | Home | End | | Left | Right| | ||
57 | * ,------|------|------| |------+------+------. | ||
58 | * | | | PgUp | | Up | | | | ||
59 | * |Backsp| Del |------| |------| Enter| Space| | ||
60 | * | | | PgDn | | Down | | | | ||
61 | * `--------------------' `--------------------' | ||
62 | */ | ||
63 | [BASE] = LAYOUT_ergodox( | ||
64 | // left hand | ||
65 | F(LSpec),KC_1,KC_2,KC_3 ,KC_4 ,KC_5 ,KC_ESC | ||
66 | ,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC | ||
67 | ,M(LSymb) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G | ||
68 | ,M(LCaps) ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB) | ||
69 | ,KC_LCTL,MEH_T(KC_BSLS),ALL_T(KC_SLSH),KC_LALT,KC_LGUI | ||
70 | ,KC_HOME,KC_END | ||
71 | ,KC_PGUP | ||
72 | ,KC_BSPC,KC_DEL ,KC_PGDN | ||
73 | // right hand | ||
74 | ,KC_GRV ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec) | ||
75 | ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia) | ||
76 | ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb) | ||
77 | ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,M(RCaps) | ||
78 | ,KC_RGUI,KC_RALT,ALL_T(KC_LBRC),MEH_T(KC_RBRC),KC_RCTL | ||
79 | ,KC_LEFT ,KC_RGHT | ||
80 | ,KC_UP | ||
81 | ,KC_DOWN ,KC_ENT ,KC_SPC | ||
82 | ), | ||
83 | |||
84 | /******* Symbols Layer ***************************************************************************************************** | ||
85 | * | ||
86 | * ,-----------------------------------------------------. ,-----------------------------------------------------. | ||
87 | * | | F1 | F2 | F3 | F4 | F5 | Esc | | - | F6 | F7 | F8 | F9 | F10 | | | ||
88 | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| | ||
89 | * | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | | | ||
90 | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| | ||
91 | * | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | | | ||
92 | * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------| | ||
93 | * | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | | | ||
94 | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' | ||
95 | * | LCtrl | Meh |Hyper | LAlt | LGui | |RGui/0|RAlt/.|Hypr/=|Meh/+ |RCtrl/Ent| | ||
96 | * `-----------------------------------' `-------------------------------------' | ||
97 | * ,-------------. ,-------------. | ||
98 | * | Left | Right| | Home | End | | ||
99 | * ,------|------|------| |------+------+------. | ||
100 | * | | | Up | | PgUp | | | | ||
101 | * |Space |Enter |------| |------|BackSp| Del | | ||
102 | * | | | Down | | PgDn | | | | ||
103 | * `--------------------' `--------------------' | ||
104 | */ | ||
105 | [SYMB] = LAYOUT_ergodox( | ||
106 | // left hand | ||
107 | KC_TRNS ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_ESC | ||
108 | ,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM) | ||
109 | ,KC_TRNS ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV | ||
110 | ,KC_TRNS ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB | ||
111 | ,KC_LCTL ,KC_MEH ,KC_HYPR ,KC_LALT ,KC_LGUI | ||
112 | ,KC_LEFT ,KC_RGHT | ||
113 | ,KC_UP | ||
114 | ,KC_SPC ,KC_ENT ,KC_DOWN | ||
115 | // right hand | ||
116 | ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS | ||
117 | ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS | ||
118 | ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS | ||
119 | ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS | ||
120 | ,GUI_T(KC_0),ALT_T(KC_DOT),ALL_T(KC_EQL),MEH_T(KC_PLUS),CTL_T(KC_ENT) | ||
121 | ,KC_HOME ,KC_END | ||
122 | ,KC_PGUP | ||
123 | ,KC_PGDN ,KC_BSPC ,KC_DEL | ||
124 | ), | ||
125 | |||
126 | /******* Media Layer ******************************************************************************************************* | ||
127 | * | ||
128 | * ,---------------------------------------------------------------. ,---------------------------------------------------------------. | ||
129 | * | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | | | ||
130 | * |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------| | ||
131 | * | | |MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | | | | ||
132 | * |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------| | ||
133 | * | | |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | | | | ||
134 | * |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------| | ||
135 | * | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | | | ||
136 | * `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------' | ||
137 | * |LCtrl| Meh | MClick | LClick | R Click| |Cmd/Insrt|Optn/Del | Hyper | Meh |RCtrl| | ||
138 | * `---------------------------------------------' `---------------------------------------------' | ||
139 | * ,-------------. ,-------------. | ||
140 | * | Stop |Refrsh| | Prev | Next | | ||
141 | * ,------|------|------| |------+------+------. | ||
142 | * |Brwser|Brwser|Search| |VolUp | | | | ||
143 | * |Back | Fwd |------| |------| Stop | Play-| | ||
144 | * | | | Home | |VolDn | | Pause| | ||
145 | * `--------------------' `--------------------' | ||
146 | */ | ||
147 | [MDIA] = LAYOUT_ergodox( | ||
148 | // left hand | ||
149 | KC_TRNS ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_ESC | ||
150 | ,KC_TRNS ,KC_NO ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U | ||
151 | ,KC_TRNS ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD | ||
152 | ,KC_TRNS ,KC_NO ,M(MDL) ,KC_MS_D ,M(MDR) ,KC_MUTE ,KC_WH_D | ||
153 | ,KC_LCTL ,KC_MEH ,KC_BTN3 ,KC_BTN1 ,KC_BTN2 | ||
154 | ,KC_WSTP ,KC_WREF | ||
155 | ,KC_WSCH | ||
156 | ,KC_WBAK ,KC_NO ,KC_WHOM | ||
157 | // right hand | ||
158 | ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_TRNS | ||
159 | ,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_TRNS | ||
160 | ,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO ,KC_TRNS | ||
161 | ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_TRNS | ||
162 | ,GUI_T(KC_INS),ALT_T(KC_DEL),KC_HYPR ,KC_MEH ,KC_RCTL | ||
163 | ,KC_MPRV ,KC_MNXT | ||
164 | ,KC_VOLU | ||
165 | ,KC_VOLD ,KC_MSTP ,KC_MPLY | ||
166 | ), | ||
167 | |||
168 | /******* Special Layer ***************************************************************************************************** | ||
169 | * | ||
170 | * ,-----------------------------------------------------. ,-----------------------------------------------------. | ||
171 | * | | Esc | | | | | | | | | | | | Bspc | | | ||
172 | * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| | ||
173 | * | | | | | | | | | | | | | | | | | ||
174 | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| | ||
175 | * | | | | | | |------| |------| | | | | | | | ||
176 | * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| | ||
177 | * | | | | | | | | | | | | | | | RShift | | ||
178 | * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' | ||
179 | * | | | | | | | | | | | | | ||
180 | * `----------------------------------' `----------------------------------' | ||
181 | * ,-------------. ,-------------. | ||
182 | * | | | | | | | ||
183 | * ,------|------|------| |------+------+------. | ||
184 | * | | | | | | | | | ||
185 | * | | |------| |------| | | | ||
186 | * | | | | | | | | | ||
187 | * `--------------------' `--------------------' | ||
188 | */ | ||
189 | [SPEC] = LAYOUT_ergodox( | ||
190 | // left hand | ||
191 | KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
192 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
193 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
194 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
195 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
196 | |||
197 | ,KC_TRNS ,KC_TRNS | ||
198 | ,KC_TRNS | ||
199 | ,KC_TRNS,KC_TRNS ,KC_TRNS | ||
200 | // right hand | ||
201 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_BSPC ,KC_TRNS | ||
202 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
203 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
204 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_RSFT | ||
205 | ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
206 | |||
207 | ,KC_TRNS ,KC_TRNS | ||
208 | ,KC_TRNS | ||
209 | ,KC_TRNS ,KC_TRNS ,KC_TRNS | ||
210 | ) | ||
211 | }; | ||
212 | |||
213 | const uint16_t PROGMEM fn_actions[] = { | ||
214 | // the faux shift keys are implemented as macro taps | ||
215 | [LCaps] = ACTION_MACRO_TAP(LCaps) | ||
216 | ,[LSymb] = ACTION_MACRO_TAP(LSymb) | ||
217 | ,[LMdia] = ACTION_MACRO_TAP(LMdia) | ||
218 | ,[LSpec] = ACTION_MACRO_TAP(LSpec) | ||
219 | ,[RCaps] = ACTION_MACRO_TAP(RCaps) | ||
220 | ,[RSymb] = ACTION_MACRO_TAP(RSymb) | ||
221 | ,[RMdia] = ACTION_MACRO_TAP(RMdia) | ||
222 | ,[RSpec] = ACTION_MACRO_TAP(RSpec) | ||
223 | }; | ||
224 | |||
225 | uint16_t caps_shift = 0; | ||
226 | uint16_t symb_shift = 0; | ||
227 | uint16_t mdia_shift = 0; | ||
228 | |||
229 | bool symb_lock = false; | ||
230 | bool mdia_lock = false; | ||
231 | |||
232 | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | ||
233 | { | ||
234 | switch(id) { | ||
235 | // There are two shift keys for each layer so we increment a layer_shift var when one | ||
236 | // is pressed and decrement when one is released. If both are pressed at the same time | ||
237 | // then the layer is locked (or unlocked). The shift counts are bound between 0 and 2 | ||
238 | // only because sometimes rapid pressing led to irregular events; this way the states | ||
239 | // are self healing during use. | ||
240 | |||
241 | case LCaps: // both caps-shift keys trigger Left Shift | ||
242 | case RCaps: // so they don't interfere with the magic combo | ||
243 | if (record->event.pressed && !record->tap.count) { | ||
244 | if(++caps_shift > 2) caps_shift = 2; | ||
245 | if(caps_shift == 2) { | ||
246 | register_code(KC_CAPS); | ||
247 | unregister_code(KC_CAPS); | ||
248 | } else if(caps_shift == 1) { | ||
249 | register_code(KC_LSFT); | ||
250 | } | ||
251 | } else { | ||
252 | if(--caps_shift < 0) caps_shift = 0; | ||
253 | if(caps_shift == 0) unregister_code(KC_LSFT); | ||
254 | } | ||
255 | break; | ||
256 | |||
257 | case LSymb: | ||
258 | if (record->event.pressed) { | ||
259 | if(++symb_shift > 2) symb_shift = 2; | ||
260 | if(symb_shift == 2) { | ||
261 | symb_lock = !symb_lock; | ||
262 | } else if(symb_shift == 1) { | ||
263 | layer_on(SYMB); | ||
264 | } | ||
265 | } else { | ||
266 | if(--symb_shift < 0) symb_shift = 0; | ||
267 | if((symb_shift == 0) && (!symb_lock)) layer_off(SYMB); | ||
268 | } | ||
269 | break; | ||
270 | |||
271 | case LMdia: | ||
272 | if (record->event.pressed) { | ||
273 | if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { | ||
274 | register_code(KC_TAB); | ||
275 | } else { | ||
276 | if(++mdia_shift > 2) mdia_shift = 2; | ||
277 | if(mdia_shift == 2) { | ||
278 | mdia_lock = !mdia_lock; | ||
279 | } else if(mdia_shift == 1) { | ||
280 | layer_on(MDIA); | ||
281 | } | ||
282 | } | ||
283 | } else { | ||
284 | if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { | ||
285 | unregister_code(KC_TAB); | ||
286 | } else { | ||
287 | if(--mdia_shift < 0) mdia_shift = 0; | ||
288 | if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); | ||
289 | } | ||
290 | } | ||
291 | break; | ||
292 | |||
293 | case LSpec: | ||
294 | if (record->event.pressed) { | ||
295 | if (record->tap.count && !record->tap.interrupted) { | ||
296 | register_code(KC_EQL); | ||
297 | } else { | ||
298 | layer_on(SPEC); | ||
299 | } | ||
300 | } else { | ||
301 | if(record->tap.count && !record->tap.interrupted) { | ||
302 | unregister_code(KC_EQL); | ||
303 | } else { | ||
304 | layer_off(SPEC); | ||
305 | } | ||
306 | } | ||
307 | break; | ||
308 | |||
309 | case RSymb: | ||
310 | if (record->event.pressed) { | ||
311 | if (record->tap.count && (!symb_shift) && (!symb_lock)) { | ||
312 | register_code(KC_QUOT); | ||
313 | } else { | ||
314 | if(++symb_shift > 2) symb_shift = 2; | ||
315 | if(symb_shift == 2) { | ||
316 | symb_lock = !symb_lock; | ||
317 | } else if(symb_shift == 1) { | ||
318 | layer_on(SYMB); | ||
319 | } | ||
320 | } | ||
321 | } else { | ||
322 | if(record->tap.count && symb_shift == 0) { | ||
323 | unregister_code(KC_QUOT); | ||
324 | } else { | ||
325 | if(--symb_shift < 0) symb_shift = 0; | ||
326 | if((!symb_shift) && (!symb_lock)) layer_off(SYMB); | ||
327 | } | ||
328 | } | ||
329 | break; | ||
330 | |||
331 | case RMdia: | ||
332 | if (record->event.pressed) { | ||
333 | if (record->tap.count && (!mdia_shift) && (!mdia_lock)) { | ||
334 | register_code(KC_BSLS); | ||
335 | } else { | ||
336 | if(++mdia_shift > 2) mdia_shift = 2; | ||
337 | if(mdia_shift == 2) { | ||
338 | mdia_lock = !mdia_lock; | ||
339 | } else if(mdia_shift == 1) { | ||
340 | layer_on(MDIA); | ||
341 | } | ||
342 | } | ||
343 | } else { | ||
344 | if(record->tap.count && (!mdia_shift) && (!mdia_lock)) { | ||
345 | unregister_code(KC_BSLS); | ||
346 | } else { | ||
347 | if(--mdia_shift < 0) mdia_shift = 0; | ||
348 | if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); | ||
349 | } | ||
350 | } | ||
351 | break; | ||
352 | |||
353 | case RSpec: | ||
354 | if (record->event.pressed) { | ||
355 | if (record->tap.count && !record->tap.interrupted) { | ||
356 | register_code(KC_MINS); | ||
357 | } else { | ||
358 | layer_on(SPEC); | ||
359 | } | ||
360 | } else { | ||
361 | if(record->tap.count && !record->tap.interrupted) { | ||
362 | unregister_code(KC_MINS); | ||
363 | } else { | ||
364 | layer_off(SPEC); | ||
365 | } | ||
366 | } | ||
367 | break; | ||
368 | |||
369 | // mouse diagonals | ||
370 | |||
371 | case MUL: // mouse up left | ||
372 | if (record->event.pressed) { | ||
373 | mousekey_on(KC_MS_UP); | ||
374 | mousekey_on(KC_MS_LEFT); | ||
375 | mousekey_send(); | ||
376 | } else { | ||
377 | mousekey_off(KC_MS_UP); | ||
378 | mousekey_off(KC_MS_LEFT); | ||
379 | mousekey_send(); | ||
380 | } | ||
381 | break; | ||
382 | |||
383 | case MUR: // mouse up right | ||
384 | if (record->event.pressed) { | ||
385 | mousekey_on(KC_MS_UP); | ||
386 | mousekey_on(KC_MS_RIGHT); | ||
387 | mousekey_send(); | ||
388 | } else { | ||
389 | mousekey_off(KC_MS_UP); | ||
390 | mousekey_off(KC_MS_RIGHT); | ||
391 | mousekey_send(); | ||
392 | } | ||
393 | break; | ||
394 | |||
395 | case MDL: // mouse down left | ||
396 | if (record->event.pressed) { | ||
397 | mousekey_on(KC_MS_DOWN); | ||
398 | mousekey_on(KC_MS_LEFT); | ||
399 | mousekey_send(); | ||
400 | } else { | ||
401 | mousekey_off(KC_MS_DOWN); | ||
402 | mousekey_off(KC_MS_LEFT); | ||
403 | mousekey_send(); | ||
404 | } | ||
405 | break; | ||
406 | |||
407 | case MDR: // mouse down right | ||
408 | if (record->event.pressed) { | ||
409 | mousekey_on(KC_MS_DOWN); | ||
410 | mousekey_on(KC_MS_RIGHT); | ||
411 | mousekey_send(); | ||
412 | } else { | ||
413 | mousekey_off(KC_MS_DOWN); | ||
414 | mousekey_off(KC_MS_RIGHT); | ||
415 | mousekey_send(); | ||
416 | } | ||
417 | break; | ||
418 | |||
419 | default: | ||
420 | // none | ||
421 | break; | ||
422 | } | ||
423 | |||
424 | return MACRO_NONE; | ||
425 | }; | ||
426 | |||
427 | // Runs just one time when the keyboard initializes. | ||
428 | void matrix_init_user(void) { | ||
429 | |||
430 | }; | ||
431 | |||
432 | // Runs constantly in the background, in a loop. | ||
433 | void matrix_scan_user(void) { | ||
434 | // shift or caps lock turns on red light | ||
435 | if(caps_shift || (keyboard_report->mods & MOD_BIT(KC_RSFT)) || (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) { | ||
436 | ergodox_right_led_1_on(); | ||
437 | } else { | ||
438 | ergodox_right_led_1_off(); | ||
439 | } | ||
440 | |||
441 | // Symbol layer turns on green light | ||
442 | if(layer_state & (1UL<<SYMB)) { | ||
443 | ergodox_right_led_2_on(); | ||
444 | } else { | ||
445 | ergodox_right_led_2_off(); | ||
446 | } | ||
447 | |||
448 | // Media layer turns on blue light | ||
449 | if(layer_state & (1UL<<MDIA)) { | ||
450 | ergodox_right_led_3_on(); | ||
451 | } else { | ||
452 | ergodox_right_led_3_off(); | ||
453 | } | ||
454 | }; | ||
455 | |||