diff options
Diffstat (limited to 'layouts/community/ergodox/teckinesis/keymap.c')
-rw-r--r-- | layouts/community/ergodox/teckinesis/keymap.c | 277 |
1 files changed, 20 insertions, 257 deletions
diff --git a/layouts/community/ergodox/teckinesis/keymap.c b/layouts/community/ergodox/teckinesis/keymap.c index 0b65572f6..509b91af9 100644 --- a/layouts/community/ergodox/teckinesis/keymap.c +++ b/layouts/community/ergodox/teckinesis/keymap.c | |||
@@ -1,28 +1,11 @@ | |||
1 | #include QMK_KEYBOARD_H | 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 | 2 | ||
8 | #define BASE 0 // default layer | 3 | enum layer_names { |
9 | #define SYMB 1 // symbols layer | 4 | BASE, // default layer |
10 | #define MDIA 2 // media layer | 5 | SYMB, // symbols layer |
11 | #define SPEC 3 // special layer | 6 | MDIA, // media layer |
12 | 7 | SPEC // special layer | |
13 | #define LCaps 10 // left caps-shift key | 8 | }; |
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 | 9 | ||
27 | /* | 10 | /* |
28 | * teckinesis layout for ErgoDox (EZ) | 11 | * teckinesis layout for ErgoDox (EZ) |
@@ -62,19 +45,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
62 | */ | 45 | */ |
63 | [BASE] = LAYOUT_ergodox( | 46 | [BASE] = LAYOUT_ergodox( |
64 | // left hand | 47 | // left hand |
65 | F(LSpec),KC_1,KC_2,KC_3 ,KC_4 ,KC_5 ,KC_ESC | 48 | KC_NO ,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 | 49 | ,KC_NO ,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 | 50 | ,KC_NO ,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) | 51 | ,KC_NO ,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 | 52 | ,KC_LCTL,MEH_T(KC_BSLS),ALL_T(KC_SLSH),KC_LALT,KC_LGUI |
70 | ,KC_HOME,KC_END | 53 | ,KC_HOME,KC_END |
71 | ,KC_PGUP | 54 | ,KC_PGUP |
72 | ,KC_BSPC,KC_DEL ,KC_PGDN | 55 | ,KC_BSPC,KC_DEL ,KC_PGDN |
73 | // right hand | 56 | // right hand |
74 | ,KC_GRV ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec) | 57 | ,KC_GRV ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_NO |
75 | ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia) | 58 | ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_NO |
76 | ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb) | 59 | ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_NO |
77 | ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,M(RCaps) | 60 | ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,KC_NO |
78 | ,KC_RGUI,KC_RALT,ALL_T(KC_LBRC),MEH_T(KC_RBRC),KC_RCTL | 61 | ,KC_RGUI,KC_RALT,ALL_T(KC_LBRC),MEH_T(KC_RBRC),KC_RCTL |
79 | ,KC_LEFT ,KC_RGHT | 62 | ,KC_LEFT ,KC_RGHT |
80 | ,KC_UP | 63 | ,KC_UP |
@@ -147,9 +130,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
147 | [MDIA] = LAYOUT_ergodox( | 130 | [MDIA] = LAYOUT_ergodox( |
148 | // left hand | 131 | // left hand |
149 | KC_TRNS ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_ESC | 132 | 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 | 133 | ,KC_TRNS ,KC_NO ,KC_NO ,KC_MS_U ,KC_NO ,KC_VOLU ,KC_WH_U |
151 | ,KC_TRNS ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD | 134 | ,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 | 135 | ,KC_TRNS ,KC_NO ,KC_NO ,KC_MS_D ,KC_NO ,KC_MUTE ,KC_WH_D |
153 | ,KC_LCTL ,KC_MEH ,KC_BTN3 ,KC_BTN1 ,KC_BTN2 | 136 | ,KC_LCTL ,KC_MEH ,KC_BTN3 ,KC_BTN1 ,KC_BTN2 |
154 | ,KC_WSTP ,KC_WREF | 137 | ,KC_WSTP ,KC_WREF |
155 | ,KC_WSCH | 138 | ,KC_WSCH |
@@ -210,246 +193,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
210 | ) | 193 | ) |
211 | }; | 194 | }; |
212 | 195 | ||
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. | 196 | // Runs constantly in the background, in a loop. |
433 | void matrix_scan_user(void) { | 197 | void matrix_scan_user(void) { |
434 | // shift or caps lock turns on red light | 198 | // 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))) { | 199 | if((keyboard_report->mods & MOD_BIT(KC_RSFT)) || (host_keyboard_led_state().caps_lock)) { |
436 | ergodox_right_led_1_on(); | 200 | ergodox_right_led_1_on(); |
437 | } else { | 201 | } else { |
438 | ergodox_right_led_1_off(); | 202 | ergodox_right_led_1_off(); |
439 | } | 203 | } |
440 | 204 | ||
441 | // Symbol layer turns on green light | 205 | // Symbol layer turns on green light |
442 | if(layer_state & (1UL<<SYMB)) { | 206 | if(IS_LAYER_ON(SYMB)) { |
443 | ergodox_right_led_2_on(); | 207 | ergodox_right_led_2_on(); |
444 | } else { | 208 | } else { |
445 | ergodox_right_led_2_off(); | 209 | ergodox_right_led_2_off(); |
446 | } | 210 | } |
447 | 211 | ||
448 | // Media layer turns on blue light | 212 | // Media layer turns on blue light |
449 | if(layer_state & (1UL<<MDIA)) { | 213 | if(IS_LAYER_ON(MDIA)) { |
450 | ergodox_right_led_3_on(); | 214 | ergodox_right_led_3_on(); |
451 | } else { | 215 | } else { |
452 | ergodox_right_led_3_off(); | 216 | ergodox_right_led_3_off(); |
453 | } | 217 | } |
454 | }; | 218 | } |
455 | |||