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"
33 // Buttons that do extra stuff
39 // Function / number keys
52 // Application select keys
59 // Diagonal mouse movement
65 // Hungarian layer keys
76 // One-handed layout specials
101 /* States & timers */
103 uint16_t gui_timer = 0;
105 uint16_t kf_timers[12];
107 uint16_t oh_base_timer = 0;
108 uint16_t oh_bsspc_timer = 0;
109 uint16_t oh_entsft_timer = 0;
111 #define OH_BLINK_INTERVAL 500
113 uint8_t oh_left_blink = 0;
114 uint16_t oh_left_blink_timer = 0;
115 uint8_t oh_right_blink = 0;
116 uint16_t oh_right_blink_timer = 0;
118 bool log_enable = false;
122 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
124 /* Keymap 0: Base Layer
126 * ,-----------------------------------------------------. ,-----------------------------------------------------.
127 * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 |
128 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
129 * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ |
130 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
131 * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow |
132 * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------|
133 * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop |
134 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
135 * | | | | | : | | - | | | | |
136 * `-----------------------------------' `-----------------------------------'
137 * ,-------------. ,-------------.
138 * | LAlt | GUI | | MDIA | 1HND |
139 * ,------|------|------| |------+------+------.
140 * | | | Ctrl | | LEAD | | |
141 * |Backsp|LShift|------| |------| Enter| Space|
142 * | | | ESC | | HUN | | |
143 * `--------------------' `--------------------'
147 KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
148 ,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
149 ,LT(ARRW,KC_TAB) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
150 ,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
151 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
155 ,KC_BSPC,F(F_SFT),M(A_ESC)
158 ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
159 ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS
160 ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,LT(ARRW, KC_EQL)
161 ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP
162 ,KC_MINS,KC_NO ,KC_NO ,KC_NO ,KC_NO
164 ,OSL(NMDIA),M(OH_LEFT)
166 ,F(F_HUN) ,KC_ENT ,KC_SPC
169 /* Keymap 1: Adore layer
171 * ,-----------------------------------------------------. ,-----------------------------------------------------.
172 * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 |
173 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
174 * | Next/Prev | , | . | L | W | M | [ | | ] | F | H | C | P | Y | \ |
175 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
176 * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = / Arrow |
177 * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------|
178 * | Play/Pause| / | Z | ' | K | X | | | | B | G | V | J | Q | Stop |
179 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
180 * | | | | | : | | - | | | | |
181 * `-----------------------------------' `-----------------------------------'
182 * ,-------------. ,-------------.
183 * | LAlt | GUI | | MDIA | 1HND |
184 * ,------|------|------| |------+------+------.
185 * | | | Ctrl | | LEAD | | |
186 * |Backsp|LShift|------| |------| Enter| Space|
187 * | | | ESC | | HUN | | |
188 * `--------------------' `--------------------'
192 KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
193 ,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC
194 ,LT(ARRW, KC_TAB) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U
195 ,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN
196 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
200 ,KC_BSPC,F(F_SFT),M(A_ESC)
203 ,KC_APP ,M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
204 ,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS
205 ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,LT(ARRW, KC_EQL)
206 ,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP
207 ,KC_MINS,KC_NO ,KC_NO ,KC_NO ,KC_NO
209 ,OSL(NMDIA),M(OH_LEFT)
211 ,F(F_HUN) ,KC_ENT ,KC_SPC
214 /* Keymap 2: Arrow layer
216 * ,-----------------------------------------------------. ,-----------------------------------------------------.
217 * | | | | | | | | | | | | | | | |
218 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
219 * | | | | | | | | | | | Home | Up | End | | |
220 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
221 * | | | | | | |------| |------| | Left | Down | Rght | | |
222 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
223 * | | | | | | | | | | | | | | | |
224 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
225 * | | | | | | | | | | | |
226 * `----------------------------------' `----------------------------------'
227 * ,-------------. ,-------------.
229 * ,------|------|------| |------+------+------.
231 * | | |------| |------| PgUp | PgDn |
233 * `--------------------' `--------------------'
238 KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
239 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
240 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
241 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
242 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
246 ,KC_TRNS ,KC_TRNS ,KC_TRNS
249 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
250 ,KC_TRNS ,KC_TRNS ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS
251 ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS
252 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
253 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
257 ,KC_TRNS ,KC_PGUP ,KC_PGDN
260 /* Keymap 3: Application select layer
262 * ,-----------------------------------------------------. ,-----------------------------------------------------.
263 * | |Music |Slack |Emacs |Term |Chrome| | | | | | | | | |
264 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
265 * | | | | | | | | | | | | | | | |
266 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
267 * | | | | | | |------| |------| | | | | | |
268 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
269 * | | | | | | | | | | | | | | | |
270 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
271 * | | | | | | | | | | | |
272 * `----------------------------------' `----------------------------------'
273 * ,-------------. ,-------------.
275 * ,------|------|------| |------+------+------.
277 * | | |------| |------| | |
279 * `--------------------' `--------------------'
284 KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS
285 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
286 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
287 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
288 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
292 ,KC_TRNS ,KC_TRNS ,KC_TRNS
295 ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS
296 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
297 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
298 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
299 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
303 ,KC_TRNS ,KC_TRNS ,KC_TRNS
307 /* Keymap 4: Hungarian Layer
309 * ,-----------------------------------------------------. ,-----------------------------------------------------.
310 * | | | | | | | | | | | | | | | |
311 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
312 * | | | Ő | | Ű | | | | | | | | | | |
313 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
314 * | | Á | Ó | É | Ú | Í |------| |------| | | | | | |
315 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
316 * | | | Ö | | Ü | | | | | | | | | | |
317 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
318 * | | | | | | | | | | | |
319 * `----------------------------------' `----------------------------------'
320 * ,-------------. ,-------------.
322 * ,------|------|------| |------+------+------.
324 * | | |------| |------| | |
325 * | | | | | BASE | | |
326 * `--------------------' `--------------------'
331 KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
332 ,KC_NO ,KC_NO ,M(HU_OEE),KC_NO ,M(HU_UEE),KC_NO ,KC_NO
333 ,KC_NO ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II)
334 ,KC_NO ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,KC_NO ,KC_NO
335 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
339 ,KC_NO ,KC_TRNS ,KC_TRNS
342 ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
343 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
344 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
345 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
346 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
350 ,F(F_BSE),KC_TRNS ,KC_TRNS
353 /* Keymap 5: Navigation & Media layer
355 * ,-----------------------------------------------------. ,-----------------------------------------------------.
356 * | MS Slow | | | | | |ScrLCK| |ScrLCK| | | | | | |
357 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
358 * | MS Normal | | Home | Up | PgUp | | | |Scroll| |MsUpL | MsUp |MsUpR | |PrintScreen|
359 * |-----------+------+------+------+------+------| | | Up |------+------+------+------+------+-----------|
360 * | MS Fast | | Left | Down | Right| |------| |------| |MsLeft| MsDn |MsRght| | |
361 * |-----------+------+------+------+------+------| | |Scroll|------+------+------+------+------+-----------|
362 * | Play/Pause| | End | Down | PgDn | | | | Down | |MsDnL | MsDn |MsDnR | | Stop |
363 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
364 * | | | | | | | | | | | |
365 * `----------------------------------' `----------------------------------'
366 * ,-------------. ,-------------.
367 * | Mute | VlUp | | BASE | MClk |
368 * ,------|------|------| |------+------+------.
369 * | | | VlDn | | Prev |Left |Right |
370 * | SPC | Enter|------| |------| Click| Click|
371 * | | | ESC | | Next | | |
372 * `--------------------' `--------------------'
376 KC_ACL0 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L)
377 ,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO
378 ,KC_ACL2 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO
379 ,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO
380 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
383 ,KC_SPC,KC_ENTER,M(A_ESC)
386 ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
387 ,KC_WH_U ,KC_NO ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO ,KC_PSCR
388 ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO
389 ,KC_WH_D ,KC_NO ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO ,KC_MSTP
390 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
394 ,KC_MNXT ,KC_BTN1 ,KC_BTN2
397 /* Keymap 6: One-handed, left side
399 * ,-----------------------------------------------------.
400 * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |A BSE|
401 * |-----------+------+------+------+------+-------------|
402 * | Tab | ' | , | . | P | Y | [ |
403 * |-----------+------+------+------+------+------| |
404 * | - | A | O | E | U | I |------|
405 * |-----------+------+------+------+------+------| ( |
406 * | Play/Pause| ; | Q | J | K | X | |
407 * `-----------+------+------+------+------+-------------'
408 * | Home | End | Down | Up | ESC |
409 * `-----------------------------------'
412 * ,------|------|------|
413 * |BackSp|LShift| Ctrl |
415 * |Space |Enter |OTHER |
416 * `--------------------'
420 KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,M(OH_BASE)
421 ,KC_TAB ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
422 ,KC_MINS ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
423 ,KC_MPLY ,KC_SCLN ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
424 ,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_ESC)
428 ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_RIGHT)
431 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
432 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
433 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
434 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
435 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
442 /* Keymap 7: One-handed, right side
444 * ,-----------------------------------------------------.
445 * | = F11 | 0 F10| 9 F9 | 8 F8 | 7 F7 | 6 F6 |A BSE|
446 * |-----------+------+------+------+------+-------------|
447 * | / | L | R | C | G | F | ] |
448 * |-----------+------+------+------+------+------| |
449 * | \ | S | N | T | H | D |------|
450 * |-----------+------+------+------+------+------| ) |
451 * | Stop | Z | V | W | M | B | |
452 * `-----------+------+------+------+------+-------------'
453 * | PgDn | PgUp | Right| Left | ESC |
454 * `-----------------------------------'
457 * ,------|------|------|
458 * |BackSp|LShift| Ctrl |
460 * |Space |Enter |OTHER |
461 * `--------------------'
465 M(KF_11) ,M(KF_10) ,M(KF_9) ,M(KF_8) ,M(KF_7) ,M(KF_6) ,M(OH_BASE)
466 ,KC_SLSH ,KC_L ,KC_R ,KC_C ,KC_G ,KC_F ,KC_RBRC
467 ,KC_BSLS ,KC_S ,KC_N ,KC_T ,KC_H ,KC_D
468 ,KC_MSTP ,KC_Z ,KC_V ,KC_W ,KC_M ,KC_B ,KC_RPRN
469 ,KC_PGDN ,KC_PGUP ,KC_RGHT ,KC_LEFT ,M(A_ESC)
473 ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_LEFT)
476 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
477 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
478 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
479 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
480 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
487 /* Keymap 8: Steno for Plover
489 * ,--------------------------------------------------. ,--------------------------------------------------.
490 * | | | | | | | BASE | | | | | | | | |
491 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
492 * | | # | # | # | # | # | # | | # | # | # | # | # | # | # |
493 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
494 * | | | T | P | H | |------| |------| | F | P | L | T | D |
495 * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+------+--------|
496 * | | | K | W | R | | | | | | R | B | G | S | Z |
497 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
498 * | | | | | | | | | | | |
499 * `----------------------------------' `----------------------------------'
500 * ,-------------. ,-------------.
502 * ,------|------|------| |------+------+------.
504 * | A | O |------| |------| E | U |
506 * `--------------------' `--------------------'
511 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR),
512 KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
513 KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
514 KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
515 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
521 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
522 PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
523 PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
524 PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
525 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
533 const uint16_t PROGMEM fn_actions[] = {
534 [F_BSE] = ACTION_LAYER_CLEAR(ON_PRESS)
535 ,[F_HUN] = ACTION_LAYER_INVERT(HUN, ON_PRESS)
536 ,[F_GUI] = ACTION_MACRO_TAP(A_GUI)
537 ,[F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT)
538 ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT)
539 ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL)
542 void toggle_steno(int pressed)
544 uint8_t layer = biton32(layer_state);
547 if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR);
549 register_code(PV_LP);
550 register_code(PV_LH);
551 register_code(PV_LR);
553 register_code(PV_RL);
554 register_code(PV_RG);
556 unregister_code(PV_LP);
557 unregister_code(PV_LH);
558 unregister_code(PV_LR);
559 unregister_code(PV_O);
560 unregister_code(PV_RL);
561 unregister_code(PV_RG);
565 macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char)
567 uint8_t need_shift = 0;
568 uint8_t hold_shift = 0;
570 if (!record->event.pressed)
575 if (keyboard_report->mods & MOD_BIT (KC_LSFT)) {
578 unregister_code (KC_LSFT);
580 if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) {
583 unregister_code (KC_LSFT);
586 clear_oneshot_mods ();
588 register_code (KC_RALT);
589 unregister_code (KC_RALT);
590 if (accent == (KC_DQT)) {
591 register_code (KC_RSFT);
593 register_code (accent);
594 unregister_code (accent);
595 if (need_shift && accent != (KC_DQT)) {
596 register_code (KC_RSFT);
597 } else if (accent == (KC_DQT) && !need_shift) {
598 unregister_code (KC_RSFT);
600 register_code (hun_char);
601 unregister_code (hun_char);
602 if (need_shift || accent == (KC_DQT))
603 unregister_code (KC_RSFT);
605 register_code (KC_LSFT);
610 void ang_handle_kf (keyrecord_t *record, uint8_t id)
612 uint8_t code = id - KF_1;
614 if (record->event.pressed) {
615 kf_timers[code] = timer_read ();
619 if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) {
630 unregister_code (kc);
634 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
638 if (record->event.pressed) {
639 if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) {
640 clear_oneshot_mods ();
642 register_code (KC_ESC);
646 unregister_code (KC_ESC);
651 if (record->event.pressed) {
652 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
653 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
654 int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out());
657 clear_oneshot_mods ();
658 unregister_code (KC_LSFT);
660 register_code (KC_MPRV);
661 unregister_code (KC_MPRV);
664 register_code (KC_LSFT);
666 return MACRO (T(MNXT), END);
671 /* Hungarian layer */
673 return ang_do_hun (record, KC_QUOT, KC_A);
675 return ang_do_hun (record, KC_QUOT, KC_O);
677 return ang_do_hun (record, KC_QUOT, KC_E);
679 return ang_do_hun (record, KC_QUOT, KC_U);
681 return ang_do_hun (record, KC_QUOT, KC_I);
683 return ang_do_hun (record, KC_DQT, KC_O);
685 return ang_do_hun (record, KC_DQT, KC_U);
687 return ang_do_hun (record, KC_EQL, KC_O);
689 return ang_do_hun (record, KC_EQL, KC_U);
693 if (record->event.pressed) {
694 mousekey_on(KC_MS_UP);
695 mousekey_on(KC_MS_LEFT);
697 mousekey_off(KC_MS_UP);
698 mousekey_off(KC_MS_LEFT);
704 if (record->event.pressed) {
705 mousekey_on(KC_MS_UP);
706 mousekey_on(KC_MS_RIGHT);
708 mousekey_off(KC_MS_UP);
709 mousekey_off(KC_MS_RIGHT);
715 if (record->event.pressed) {
716 mousekey_on(KC_MS_DOWN);
717 mousekey_on(KC_MS_LEFT);
719 mousekey_off(KC_MS_DOWN);
720 mousekey_off(KC_MS_LEFT);
726 if (record->event.pressed) {
727 mousekey_on(KC_MS_DOWN);
728 mousekey_on(KC_MS_RIGHT);
730 mousekey_off(KC_MS_DOWN);
731 mousekey_off(KC_MS_RIGHT);
738 toggle_steno(record->event.pressed);
743 if (record->event.pressed) {
744 register_code (KC_LGUI);
745 if (record->tap.count && !record->tap.interrupted) {
746 if (record->tap.count >= 2) {
747 register_code (KC_W);
749 set_oneshot_layer (APPSEL, ONESHOT_START);
752 record->tap.count = 0;
756 if (record->tap.count >= 2)
758 unregister_code (KC_W);
759 clear_oneshot_layer_state (ONESHOT_PRESSED);
761 gui_timer = timer_read ();
766 return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END);
769 return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(ENT), END);
772 return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END);
775 return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END);
778 return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END);
782 ang_handle_kf (record, id);
787 if (record->event.pressed) {
788 oh_base_timer = timer_read ();
790 if (timer_elapsed (oh_base_timer) > TAPPING_TERM) {
793 return MACRO (T(APP), END);
799 if (record->event.pressed) {
800 oh_bsspc_timer = timer_read ();
802 if (timer_elapsed (oh_bsspc_timer) > TAPPING_TERM) {
803 return MACRO (T(BSPC), END);
805 return MACRO (T(SPC), END);
811 if (record->event.pressed) {
812 oh_entsft_timer = timer_read ();
814 if (timer_elapsed (oh_entsft_timer) > TAPPING_TERM) {
815 if (keyboard_report->mods & MOD_BIT(KC_LSFT))
816 unregister_code (KC_LSFT);
818 register_code (KC_LSFT);
820 return MACRO (T(ENT), END);
826 if (record->event.pressed) {
829 oh_left_blink_timer = timer_read ();
830 ergodox_right_led_1_on ();
835 if (record->event.pressed) {
838 oh_right_blink_timer = timer_read ();
839 ergodox_right_led_3_on ();
846 uint8_t is_adore = 0;
848 // Runs just one time when the keyboard initializes.
849 void matrix_init_user(void) {
852 ergodox_led_all_on();
853 for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
854 ergodox_led_all_set (i);
858 for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
859 ergodox_led_all_set (i);
862 ergodox_led_all_off();
864 if (!eeconfig_is_enabled())
866 dl = eeconfig_read_default_layer ();
867 if (dl == (1UL << ADORE))
873 void ang_do_unicode (void) {
874 register_code (KC_RCTL);
875 register_code (KC_RSFT);
876 register_code (KC_U);
877 unregister_code (KC_U);
878 unregister_code (KC_RSFT);
879 unregister_code (KC_RCTL);
883 void ang_tap (uint16_t codes[]) {
884 for (int i = 0; codes[i] != 0; i++) {
885 register_code (codes[i]);
886 unregister_code (codes[i]);
891 #define TAP_ONCE(code) \
892 register_code (code); \
893 unregister_code (code)
895 void ang_tap_dance (qk_tap_dance_state_t *state) {
896 switch (state->keycode) {
898 if (state->count == 1) {
899 register_code (KC_RSFT);
900 register_code (KC_SCLN);
901 unregister_code (KC_SCLN);
902 unregister_code (KC_RSFT);
903 } else if (state->count == 2) {
904 register_code (KC_SCLN);
905 unregister_code (KC_SCLN);
906 reset_tap_dance (state);
911 const qk_tap_dance_action_t tap_dance_actions[] = {
912 [CT_CLN] = ACTION_TAP_DANCE_FN (ang_tap_dance)
915 // Runs constantly in the background, in a loop.
916 void matrix_scan_user(void) {
917 uint8_t layer = biton32(layer_state);
919 if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM)
920 unregister_code (KC_LGUI);
928 ergodox_right_led_2_on();
929 ergodox_right_led_3_on();
930 } else if (layer == NMDIA) {
931 ergodox_right_led_1_on();
932 ergodox_right_led_2_on();
933 } else if (layer == PLVR) {
934 ergodox_right_led_1_on ();
935 ergodox_right_led_2_on ();
936 ergodox_right_led_3_on ();
937 } else if (layer == ADORE) {
938 ergodox_right_led_1_on ();
939 ergodox_right_led_2_on ();
940 ergodox_right_led_3_on ();
942 ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
945 if (layer == OHLFT || layer == OHRGT) {
946 ergodox_right_led_2_on();
949 if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL) {
950 if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) == 0)
951 ergodox_right_led_1_off ();
953 if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL * 2) {
954 ergodox_right_led_1_on ();
955 oh_left_blink_timer = timer_read ();
959 if (oh_right_blink) {
960 if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL) {
961 if ((keyboard_report->mods & MOD_BIT(KC_LCTRL)) == 0)
962 ergodox_right_led_3_off ();
964 if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL * 2) {
965 ergodox_right_led_3_on ();
966 oh_right_blink_timer = timer_read ();
971 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
972 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
973 ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
974 ergodox_right_led_1_on ();
976 ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
977 if (layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE)
978 ergodox_right_led_1_off ();
981 if (keyboard_report->mods & MOD_BIT(KC_LALT) ||
982 ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) {
983 ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
984 ergodox_right_led_2_on ();
986 ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
987 if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE)
988 ergodox_right_led_2_off ();
991 if (keyboard_report->mods & MOD_BIT(KC_LCTRL) ||
992 ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) {
993 ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
994 ergodox_right_led_3_on ();
996 ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
997 if (layer != OHRGT && layer != HUN && layer != PLVR && layer != ADORE)
998 ergodox_right_led_3_off ();
1001 LEADER_DICTIONARY() {
1005 SEQ_ONE_KEY (KC_D) {
1006 log_enable = !log_enable;
1009 SEQ_ONE_KEY (KC_U) {
1013 SEQ_ONE_KEY (KC_V) {
1014 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")");
1017 SEQ_ONE_KEY (KC_L) {
1021 uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0};
1025 SEQ_ONE_KEY (KC_Y) {
1026 uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0};
1030 SEQ_ONE_KEY (KC_S) {
1031 ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
1033 register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
1034 ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC);
1035 register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT);
1037 ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
1040 SEQ_TWO_KEYS (KC_W, KC_M) {
1041 register_code (KC_LALT);
1042 register_code (KC_F2);
1043 unregister_code (KC_F2);
1044 unregister_code (KC_LALT);
1048 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};
1050 register_code (KC_LGUI);
1051 register_code (KC_UP);
1052 unregister_code (KC_UP);
1053 unregister_code (KC_LGUI);
1056 SEQ_ONE_KEY (KC_A) {
1057 if (is_adore == 0) {
1058 default_layer_and (0);
1059 default_layer_or ((1UL << ADORE));
1060 eeconfig_update_default_layer ((1UL << ADORE));
1063 ergodox_led_all_off ();
1064 ergodox_right_led_3_on ();
1066 ergodox_right_led_2_on ();
1068 ergodox_right_led_3_off ();
1069 ergodox_right_led_1_on ();
1071 ergodox_right_led_2_off ();
1073 ergodox_right_led_1_off ();
1076 default_layer_and (0);
1077 default_layer_or (1UL << BASE);
1078 eeconfig_update_default_layer ((1UL << BASE));
1080 ergodox_led_all_off ();
1081 ergodox_right_led_1_on ();
1083 ergodox_right_led_2_on ();
1085 ergodox_right_led_1_off ();
1086 ergodox_right_led_3_on ();
1088 ergodox_right_led_2_off ();
1090 ergodox_right_led_3_off ();
1096 bool process_record_user (uint16_t keycode, keyrecord_t *record) {
1097 uint8_t layer = biton32(layer_state);
1099 if (log_enable && layer == BASE) {
1100 xprintf ("KL: col=%d, row=%d\n", record->event.key.col,
1101 record->event.key.row);