2 * algernon's ErgoDox EZ layout, please see the README.md file!
5 #include "ergodox_ez.h"
8 #include "action_layer.h"
9 #include "action_util.h"
12 #include "keymap_plover.h"
31 // Buttons that do extra stuff
38 // Function / number keys
51 // Application select keys
58 // Diagonal mouse movement
65 AE_VIS, // Visual mode
66 AE_PSTDEL, // Paste/Delete
68 AE_EMACS, // Emacs copy & paste mode
69 AE_TERM, // Terminal copy & paste mode
70 AE_OTHER, // Other copy & paste mode
71 AE_INS, // Insert mode
72 AE_OVR, // Overwrite mode
75 // Hungarian layer keys
86 // One-handed layout specials
105 /* States & timers */
107 uint8_t m_visual_state = 0;
108 static uint16_t m_cutdel_timer;
109 static uint16_t m_copypaste_timer;
111 uint16_t gui_timer = 0;
113 uint16_t kf_timers[12];
115 uint16_t oh_base_timer = 0;
116 uint16_t oh_bsspc_timer = 0;
117 uint16_t oh_entsft_timer = 0;
119 #define OH_BLINK_INTERVAL 500
121 uint8_t oh_left_blink = 0;
122 uint16_t oh_left_blink_timer = 0;
123 uint8_t oh_right_blink = 0;
124 uint16_t oh_right_blink_timer = 0;
132 uint8_t cp_mode = CP_EMACS;
136 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
138 /* Keymap 0: Base Layer
140 * ,-----------------------------------------------------. ,-----------------------------------------------------.
141 * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 |
142 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
143 * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | = |
144 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
145 * | Tab | A | O | E | U | I |------| |------| D | H | T | N | S | \ |
146 * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------|
147 * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop |
148 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
149 * | Home | End | Down | Up | : | | - | Left | Right| PgUp | PgDn |
150 * `-----------------------------------' `-----------------------------------'
151 * ,-------------. ,-------------.
152 * | LAlt | GUI | |EMACS | 1HND |
153 * ,------|------|------| |------+------+------.
154 * | | | Ctrl | | LEAD | | |
155 * |Backsp|LShift|------| |------| Enter| Space|
156 * | | | ESC | | HUN | | |
157 * `--------------------' `--------------------'
161 KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
162 ,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
163 ,KC_TAB ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
164 ,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
165 ,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_COLN)
169 ,KC_BSPC,F(F_SFT),M(A_ESC)
172 ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
173 ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_EQL
174 ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_BSLS
175 ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP
176 ,KC_MINS,KC_LEFT,KC_RGHT ,KC_PGUP ,KC_PGDN
178 ,OSL(EMACS),M(OH_LEFT)
180 ,F(F_HUN),KC_ENT ,KC_SPC
183 /* Keymap 1: Application select layer
185 * ,-----------------------------------------------------. ,-----------------------------------------------------.
186 * | |Music |Slack |Emacs |Term |Chrome| | | | | | | | | |
187 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
188 * | | | | | | | | | | | | | | | |
189 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
190 * | | | | | | |------| |------| | | | | | |
191 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
192 * | | | | | | | | | | | | | | | |
193 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
194 * | | | | | | | | | | | |
195 * `----------------------------------' `----------------------------------'
196 * ,-------------. ,-------------.
198 * ,------|------|------| |------+------+------.
200 * | | |------| |------| | |
202 * `--------------------' `--------------------'
207 KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS
208 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
209 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
210 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
211 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
215 ,KC_TRNS ,KC_TRNS ,KC_TRNS
218 ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS
219 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
220 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
221 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
222 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
226 ,KC_TRNS ,KC_TRNS ,KC_TRNS
230 /* Keymap 2: Hungarian Layer
232 * ,-----------------------------------------------------. ,-----------------------------------------------------.
233 * | | | | | | | | | | | | | | | |
234 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
235 * | | | Ő | | Ű | | | | | | | | | | |
236 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
237 * | | Á | Ó | É | Ú | Í |------| |------| | | | | | |
238 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
239 * | | | Ö | | Ü | | | | | | | | | | |
240 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
241 * | | | | | | | | | | | |
242 * `----------------------------------' `----------------------------------'
243 * ,-------------. ,-------------.
245 * ,------|------|------| |------+------+------.
247 * | | |------| |------| | |
248 * | | | | | BASE | | |
249 * `--------------------' `--------------------'
254 KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS
255 ,KC_NO ,KC_NO ,M(HU_OEE),KC_NO ,M(HU_UEE),KC_NO ,KC_NO
256 ,KC_NO ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II)
257 ,KC_TRNS ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,KC_NO ,KC_NO
258 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_NO
262 ,KC_TRNS ,KC_TRNS ,KC_TRNS
265 ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
266 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
267 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
268 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
269 ,KC_NO ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
273 ,F(F_BSE),KC_TRNS ,KC_TRNS
276 /* Keymap 3: Spacemacs layer
278 * ,-----------------------------------------------------. ,-----------------------------------------------------.
279 * | MS Slow | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |ScrLCK| |ScrLCK| 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 |
280 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
281 * | MS Normal | | Home | Up | PgUp | |Visual| |Scroll| $ |MsUpL | MsUp |MsUpR | R |PrintScreen|
282 * |-----------+------+------+------+------+------| Mode | | Up |------+------+------+------+------+-----------|
283 * | MS Fast |APPEND| Left | Down | Right| INS |------| |------| D |MsLeft| MsDn |MsRght| | |
284 * |-----------+------+------+------+------+------| Cut | |Scroll|------+------+------+------+------+-----------|
285 * | Play/Pause| | End | Down | PgDn | X | Copy | | Down | |MsDnL | W |MsDnR | | Stop |
286 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
287 * |EmacsM|TermM |OtherM| | | |Vol Up|Vol Dn| Mute | | |
288 * `----------------------------------' `----------------------------------'
289 * ,-------------. ,-------------.
290 * | Alt | GUI | | BASE | MClk |
291 * ,------|------|------| |------+------+------.
292 * |Delete| | Ctrl | | Prev |Left |Right |
293 * | |LShift|------| |------| Click| Click|
294 * |Paste | | ESC | | Next | | |
295 * `--------------------' `--------------------'
299 KC_ACL0 ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,LGUI(KC_L)
300 ,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,M(AE_VIS)
301 ,KC_ACL2 ,M(AE_APPND) ,KC_LEFT ,KC_DOWN ,KC_RIGHT,M(AE_INS)
302 ,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_X ,M(AE_CPYC)
303 ,M(AE_EMACS),M(AE_TERM) ,M(AE_OTHER),KC_NO ,KC_NO
306 ,M(AE_PSTDEL),KC_TRNS ,KC_TRNS
309 ,LGUI(KC_L),M(KF_6) ,M(KF_7) ,M(KF_8) ,M(KF_9) ,M(KF_10) ,M(KF_11)
310 ,KC_WH_U ,KC_DLR ,M(A_MUL),KC_MS_U ,M(A_MUR),M(AE_OVR),KC_PSCR
311 ,KC_D ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO
312 ,KC_WH_D ,KC_NO ,M(A_MDL),KC_W ,M(A_MDR),KC_NO ,KC_MSTP
313 ,KC_VOLU ,KC_VOLD ,KC_MUTE ,KC_NO ,KC_NO
317 ,KC_MNXT ,KC_BTN1 ,KC_BTN2
320 /* Keymap 5: One-handed, left side
322 * ,-----------------------------------------------------.
323 * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |A BSE|
324 * |-----------+------+------+------+------+-------------|
325 * | Tab | ' | , | . | P | Y | [ |
326 * |-----------+------+------+------+------+------| |
327 * | - | A | O | E | U | I |------|
328 * |-----------+------+------+------+------+------| ( |
329 * | Play/Pause| ; | Q | J | K | X | |
330 * `-----------+------+------+------+------+-------------'
331 * | Home | End | Down | Up | ESC |
332 * `-----------------------------------'
335 * ,------|------|------|
336 * |BackSp|LShift| Ctrl |
338 * |Space |Enter |OTHER |
339 * `--------------------'
343 KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,M(OH_BASE)
344 ,KC_TAB ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
345 ,KC_MINS ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
346 ,KC_MPLY ,KC_SCLN ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
347 ,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_ESC)
351 ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_RIGHT)
354 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
355 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
356 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
357 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
358 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
365 /* Keymap 6: One-handed, right side
367 * ,-----------------------------------------------------.
368 * | = F11 | 0 F10| 9 F9 | 8 F8 | 7 F7 | 6 F6 |A BSE|
369 * |-----------+------+------+------+------+-------------|
370 * | / | L | R | C | G | F | ] |
371 * |-----------+------+------+------+------+------| |
372 * | \ | S | N | T | H | D |------|
373 * |-----------+------+------+------+------+------| ) |
374 * | Stop | Z | V | W | M | B | |
375 * `-----------+------+------+------+------+-------------'
376 * | PgDn | PgUp | Right| Left | ESC |
377 * `-----------------------------------'
380 * ,------|------|------|
381 * |BackSp|LShift| Ctrl |
383 * |Space |Enter |OTHER |
384 * `--------------------'
388 M(KF_11) ,M(KF_10) ,M(KF_9) ,M(KF_8) ,M(KF_7) ,M(KF_6) ,M(OH_BASE)
389 ,KC_SLSH ,KC_L ,KC_R ,KC_C ,KC_G ,KC_F ,KC_RBRC
390 ,KC_BSLS ,KC_S ,KC_N ,KC_T ,KC_H ,KC_D
391 ,KC_MSTP ,KC_Z ,KC_V ,KC_W ,KC_M ,KC_B ,KC_RPRN
392 ,KC_PGDN ,KC_PGUP ,KC_RGHT ,KC_LEFT ,M(A_ESC)
396 ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_LEFT)
399 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
400 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
401 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
402 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
403 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
410 /* Keymap 7: Steno for Plover
412 * ,--------------------------------------------------. ,--------------------------------------------------.
413 * | | | | | | | BASE | | | | | | | | |
414 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
415 * | | # | # | # | # | # | | | | # | # | # | # | # | # |
416 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
417 * | | | T | P | H | |------| |------| | F | P | L | T | D |
418 * |--------+ S +------+------+------+ * | | | | * +------+------+------+------+--------|
419 * | | | K | W | R | | | | | | R | B | G | S | Z |
420 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
421 * | | | | | | | | | | | |
422 * `----------------------------------' `----------------------------------'
423 * ,-------------. ,-------------.
425 * ,------|------|------| |------+------+------.
427 * | A | O |------| |------| E | U |
429 * `--------------------' `--------------------'
434 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR),
435 KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, KC_NO,
436 KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
437 KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, KC_NO,
438 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
444 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
445 KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
446 PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
447 KC_NO, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
448 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
454 /* Keymap 8: Experimental layer
456 * ,-----------------------------------------------------. ,-----------------------------------------------------.
457 * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 |
458 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
459 * | Next/Prev | ' | , | . | P | Y | [ | | ] | Q | F | C | R | J | = |
460 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
461 * | Tab | A | O | E | U | I |------| |------| D | H | T | N | S | \ |
462 * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------|
463 * | Play/Pause| Z | K | V | G | X | | | | L | M | W | B | / | Stop |
464 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
465 * | Home | End | Down | Up | : | | - | Left | Right| PgUp | PgDn |
466 * `-----------------------------------' `-----------------------------------'
467 * ,-------------. ,-------------.
468 * | LAlt | GUI | |EMACS | 1HND |
469 * ,------|------|------| |------+------+------.
470 * | | | Ctrl | | LEAD | | |
471 * |Backsp|LShift|------| |------| Enter| Space|
472 * | | | ESC | | HUN | | |
473 * `--------------------' `--------------------'
477 KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
478 ,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
479 ,KC_TAB ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
480 ,KC_MPLY ,KC_Z ,KC_K ,KC_V ,KC_G ,KC_X ,KC_LPRN
481 ,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_COLN)
485 ,KC_BSPC,F(F_SFT),M(A_ESC)
488 ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
489 ,KC_RBRC ,KC_Q ,KC_F ,KC_C ,KC_R ,KC_J ,KC_EQL
490 ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_BSLS
491 ,KC_RPRN ,KC_L ,KC_M ,KC_W ,KC_B ,KC_SLSH ,KC_MSTP
492 ,KC_MINS,KC_LEFT,KC_RGHT ,KC_PGUP ,KC_PGDN
494 ,OSL(EMACS),M(OH_LEFT)
496 ,F(F_HUN),KC_ENT ,KC_SPC
502 const uint16_t PROGMEM fn_actions[] = {
503 [F_BSE] = ACTION_LAYER_CLEAR(ON_PRESS)
504 ,[F_HUN] = ACTION_LAYER_INVERT(HUN, ON_PRESS)
505 ,[F_GUI] = ACTION_MACRO_TAP(A_GUI)
506 ,[F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT)
507 ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT)
508 ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL)
511 void toggle_steno(int pressed)
513 uint8_t layer = biton32(layer_state);
516 if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR);
518 register_code(PV_LP);
519 register_code(PV_LH);
520 register_code(PV_LR);
522 register_code(PV_RL);
523 register_code(PV_RG);
525 unregister_code(PV_LP);
526 unregister_code(PV_LH);
527 unregister_code(PV_LR);
528 unregister_code(PV_O);
529 unregister_code(PV_RL);
530 unregister_code(PV_RG);
534 macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char)
536 uint8_t need_shift = 0;
537 uint8_t hold_shift = 0;
539 if (!record->event.pressed)
544 if (keyboard_report->mods & MOD_BIT (KC_LSFT)) {
547 unregister_code (KC_LSFT);
549 if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) {
552 unregister_code (KC_LSFT);
555 clear_oneshot_mods ();
557 register_code (KC_RALT);
558 unregister_code (KC_RALT);
559 if (accent == (KC_DQT)) {
560 register_code (KC_RSFT);
562 register_code (accent);
563 unregister_code (accent);
564 if (need_shift && accent != (KC_DQT)) {
565 register_code (KC_RSFT);
566 } else if (accent == (KC_DQT) && !need_shift) {
567 unregister_code (KC_RSFT);
569 register_code (hun_char);
570 unregister_code (hun_char);
571 if (need_shift || accent == (KC_DQT))
572 unregister_code (KC_RSFT);
574 register_code (KC_LSFT);
579 void ang_handle_kf (keyrecord_t *record, uint8_t id)
581 uint8_t code = id - KF_1;
583 if (record->event.pressed) {
584 kf_timers[code] = timer_read ();
588 if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) {
599 unregister_code (kc);
603 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
607 if (record->event.pressed) {
608 if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) {
609 clear_oneshot_mods ();
611 register_code (KC_ESC);
615 unregister_code (KC_ESC);
620 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
621 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
622 int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out());
624 if (record->event.pressed) {
626 clear_oneshot_mods ();
627 unregister_code (KC_LSFT);
629 register_code (KC_SCLN);
630 unregister_code (KC_SCLN);
632 register_code (KC_LSFT);
635 return MACRODOWN (D(RSFT), T(SCLN), U(RSFT), END);
640 if (record->event.pressed) {
641 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
642 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
643 int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out());
646 clear_oneshot_mods ();
647 unregister_code (KC_LSFT);
649 register_code (KC_MPRV);
650 unregister_code (KC_MPRV);
653 register_code (KC_LSFT);
655 return MACRO (T(MNXT), END);
660 /* Hungarian layer */
662 return ang_do_hun (record, KC_QUOT, KC_A);
664 return ang_do_hun (record, KC_QUOT, KC_O);
666 return ang_do_hun (record, KC_QUOT, KC_E);
668 return ang_do_hun (record, KC_QUOT, KC_U);
670 return ang_do_hun (record, KC_QUOT, KC_I);
672 return ang_do_hun (record, KC_DQT, KC_O);
674 return ang_do_hun (record, KC_DQT, KC_U);
676 return ang_do_hun (record, KC_EQL, KC_O);
678 return ang_do_hun (record, KC_EQL, KC_U);
682 if (record->event.pressed) {
683 mousekey_on(KC_MS_UP);
684 mousekey_on(KC_MS_LEFT);
686 mousekey_off(KC_MS_UP);
687 mousekey_off(KC_MS_LEFT);
693 if (record->event.pressed) {
694 mousekey_on(KC_MS_UP);
695 mousekey_on(KC_MS_RIGHT);
697 mousekey_off(KC_MS_UP);
698 mousekey_off(KC_MS_RIGHT);
704 if (record->event.pressed) {
705 mousekey_on(KC_MS_DOWN);
706 mousekey_on(KC_MS_LEFT);
708 mousekey_off(KC_MS_DOWN);
709 mousekey_off(KC_MS_LEFT);
715 if (record->event.pressed) {
716 mousekey_on(KC_MS_DOWN);
717 mousekey_on(KC_MS_RIGHT);
719 mousekey_off(KC_MS_DOWN);
720 mousekey_off(KC_MS_RIGHT);
725 /* EMACS layer stuff */
727 if (record->event.pressed) {
733 if (record->event.pressed) {
739 if (record->event.pressed) {
745 if (cp_mode == CP_EMACS && record->event.pressed) {
746 return MACRO(T(V), END);
751 if (record->event.pressed) {
752 m_copypaste_timer = timer_read ();
754 if (timer_elapsed (m_copypaste_timer) > TAPPING_TERM) {
758 return MACRO(T(X), END);
761 return MACRO(D(RCTRL), D(RSFT), T(X), U(RSFT), U(RCTRL), END);
764 return MACRO(D(RCTRL), T(X), U(RCTRL), END);
771 return MACRO(T(Y), END);
774 return MACRO(D(RCTRL), D(RSFT), T(C), U(RSFT), U(RCTRL), END);
777 return MACRO(D(RCTRL), T(C), U(RCTRL), END);
785 if (record->event.pressed) {
786 m_cutdel_timer = timer_read ();
788 if (timer_elapsed (m_cutdel_timer) > TAPPING_TERM) {
789 // Long press: Delete
792 return MACRO(T(D), END);
796 return MACRO(T(DEL), END);
800 // Short press: Paste
803 if (keyboard_report->mods & MOD_BIT(KC_RSFT)) {
804 unregister_code (KC_RSFT);
805 return MACRO(U(RSFT), T(RBRC), T(P), D(RSFT), END);
808 return MACRO(T(P), END);
811 return MACRO(D(RCTRL), D(RSFT), T(V), U(RSFT), U(RCTRL), END);
814 return MACRO(D(RCTRL), T(V), U(RCTRL), END);
822 if (record->event.pressed) {
823 return MACRO(T(I), END);
830 if (record->event.pressed) {
831 return MACRO(T(R), END);
838 if (record->event.pressed) {
839 return MACRO(T(A), END);
847 toggle_steno(record->event.pressed);
852 if (record->event.pressed) {
853 register_code (KC_LGUI);
854 if (record->tap.count && !record->tap.interrupted) {
855 if (record->tap.count >= 2) {
856 register_code (KC_W);
858 set_oneshot_layer (APPSEL, ONESHOT_START);
861 record->tap.count = 0;
865 if (record->tap.count >= 2)
867 unregister_code (KC_W);
868 clear_oneshot_layer_state (ONESHOT_PRESSED);
870 gui_timer = timer_read ();
875 return MACRODOWN(T(S), T(C), T(U), T(D), T(C), T(L), T(O), T(U), T(D), T(ENT), END);
878 return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(ENT), END);
881 return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END);
884 return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END);
887 return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END);
891 ang_handle_kf (record, id);
896 if (record->event.pressed) {
897 oh_base_timer = timer_read ();
899 if (timer_elapsed (oh_base_timer) > TAPPING_TERM) {
902 return MACRO (T(APP), END);
908 if (record->event.pressed) {
909 oh_bsspc_timer = timer_read ();
911 if (timer_elapsed (oh_bsspc_timer) > TAPPING_TERM) {
912 return MACRO (T(BSPC), END);
914 return MACRO (T(SPC), END);
920 if (record->event.pressed) {
921 oh_entsft_timer = timer_read ();
923 if (timer_elapsed (oh_entsft_timer) > TAPPING_TERM) {
924 if (keyboard_report->mods & MOD_BIT(KC_LSFT))
925 unregister_code (KC_LSFT);
927 register_code (KC_LSFT);
929 return MACRO (T(ENT), END);
935 if (record->event.pressed) {
938 oh_left_blink_timer = timer_read ();
939 ergodox_right_led_1_on ();
944 if (record->event.pressed) {
947 oh_right_blink_timer = timer_read ();
948 ergodox_right_led_3_on ();
955 // Runs just one time when the keyboard initializes.
956 void matrix_init_user(void) {
957 ergodox_led_all_on();
958 for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
959 ergodox_led_all_set (i);
963 for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
964 ergodox_led_all_set (i);
967 ergodox_led_all_off();
972 void ang_do_unicode (void) {
973 register_code (KC_RCTL);
974 register_code (KC_RSFT);
975 register_code (KC_U);
976 unregister_code (KC_U);
977 unregister_code (KC_RSFT);
978 unregister_code (KC_RCTL);
982 void ang_tap (uint16_t codes[]) {
983 for (int i = 0; codes[i] != 0; i++) {
984 register_code (codes[i]);
985 unregister_code (codes[i]);
990 #define TAP_ONCE(code) \
991 register_code (code); \
992 unregister_code (code)
996 // Runs constantly in the background, in a loop.
997 void matrix_scan_user(void) {
998 uint8_t layer = biton32(layer_state);
1000 if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM)
1001 unregister_code (KC_LGUI);
1009 ergodox_right_led_2_on();
1010 ergodox_right_led_3_on();
1011 } else if (layer == EMACS) {
1012 ergodox_right_led_1_on();
1013 ergodox_right_led_2_on();
1014 } else if (layer == PLVR) {
1015 ergodox_right_led_1_on ();
1016 ergodox_right_led_2_on ();
1017 ergodox_right_led_3_on ();
1018 } else if (layer == EXPRM) {
1019 ergodox_right_led_1_on ();
1020 ergodox_right_led_2_on ();
1021 ergodox_right_led_3_on ();
1023 ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
1026 if (layer == OHLFT || layer == OHRGT) {
1027 ergodox_right_led_2_on();
1029 if (oh_left_blink) {
1030 if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL) {
1031 if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) == 0)
1032 ergodox_right_led_1_off ();
1034 if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL * 2) {
1035 ergodox_right_led_1_on ();
1036 oh_left_blink_timer = timer_read ();
1040 if (oh_right_blink) {
1041 if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL) {
1042 if ((keyboard_report->mods & MOD_BIT(KC_LCTRL)) == 0)
1043 ergodox_right_led_3_off ();
1045 if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL * 2) {
1046 ergodox_right_led_3_on ();
1047 oh_right_blink_timer = timer_read ();
1052 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
1053 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
1054 ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
1055 ergodox_right_led_1_on ();
1057 ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
1058 if (layer != OHLFT && layer != EMACS && layer != PLVR && layer != EXPRM)
1059 ergodox_right_led_1_off ();
1062 if (keyboard_report->mods & MOD_BIT(KC_LALT) ||
1063 ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) {
1064 ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
1065 ergodox_right_led_2_on ();
1067 ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
1068 if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != EMACS && layer != PLVR && layer != EXPRM)
1069 ergodox_right_led_2_off ();
1072 if (keyboard_report->mods & MOD_BIT(KC_LCTRL) ||
1073 ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) {
1074 ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
1075 ergodox_right_led_3_on ();
1077 ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
1078 if (layer != OHRGT && layer != HUN && layer != PLVR && layer != EXPRM)
1079 ergodox_right_led_3_off ();
1082 LEADER_DICTIONARY() {
1086 SEQ_ONE_KEY (KC_U) {
1091 SEQ_ONE_KEY (KC_V) {
1092 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
1096 SEQ_ONE_KEY (KC_L) {
1100 uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0};
1104 SEQ_ONE_KEY (KC_Y) {
1105 uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0};
1109 SEQ_ONE_KEY (KC_S) {
1110 ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
1112 register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
1113 ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC);
1114 register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT);
1116 ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
1119 SEQ_TWO_KEYS (KC_W, KC_M) {
1120 register_code (KC_LALT);
1121 register_code (KC_F2);
1122 unregister_code (KC_F2);
1123 unregister_code (KC_LALT);
1127 uint16_t codes[] = {KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0};
1129 register_code (KC_LGUI);
1130 register_code (KC_UP);
1131 unregister_code (KC_UP);
1132 unregister_code (KC_LGUI);
1135 SEQ_ONE_KEY (KC_E) {
1137 default_layer_and (0);
1138 default_layer_or ((1 << EXPRM));
1141 ergodox_led_all_off ();
1142 ergodox_right_led_3_on ();
1144 ergodox_right_led_2_on ();
1146 ergodox_right_led_3_off ();
1147 ergodox_right_led_1_on ();
1149 ergodox_right_led_2_off ();
1151 ergodox_right_led_1_off ();
1154 default_layer_and (0);
1155 default_layer_or (1 << BASE);
1157 ergodox_led_all_off ();
1158 ergodox_right_led_1_on ();
1160 ergodox_right_led_2_on ();
1162 ergodox_right_led_1_off ();
1163 ergodox_right_led_3_on ();
1165 ergodox_right_led_2_off ();
1167 ergodox_right_led_3_off ();