2 * algernon's ErgoDox EZ layout, please see the readme.md file!
9 #include "action_layer.h"
10 #include "action_util.h"
12 #include "keymap_plover.h"
33 // Buttons that do extra stuff
38 // Application select keys
45 // Hungarian layer keys
97 uint16_t gui_timer = 0;
100 # ifdef AUTOLOG_ENABLE
101 bool log_enable = true;
103 bool log_enable = false;
107 bool time_travel = false;
108 bool skip_leds = false;
110 static uint8_t is_adore = 0;
114 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
116 /* Keymap 0: Base Layer
118 * ,-----------------------------------------------------. ,-----------------------------------------------------.
119 * | Next/Prev | 9 | 7 @ | 5 * | 3 ^ | 1 $ | F11 | | Fx | 0 % | 2 ! | 4 # | 6 & | 8 | Plover |
120 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
121 * | ~ | ' | , | . | P | Y | ( | | ) | F | G | C | R | L | \ |
122 * |-----------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------|
123 * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow |
124 * |-----------+------+------+------+------+------| tmux | | tmux |------+------+------+------+------+-----------|
125 * | Play/Pause| / | Q | J | K | X | | | Pane | B | M | W | V | Z | Stop/Reset|
126 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
127 * | | | | | : | | - | | | | |
128 * `-----------------------------------' `-----------------------------------'
129 * ,-------------. ,-------------.
130 * | LAlt | GUI | | MDIA | Del |
131 * ,------|------|------| |------+------+------.
132 * | | | Ctrl | | LEAD | | |
133 * |Backsp|LShift|------| |------| Enter| Space|
134 * | | | ESC | | HUN | | |
135 * `--------------------' `--------------------'
139 M(A_MPN) ,M(A_9) ,M(A_7) ,M(A_5) ,M(A_3) ,M(A_1) ,KC_F11
140 ,KC_GRV ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,TD(CT_LBP)
141 ,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
142 ,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,TD(CT_TMUX)
143 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
147 ,KC_BSPC,F(F_SFT),KC_ESC
150 ,M(Fx) ,M(A_0) ,M(A_2) ,M(A_4) ,M(A_6) ,M(A_8) ,M(A_PLVR)
151 ,TD(CT_RBP),KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS
152 ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL
153 ,TD(CT_TPS),KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,TD(CT_SR)
154 ,KC_MINS ,KC_NO ,KC_NO ,KC_NO ,KC_NO
158 ,F(F_HUN) ,KC_ENT ,KC_SPC
161 /* Keymap 1: Adore layer
163 * ,-----------------------------------------------------. ,-----------------------------------------------------.
164 * | Play/Pause| 9 | 7 @ | 5 * | 3 ^ | 1 $ | F11 | | Fx | 0 % | 2 ! | 4 # | 6 & | 8 | Plover |
165 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
166 * | \ | X | W | C | H | F | ( | | ) | M | G | L | P | / | `~ |
167 * |-----------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------|
168 * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = |
169 * |-----------+------+------+------+------+------| tmux | | tmux |------+------+------+------+------+-----------|
170 * | | Z | Q | ' | , | . | | | pane | B | K | V | Y | J | |
171 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
172 * | | | | | : | | - | | | | |
173 * `-----------------------------------' `-----------------------------------'
174 * ,-------------. ,-------------.
175 * | LAlt | GUI | | MDIA | Del |
176 * ,------|------|------| |------+------+------.
177 * | | | Ctrl | | HUN | | |
178 * |Backsp|LShift|------| |------| Enter| Space|
179 * | | | ESC | | LEAD | | |
180 * `--------------------' `--------------------'
184 KC_MPLY ,M(A_9) ,M(A_7) ,M(A_5) ,M(A_3) ,M(A_1) ,KC_F11
185 ,KC_BSLS ,KC_X ,KC_W ,KC_C ,KC_H ,KC_F ,TD(CT_LBP)
186 ,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U
187 ,KC_NO ,KC_Z ,KC_Q ,KC_QUOT ,KC_COMM ,KC_DOT ,TD(CT_TMUX)
188 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
192 ,KC_BSPC,F(F_SFT),KC_ESC
195 ,M(Fx) ,M(A_0) ,M(A_2) ,M(A_4) ,M(A_6) ,M(A_8) ,M(A_PLVR)
196 ,TD(CT_RBP),KC_M ,KC_G ,KC_L ,KC_P ,KC_SLSH ,KC_GRV
197 ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL
198 ,TD(CT_TPS),KC_B ,KC_K ,KC_V ,KC_Y ,KC_J ,KC_NO
199 ,KC_MINS ,KC_NO ,KC_NO ,KC_NO ,KC_NO
203 ,KC_LEAD ,KC_ENT ,KC_SPC
206 /* Keymap 2: Arrow layer
208 * ,-----------------------------------------------------. ,-----------------------------------------------------.
209 * | | | | | | | | | | | | | | | |
210 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
211 * | | | | | | | | | | | Home | Up | End | | |
212 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
213 * | | | | | | |------| |------| | Left | Down | Rght | | |
214 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
215 * | | | | | | | | | | | | | | | |
216 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
217 * | | | | | | | | | | | |
218 * `----------------------------------' `----------------------------------'
219 * ,-------------. ,-------------.
221 * ,------|------|------| |------+------+------.
223 * | Enter| |------| |------| PgUp | PgDn |
225 * `--------------------' `--------------------'
230 KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
231 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
232 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
233 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
234 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
238 ,KC_ENT ,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_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS
243 ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS
244 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
245 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
249 ,KC_TRNS ,KC_PGUP ,KC_PGDN
252 /* Keymap 3: Application select layer
254 * ,-----------------------------------------------------. ,-----------------------------------------------------.
255 * | |Music |Slack |Emacs |Term |Chrome| | | | | | | | | |
256 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
257 * | | | | | | | | | | | | | | | |
258 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
259 * | | | | | | |------| |------| | | | | | |
260 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
261 * | | | | | | | | | | | | | | | |
262 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
263 * | | | | | | | | | | | |
264 * `----------------------------------' `----------------------------------'
265 * ,-------------. ,-------------.
267 * ,------|------|------| |------+------+------.
269 * | | |------| |------| | |
271 * `--------------------' `--------------------'
276 KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS
277 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
278 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
279 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
280 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
284 ,KC_TRNS ,KC_TRNS ,KC_TRNS
287 ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS
288 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
289 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
290 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
291 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
295 ,KC_TRNS ,KC_TRNS ,KC_TRNS
299 /* Keymap 4: Hungarian Layer
301 * ,-----------------------------------------------------. ,-----------------------------------------------------.
302 * | | | | | | | | | | | | | | | |
303 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
304 * | | | Ő | | Ű | | | | | | | | | | |
305 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
306 * | | Á | Ó | É | Ú | Í |------| |------| | | | | | |
307 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
308 * | | | Ö | | Ü | | | | | | | | | | |
309 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
310 * | | | | | | | | | | | |
311 * `----------------------------------' `----------------------------------'
312 * ,-------------. ,-------------.
314 * ,------|------|------| |------+------+------.
316 * | | |------| |------| | |
317 * | | | | | BASE | | |
318 * `--------------------' `--------------------'
323 KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
324 ,KC_NO ,KC_NO ,M(HU_OEE),KC_NO ,M(HU_UEE),KC_NO ,KC_NO
325 ,KC_NO ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II)
326 ,KC_NO ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,KC_NO ,KC_NO
327 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
331 ,KC_NO ,KC_TRNS ,KC_TRNS
334 ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
335 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
336 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
337 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
338 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
342 ,F(F_BSE),KC_TRNS ,KC_TRNS
345 /* Keymap 5: Navigation & Media layer
347 * ,-----------------------------------------------------. ,-----------------------------------------------------.
348 * | | F9 | F7 | F5 | F3 | F1 |ScrLCK| | | F10 | F2 | F4 | F6 | F8 | |
349 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
350 * | | | | | | | | | | | | | | | |
351 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
352 * | | | | | | |------| |------| | | | | | |
353 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
354 * | | | | | | | | | | | | | | | |
355 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
356 * | | | | | | | | | | | |
357 * `----------------------------------' `----------------------------------'
358 * ,-------------. ,-------------.
359 * | Mute | VlUp | | BASE | |
360 * ,------|------|------| |------+------+------.
361 * | | | VlDn | | | | |
362 * | | |------| |------| | |
364 * `--------------------' `--------------------'
368 KC_NO ,KC_F9 ,KC_F7 ,KC_F5 ,KC_F3 ,KC_F1 ,LGUI(KC_L)
369 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
370 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
371 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
372 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
375 ,KC_NO ,KC_NO ,KC_TRNS
378 ,KC_TRNS ,KC_F10 ,KC_F2 ,KC_F4 ,KC_F6 ,KC_F8 ,KC_NO
379 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
380 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
381 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
382 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
389 /* Keymap 6: Steno for Plover
391 * ,--------------------------------------------------. ,--------------------------------------------------.
392 * | | | | | | | | | | | | | | | BASE |
393 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
394 * | | # | # | # | # | # | # | | # | # | # | # | # | # | # |
395 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
396 * | | | T | P | H | |------| |------| | F | P | L | T | D |
397 * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+------+--------|
398 * | | | K | W | R | | | | | | R | B | G | S | Z |
399 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
400 * | | | | | | | | | | | |
401 * `----------------------------------' `----------------------------------'
402 * ,-------------. ,-------------.
404 * ,------|------|------| |------+------+------.
406 * | A | O |------| |------| E | U |
408 * `--------------------' `--------------------'
413 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
414 KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
415 KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
416 KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
417 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
423 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR),
424 PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
425 PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
426 PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
427 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
435 const uint16_t PROGMEM fn_actions[] = {
436 [F_BSE] = ACTION_LAYER_CLEAR(ON_PRESS)
437 ,[F_HUN] = ACTION_LAYER_INVERT(HUN, ON_PRESS)
438 ,[F_GUI] = ACTION_MACRO_TAP(A_GUI)
439 ,[F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT)
440 ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT)
441 ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL)
444 static void toggle_steno(int pressed)
446 uint8_t layer = biton32(layer_state);
449 if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR);
451 register_code(PV_LP);
452 register_code(PV_LH);
453 register_code(PV_LR);
455 register_code(PV_RL);
456 register_code(PV_RG);
458 unregister_code(PV_LP);
459 unregister_code(PV_LH);
460 unregister_code(PV_LR);
461 unregister_code(PV_O);
462 unregister_code(PV_RL);
463 unregister_code(PV_RG);
467 static macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char)
469 uint8_t need_shift = 0;
470 uint8_t hold_shift = 0;
472 if (!record->event.pressed)
477 if (keyboard_report->mods & MOD_BIT (KC_LSFT)) {
480 unregister_code (KC_LSFT);
482 if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) {
485 unregister_code (KC_LSFT);
488 clear_oneshot_mods ();
490 register_code (KC_RALT);
491 unregister_code (KC_RALT);
492 if (accent == (KC_DQT)) {
493 register_code (KC_RSFT);
495 register_code (accent);
496 unregister_code (accent);
497 if (need_shift && accent != (KC_DQT)) {
498 register_code (KC_RSFT);
499 } else if (accent == (KC_DQT) && !need_shift) {
500 unregister_code (KC_RSFT);
502 register_code (hun_char);
503 unregister_code (hun_char);
504 if (need_shift || accent == (KC_DQT))
505 unregister_code (KC_RSFT);
507 register_code (KC_LSFT);
512 static void ang_handle_num_row(uint8_t id, keyrecord_t *record) {
513 uint8_t idx = id - A_1;
515 static bool shifted[10];
517 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
518 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
519 if (record->event.pressed)
529 shifted[idx] = false;
560 if (record->event.pressed) {
563 unregister_code (kc);
564 shifted[idx] = false;
568 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
572 if (record->event.pressed) {
573 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
574 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
575 int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out());
578 clear_oneshot_mods ();
579 unregister_code (KC_LSFT);
581 register_code (KC_MPRV);
582 unregister_code (KC_MPRV);
585 register_code (KC_LSFT);
587 return MACRO (T(MNXT), END);
592 /* Hungarian layer */
594 return ang_do_hun (record, KC_QUOT, KC_A);
596 return ang_do_hun (record, KC_QUOT, KC_O);
598 return ang_do_hun (record, KC_QUOT, KC_E);
600 return ang_do_hun (record, KC_QUOT, KC_U);
602 return ang_do_hun (record, KC_QUOT, KC_I);
604 return ang_do_hun (record, KC_DQT, KC_O);
606 return ang_do_hun (record, KC_DQT, KC_U);
608 return ang_do_hun (record, KC_EQL, KC_O);
610 return ang_do_hun (record, KC_EQL, KC_U);
614 toggle_steno(record->event.pressed);
619 if (record->event.pressed) {
620 set_oneshot_mods (MOD_LALT);
622 set_oneshot_layer (NMDIA, ONESHOT_START);
624 clear_oneshot_layer_state (ONESHOT_PRESSED);
630 if (record->event.pressed) {
631 register_code (KC_LGUI);
632 if (record->tap.count && !record->tap.interrupted) {
633 if (record->tap.count >= 2) {
634 uprintf("CMD:appsel_start\n");
636 set_oneshot_layer (APPSEL, ONESHOT_START);
639 record->tap.count = 0;
643 if (record->tap.count >= 2)
645 clear_oneshot_layer_state (ONESHOT_PRESSED);
647 gui_timer = timer_read ();
652 if (record->event.pressed)
653 uprintf("CMD:appsel_slack\n");
657 if (record->event.pressed)
658 uprintf("CMD:appsel_emacs\n");
662 if (record->event.pressed)
663 uprintf("CMD:appsel_term\n");
667 if (record->event.pressed)
668 uprintf("CMD:appsel_chrome\n");
672 if (record->event.pressed)
673 uprintf("CMD:appsel_music\n");
676 // number row and symbols
678 ang_handle_num_row(id, record);
685 // Runs just one time when the keyboard initializes.
686 void matrix_init_user(void) {
689 set_unicode_input_mode(UC_LNX);
691 ergodox_led_all_on();
692 for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
693 ergodox_led_all_set (i);
697 for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
698 ergodox_led_all_set (i);
701 ergodox_led_all_off();
703 if (!eeconfig_is_enabled())
705 dl = eeconfig_read_default_layer ();
706 if (dl == (1UL << ADORE)) {
713 static void ang_tap (uint16_t code, ...) {
721 unregister_code16(kc);
723 kc = va_arg(ap, int);
728 #define TAP_ONCE(code) \
729 register_code (code); \
730 unregister_code (code)
737 static void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) {
738 td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
741 td_ta->sticky = false;
742 td_ta->layer_toggle = false;
747 if (state->count == 1 && !state->pressed) {
748 register_code (KC_TAB);
749 td_ta->sticky = false;
750 td_ta->layer_toggle = false;
752 td_ta->layer_toggle = true;
754 td_ta->sticky = (state->count == 2);
758 static void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) {
759 td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
761 if (!td_ta->layer_toggle)
762 unregister_code (KC_TAB);
767 static void ang_tap_dance_tmux_finished (qk_tap_dance_state_t *state, void *user_data) {
768 if (state->count == 1) {
769 register_code(KC_LALT);
770 register_code(KC_SPC);
771 unregister_code(KC_SPC);
772 unregister_code(KC_LALT);
774 register_code(KC_LCTL);
776 unregister_code(KC_A);
777 unregister_code(KC_LCTL);
781 static void ang_tap_dance_tmux_pane_select (qk_tap_dance_state_t *state, void *user_data) {
784 if (state->count >= 2) {
788 register_code(KC_LALT);
789 register_code(KC_SPC);
790 unregister_code(KC_SPC);
791 unregister_code(KC_LALT);
798 _td_sr_each (qk_tap_dance_state_t *state, void *user_data) {
801 switch (state->count) {
803 ergodox_right_led_3_on ();
806 ergodox_right_led_2_on ();
809 ergodox_right_led_1_on ();
812 ergodox_right_led_3_off ();
814 ergodox_right_led_2_off ();
816 ergodox_right_led_1_off ();
822 _td_sr_finished (qk_tap_dance_state_t *state, void *user_data) {
823 if (state->count == 1) {
824 register_code (KC_MSTP);
826 if (state->count >= 4) {
827 uprintf("CMD:reflash\n");
830 reset_tap_dance (state);
835 _td_sr_reset (qk_tap_dance_state_t *state, void *user_data) {
836 ergodox_right_led_1_off ();
838 ergodox_right_led_2_off ();
840 ergodox_right_led_3_off ();
842 if (state->count == 1) {
843 unregister_code (KC_MSTP);
847 qk_tap_dance_action_t tap_dance_actions[] = {
848 [CT_CLN] = ACTION_TAP_DANCE_DOUBLE (KC_COLN, KC_SCLN)
850 .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset },
851 .user_data = (void *)&((td_ta_state_t) { false, false })
853 ,[CT_LBP] = ACTION_TAP_DANCE_DOUBLE (KC_LBRC, KC_LPRN)
854 ,[CT_RBP] = ACTION_TAP_DANCE_DOUBLE (KC_RBRC, KC_RPRN)
855 ,[CT_TMUX]= ACTION_TAP_DANCE_FN (ang_tap_dance_tmux_finished)
856 ,[CT_TPS] = ACTION_TAP_DANCE_FN (ang_tap_dance_tmux_pane_select)
857 ,[CT_SR] = ACTION_TAP_DANCE_FN_ADVANCED (_td_sr_each, _td_sr_finished, _td_sr_reset)
860 // Runs constantly in the background, in a loop.
861 void matrix_scan_user(void) {
862 uint8_t layer = biton32(layer_state);
863 bool is_arrow = false;
865 if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM)
866 unregister_code (KC_LGUI);
870 ergodox_right_led_2_on();
871 ergodox_right_led_3_on();
872 } else if (layer == NMDIA) {
873 ergodox_right_led_1_on();
874 ergodox_right_led_2_on();
875 } else if (layer == PLVR) {
876 ergodox_right_led_1_on ();
877 ergodox_right_led_2_on ();
878 ergodox_right_led_3_on ();
879 } else if (layer == ADORE) {
880 ergodox_right_led_1_on ();
881 ergodox_right_led_2_on ();
882 ergodox_right_led_3_on ();
884 ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
888 if (layer_state & (1UL << ARRW)) {
890 ergodox_right_led_1_on ();
891 ergodox_right_led_3_on ();
897 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
898 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
899 ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
900 ergodox_right_led_1_on ();
902 ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
903 if (layer != NMDIA && layer != PLVR && layer != ADORE && !is_arrow)
904 ergodox_right_led_1_off ();
907 if (keyboard_report->mods & MOD_BIT(KC_LALT) ||
908 ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) {
909 ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
910 ergodox_right_led_2_on ();
912 ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
913 if (layer != HUN && layer != NMDIA && layer != PLVR && layer != ADORE)
914 ergodox_right_led_2_off ();
917 if (keyboard_report->mods & MOD_BIT(KC_LCTRL) ||
918 ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) {
919 ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
920 ergodox_right_led_3_on ();
922 ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
923 if (layer != HUN && layer != PLVR && layer != ADORE && !is_arrow)
924 ergodox_right_led_3_off ();
928 LEADER_DICTIONARY() {
933 ang_tap (LSFT(KC_C), KC_S, KC_I, KC_L, KC_L, KC_RALT, KC_QUOT, KC_A, KC_M, KC_A, KC_S,
934 KC_S, KC_Z, KC_O, KC_N, KC_Y, KC_K, KC_RALT, KC_QUOT, KC_A, KC_M, 0);
938 ang_tap (LSFT(KC_G), KC_E, KC_J, KC_G, KC_RALT, KC_EQL, KC_O,
939 KC_RALT, KC_EQL, KC_O,
940 KC_RALT, KC_EQL, KC_O, 0);
945 ergodox_led_all_on();
947 ergodox_led_all_off();
948 log_enable = !log_enable;
953 time_travel = !time_travel;
961 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")");
966 unicode_input_start();
967 register_hex(0x03bb);
968 unicode_input_finish();
972 ang_tap (KC_BSLS, KC_O, KC_SLSH, 0);
976 unicode_input_start(); register_hex(0xaf); unicode_input_finish();
978 register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
979 unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
980 register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT);
982 unicode_input_start (); register_hex(0xaf); unicode_input_finish();
985 SEQ_TWO_KEYS (KC_W, KC_M) {
991 default_layer_and (0);
992 default_layer_or ((1UL << ADORE));
993 eeconfig_update_default_layer ((1UL << ADORE));
996 ergodox_led_all_off ();
997 ergodox_right_led_3_on ();
999 ergodox_right_led_2_on ();
1001 ergodox_right_led_3_off ();
1002 ergodox_right_led_1_on ();
1004 ergodox_right_led_2_off ();
1006 ergodox_right_led_1_off ();
1009 default_layer_and (0);
1010 default_layer_or (1UL << BASE);
1011 eeconfig_update_default_layer ((1UL << BASE));
1013 ergodox_led_all_off ();
1014 ergodox_right_led_1_on ();
1016 ergodox_right_led_2_on ();
1018 ergodox_right_led_1_off ();
1019 ergodox_right_led_3_on ();
1021 ergodox_right_led_2_off ();
1023 ergodox_right_led_3_off ();
1029 static uint16_t last4[4];
1031 const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE
1033 UCIS_SYM("poop", 0x1f4a9),
1034 UCIS_SYM("rofl", 0x1f923),
1035 UCIS_SYM("kiss", 0x1f619),
1036 UCIS_SYM("snowman", 0x2603),
1037 UCIS_SYM("coffee", 0x2615),
1038 UCIS_SYM("heart", 0x2764),
1039 UCIS_SYM("bolt", 0x26a1),
1040 UCIS_SYM("pi", 0x03c0),
1041 UCIS_SYM("mouse", 0x1f401),
1042 UCIS_SYM("micro", 0x00b5),
1043 UCIS_SYM("tm", 0x2122)
1046 bool process_record_user (uint16_t keycode, keyrecord_t *record) {
1047 #if KEYLOGGER_ENABLE
1049 uint8_t layer = biton32(layer_state);
1051 if ((layer == ADORE) || (layer == BASE))
1052 uprintf ("KL: col=%02d, row=%02d, pressed=%d, layer=%s\n", record->event.key.col,
1053 record->event.key.row, record->event.pressed, (is_adore) ? "ADORE" : "Dvorak");
1057 if (keycode == KC_ESC && record->event.pressed) {
1060 if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) {
1061 clear_oneshot_mods ();
1064 if (layer_state & (1UL<<HUN)) {
1071 if (time_travel && !record->event.pressed) {
1074 // shift cache one to the left
1075 for (p = 0; p < 3; p++) {
1076 last4[p] = last4[p + 1];
1080 if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) {
1081 ang_tap (KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0);
1082 register_code (KC_RSFT);
1083 register_code (KC_EQL);
1084 unregister_code (KC_EQL);
1085 unregister_code (KC_RSFT);
1087 ang_tap (KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0);
1096 void qk_ucis_symbol_fallback (void) {
1097 for (uint8_t i = 0; i < qk_ucis_state.count - 1; i++) {
1100 if ((qk_ucis_state.codes[i] >= M(A_1)) && (qk_ucis_state.codes[i] <= M(A_0)))
1101 code = qk_ucis_state.codes[i] - M(A_1) + KC_1;
1103 code = qk_ucis_state.codes[i];
1104 register_code(code);
1105 unregister_code(code);