aboutsummaryrefslogtreecommitdiff
path: root/layouts/community/ergodox/algernon/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'layouts/community/ergodox/algernon/keymap.c')
-rw-r--r--layouts/community/ergodox/algernon/keymap.c1194
1 files changed, 0 insertions, 1194 deletions
diff --git a/layouts/community/ergodox/algernon/keymap.c b/layouts/community/ergodox/algernon/keymap.c
deleted file mode 100644
index 068087095..000000000
--- a/layouts/community/ergodox/algernon/keymap.c
+++ /dev/null
@@ -1,1194 +0,0 @@
1/*
2 * algernon's ErgoDox EZ layout, please see the readme.md file!
3 */
4
5#include <stdarg.h>
6#include QMK_KEYBOARD_H
7#include "led.h"
8#include "debug.h"
9#include "action_layer.h"
10#include "action_util.h"
11#include "timer.h"
12#include "keymap_plover.h"
13#include "eeconfig.h"
14#include "wait.h"
15#include "version.h"
16#include "print.h"
17
18/* Layers */
19
20enum {
21 BASE = 0,
22 ADORE,
23 ARRW,
24 APPSEL,
25 HUN,
26 NMDIA,
27 PLVR,
28};
29
30/* Macros */
31
32enum {
33 NONE = 0,
34 // Buttons that do extra stuff
35 A_GUI,
36 A_PLVR,
37 A_MPN,
38
39 // Application select keys
40 APP_SLK, // Slack
41 APP_EMCS, // Emacs
42 APP_TERM, // Terminal
43 APP_CHRM, // Chrome
44 APP_MSIC, // Music
45 APP_SOCL, // Social
46 APP_PMGR, // Password manager
47 APP_SCL2, // Social #2
48
49 // Hungarian layer keys
50 HU_AACU, // Á
51 HU_OACU, // Ó
52 HU_EACU, // É
53 HU_UACU, // Ú
54 HU_IACU, // Í
55 HU_ODIA, // Ö
56 HU_UDIA, // Ü
57 HU_ODAC, // Ő
58 HU_UDAC, // Ű
59
60 // number/symbol keys
61 A_1, // 1
62 A_2, // 2
63 A_3, // ...
64 A_4,
65 A_5,
66 A_6,
67 A_7,
68 A_8,
69 A_9,
70 A_0,
71
72 // Fx
73 Fx,
74};
75
76/* Fn keys */
77
78enum {
79 F_BSE = 0,
80 F_HUN,
81 F_GUI,
82};
83
84/* Custom keycodes */
85
86enum {
87 CT_CLN = 0,
88 CT_TA,
89 CT_LBP,
90 CT_RBP,
91 CT_TMUX,
92 CT_TPS,
93 CT_SR,
94};
95
96/* States & timers */
97
98uint16_t gui_timer = 0;
99
100#if KEYLOGGER_ENABLE
101# ifdef AUTOLOG_ENABLE
102bool log_enable = true;
103# else
104bool log_enable = false;
105# endif
106#endif
107
108bool time_travel = false;
109bool skip_leds = false;
110
111static uint8_t is_adore = 0;
112
113/* The Keymap */
114
115const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
116
117/* Keymap 0: Base Layer
118 *
119 * ,-----------------------------------------------------. ,-----------------------------------------------------.
120 * | Next/Prev | 9 | 7 @ | 5 * | 3 ^ | 1 $ | F11 | | Fx | 0 % | 2 ! | 4 # | 6 & | 8 | Plover |
121 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
122 * | ~ | ' | , | . | P | Y | ( | | ) | F | G | C | R | L | \ |
123 * |-----------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------|
124 * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow |
125 * |-----------+------+------+------+------+------| tmux | | tmux |------+------+------+------+------+-----------|
126 * | Play/Pause| / | Q | J | K | X | | | Pane | B | M | W | V | Z | Stop/Reset|
127 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
128 * | | | | | : | | - | | | | |
129 * `-----------------------------------' `-----------------------------------'
130 * ,-------------. ,-------------.
131 * | LAlt | GUI | | MDIA | Del |
132 * ,------|------|------| |------+------+------.
133 * | | | Ctrl | | LEAD | | |
134 * |Backsp|LShift|------| |------| Enter| Space|
135 * | | | ESC | | HUN | | |
136 * `--------------------' `--------------------'
137 */
138[BASE] = LAYOUT_ergodox(
139// left hand
140 M(A_MPN) ,M(A_9) ,M(A_7) ,M(A_5) ,M(A_3) ,M(A_1) ,KC_F11
141,KC_GRV ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,TD(CT_LBP)
142,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
143,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,TD(CT_TMUX)
144,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
145
146 ,OSM(MOD_LALT),F(F_GUI)
147 ,OSM(MOD_LCTL)
148 ,KC_BSPC,OSM(MOD_LSFT),KC_ESC
149
150 // right hand
151 ,M(Fx) ,M(A_0) ,M(A_2) ,M(A_4) ,M(A_6) ,M(A_8) ,M(A_PLVR)
152 ,TD(CT_RBP),KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS
153 ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL
154 ,TD(CT_TPS),KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,TD(CT_SR)
155 ,KC_MINS ,KC_NO ,KC_NO ,KC_NO ,KC_NO
156
157 ,OSL(NMDIA),KC_DEL
158 ,KC_LEAD
159 ,F(F_HUN) ,KC_ENT ,KC_SPC
160 ),
161
162/* Keymap 1: Adore layer
163 *
164 * ,-----------------------------------------------------. ,-----------------------------------------------------.
165 * | Play/Pause| 9 | 7 @ | 5 * | 3 ^ | 1 $ | F11 | | Fx | 0 % | 2 ! | 4 # | 6 & | 8 | Plover |
166 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
167 * | \ | X | W | C | H | F | ( | | ) | M | G | L | P | / | `~ |
168 * |-----------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------|
169 * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = |
170 * |-----------+------+------+------+------+------| tmux | | tmux |------+------+------+------+------+-----------|
171 * | | Z | Q | ' | , | . | | | pane | B | K | V | Y | J | |
172 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
173 * | | | | | : | | - | | | | |
174 * `-----------------------------------' `-----------------------------------'
175 * ,-------------. ,-------------.
176 * | LAlt | GUI | | MDIA | Del |
177 * ,------|------|------| |------+------+------.
178 * | | | Ctrl | | HUN | | |
179 * |Backsp|LShift|------| |------| Enter| Space|
180 * | | | ESC | | LEAD | | |
181 * `--------------------' `--------------------'
182 */
183[ADORE] = LAYOUT_ergodox(
184// left hand
185 KC_MPLY ,M(A_9) ,M(A_7) ,M(A_5) ,M(A_3) ,M(A_1) ,KC_F11
186,KC_BSLS ,KC_X ,KC_W ,KC_C ,KC_H ,KC_F ,TD(CT_LBP)
187,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U
188,KC_NO ,KC_Z ,KC_Q ,KC_QUOT ,KC_COMM ,KC_DOT ,TD(CT_TMUX)
189,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
190
191 ,OSM(MOD_LALT),F(F_GUI)
192 ,OSM(MOD_LCTL)
193 ,KC_BSPC,OSM(F_LSFT),KC_ESC
194
195 // right hand
196 ,M(Fx) ,M(A_0) ,M(A_2) ,M(A_4) ,M(A_6) ,M(A_8) ,M(A_PLVR)
197 ,TD(CT_RBP),KC_M ,KC_G ,KC_L ,KC_P ,KC_SLSH ,KC_GRV
198 ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL
199 ,TD(CT_TPS),KC_B ,KC_K ,KC_V ,KC_Y ,KC_J ,KC_NO
200 ,KC_MINS ,KC_NO ,KC_NO ,KC_NO ,KC_NO
201
202 ,OSL(NMDIA),KC_DEL
203 ,F(F_HUN)
204 ,KC_LEAD ,KC_ENT ,KC_SPC
205 ),
206
207/* Keymap 2: Arrow layer
208 *
209 * ,-----------------------------------------------------. ,-----------------------------------------------------.
210 * | | | | | | | | | | | | | | | |
211 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
212 * | | | | | | | | | | | Home | Up | End | | |
213 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
214 * | | | | | | |------| |------| | Left | Down | Rght | | |
215 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
216 * | | | | | | | | | | | | | | | |
217 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
218 * | | | | | | | | | | | |
219 * `----------------------------------' `----------------------------------'
220 * ,-------------. ,-------------.
221 * | | | | | |
222 * ,------|------|------| |------+------+------.
223 * | | | | | | | |
224 * | Enter| |------| |------| PgUp | PgDn |
225 * | | | | | | | |
226 * `--------------------' `--------------------'
227 */
228
229[ARRW] = LAYOUT_ergodox(
230// left hand
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 ,KC_TRNS
233,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
234,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
235,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
236
237 ,KC_TRNS ,KC_TRNS
238 ,KC_TRNS
239 ,KC_ENT ,KC_TRNS ,KC_TRNS
240
241 // right hand
242 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
243 ,KC_TRNS ,KC_TRNS ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS
244 ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS
245 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
246 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
247
248 ,KC_TRNS ,KC_TRNS
249 ,KC_TRNS
250 ,KC_TRNS ,KC_PGUP ,KC_PGDN
251 ),
252
253/* Keymap 3: Application select layer
254 *
255 * ,-----------------------------------------------------. ,-----------------------------------------------------.
256 * | |Music |Slack |Emacs |Term |Chrome| | | |Social|PWMgr |Scl2 | | | |
257 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
258 * | | | | | | | | | | | | | | | |
259 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
260 * | | | | | | |------| |------| | | | | | |
261 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
262 * | | | | | | | | | | | | | | | |
263 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
264 * | | | | | | | | | | | |
265 * `----------------------------------' `----------------------------------'
266 * ,-------------. ,-------------.
267 * | | | | | |
268 * ,------|------|------| |------+------+------.
269 * | | | | | | | |
270 * | | |------| |------| | |
271 * | | | | | | | |
272 * `--------------------' `--------------------'
273 */
274
275[APPSEL] = LAYOUT_ergodox(
276// left hand
277 KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS
278,KC_TRNS ,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
280,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
281,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
282
283 ,KC_TRNS ,KC_TRNS
284 ,KC_TRNS
285 ,KC_TRNS ,KC_TRNS ,KC_TRNS
286
287 // right hand
288 ,KC_TRNS ,M(APP_SOCL) ,M(APP_PMGR) ,M(APP_SCL2) ,KC_NO ,KC_NO ,KC_TRNS
289 ,KC_TRNS ,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
291 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
292 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
293
294 ,KC_TRNS ,KC_TRNS
295 ,KC_TRNS
296 ,KC_TRNS ,KC_TRNS ,KC_TRNS
297 ),
298
299
300/* Keymap 4: Hungarian Layer
301 *
302 * ,-----------------------------------------------------. ,-----------------------------------------------------.
303 * | | | | | | | | | | | | | | | |
304 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
305 * | | | Ő | | Ű | | | | | | | | | | |
306 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
307 * | | Á | Ó | É | Ú | Í |------| |------| | | | | | |
308 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
309 * | | | Ö | | Ü | | | | | | | | | | |
310 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
311 * | | | | | | | | | | | |
312 * `----------------------------------' `----------------------------------'
313 * ,-------------. ,-------------.
314 * | | | | | |
315 * ,------|------|------| |------+------+------.
316 * | | | | | | | |
317 * | | |------| |------| | |
318 * | | | | | BASE | | |
319 * `--------------------' `--------------------'
320 */
321
322[HUN] = LAYOUT_ergodox(
323// left hand
324 KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
325,KC_NO ,KC_NO ,M(HU_ODAC),KC_NO ,M(HU_UDAC),KC_NO ,KC_NO
326,KC_NO ,M(HU_AACU),M(HU_OACU) ,M(HU_EACU),M(HU_UACU) ,M(HU_IACU)
327,KC_NO ,KC_NO ,M(HU_ODIA) ,KC_NO ,M(HU_UDIA) ,KC_NO ,KC_NO
328,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
329
330 ,KC_NO ,KC_NO
331 ,KC_NO
332 ,KC_NO ,KC_TRNS ,KC_TRNS
333
334 // right hand
335 ,KC_TRNS ,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 ,KC_NO
337 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
338 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
339 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
340
341 ,KC_NO ,KC_NO
342 ,KC_NO
343 ,F(F_BSE),KC_TRNS ,KC_TRNS
344 ),
345
346/* Keymap 5: Navigation & Media layer
347 *
348 * ,-----------------------------------------------------. ,-----------------------------------------------------.
349 * | | F9 | F7 | F5 | F3 | F1 |ScrLCK| | | F10 | F2 | F4 | F6 | F8 | |
350 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
351 * | | | | | | | | | | | | | | | |
352 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
353 * | | | | | | |------| |------| | | | | | |
354 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
355 * | | | | | | | | | | | | | | | |
356 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
357 * | | | | | | | | | | | |
358 * `----------------------------------' `----------------------------------'
359 * ,-------------. ,-------------.
360 * | Mute | VlUp | | BASE | |
361 * ,------|------|------| |------+------+------.
362 * | | | VlDn | | | | |
363 * | | |------| |------| | |
364 * | | | | | | | |
365 * `--------------------' `--------------------'
366 */
367[NMDIA] = LAYOUT_ergodox(
368// left hand
369 KC_NO ,KC_F9 ,KC_F7 ,KC_F5 ,KC_F3 ,KC_F1 ,LGUI(KC_L)
370,KC_NO ,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
372,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
373,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
374 ,KC_MUTE ,KC_VOLU
375 ,KC_VOLD
376 ,KC_NO ,KC_NO ,KC_TRNS
377
378 // right hand
379 ,KC_TRNS ,KC_F10 ,KC_F2 ,KC_F4 ,KC_F6 ,KC_F8 ,KC_NO
380 ,KC_NO ,KC_NO ,KC_NO ,KC_UP ,KC_NO ,KC_NO ,KC_NO
381 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_NO ,KC_NO
382 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
383 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
384
385 ,KC_TRNS ,KC_NO
386 ,KC_NO
387 ,KC_NO ,KC_NO ,KC_NO
388 ),
389
390/* Keymap 6: Steno for Plover
391 *
392 * ,--------------------------------------------------. ,--------------------------------------------------.
393 * | | | | | | | | | | | | | | | BASE |
394 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
395 * | | # | # | # | # | # | # | | # | # | # | # | # | # | # |
396 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
397 * | | | T | P | H | |------| |------| | F | P | L | T | D |
398 * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+------+--------|
399 * | | | K | W | R | | | | | | R | B | G | S | Z |
400 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
401 * | | | | | | | | | | | |
402 * `----------------------------------' `----------------------------------'
403 * ,-------------. ,-------------.
404 * | | | | | |
405 * ,------|------|------| |------+------+------.
406 * | | | | | | | |
407 * | A | O |------| |------| E | U |
408 * | | | | | | | |
409 * `--------------------' `--------------------'
410 */
411
412[PLVR] = LAYOUT_ergodox(
413// left hand
414KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
415KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
416KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
417KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
418KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
419 KC_NO, KC_NO,
420 KC_NO,
421 PV_A, PV_O, KC_NO,
422
423 // right hand
424 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR),
425 PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
426 PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
427 PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
428 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
429 KC_NO, KC_NO,
430 KC_NO,
431 KC_NO,PV_E, PV_U
432 ),
433
434};
435
436const uint16_t PROGMEM fn_actions[] = {
437 [F_BSE] = ACTION_LAYER_CLEAR(ON_PRESS)
438 ,[F_HUN] = ACTION_LAYER_INVERT(HUN, ON_PRESS)
439 ,[F_GUI] = ACTION_MACRO_TAP(A_GUI)
440};
441
442static void toggle_steno(int pressed)
443{
444 uint8_t layer = biton32(layer_state);
445
446 if (pressed) {
447 if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR);
448
449 register_code(PV_LP);
450 register_code(PV_LH);
451 register_code(PV_LR);
452 register_code(PV_O);
453 register_code(PV_RL);
454 register_code(PV_RG);
455 } else {
456 unregister_code(PV_LP);
457 unregister_code(PV_LH);
458 unregister_code(PV_LR);
459 unregister_code(PV_O);
460 unregister_code(PV_RL);
461 unregister_code(PV_RG);
462 }
463}
464
465static macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char)
466{
467 uint8_t need_shift = 0;
468 uint8_t hold_shift = 0;
469
470 if (!record->event.pressed)
471 return MACRO_NONE;
472
473 layer_off (HUN);
474
475 if (keyboard_report->mods & MOD_BIT (KC_LSFT)) {
476 hold_shift = 1;
477 need_shift = 1;
478 unregister_code (KC_LSFT);
479 }
480 if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) {
481 need_shift = 1;
482 hold_shift = 0;
483 unregister_code (KC_LSFT);
484 }
485
486 clear_oneshot_mods ();
487
488 register_code (KC_RALT);
489 unregister_code (KC_RALT);
490 if (accent == (KC_DQT)) {
491 register_code (KC_RSFT);
492 }
493 register_code (accent);
494 unregister_code (accent);
495 if (need_shift && accent != (KC_DQT)) {
496 register_code (KC_RSFT);
497 } else if (accent == (KC_DQT) && !need_shift) {
498 unregister_code (KC_RSFT);
499 }
500 register_code (hun_char);
501 unregister_code (hun_char);
502 if (need_shift || accent == (KC_DQT))
503 unregister_code (KC_RSFT);
504 if (hold_shift)
505 register_code (KC_LSFT);
506
507 return MACRO_NONE;
508}
509
510static void ang_handle_num_row(uint8_t id, keyrecord_t *record) {
511 uint8_t idx = id - A_1;
512 uint8_t kc;
513 static bool shifted[10];
514
515 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
516 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
517 if (record->event.pressed)
518 shifted[idx] = true;
519 }
520
521 if (!shifted[idx]) {
522 kc = idx + KC_1;
523 } else {
524 switch (id) {
525 case A_8:
526 case A_9:
527 shifted[idx] = false;
528 return;
529
530 case A_7:
531 kc = KC_2;
532 break;
533 case A_5:
534 kc = KC_8;
535 break;
536 case A_3:
537 kc = KC_4;
538 break;
539 case A_1:
540 kc = KC_6;
541 break;
542
543 case A_0:
544 kc = KC_5;
545 break;
546 case A_2:
547 kc = KC_1;
548 break;
549 case A_4:
550 kc = KC_3;
551 break;
552 case A_6:
553 kc = KC_7;
554 break;
555 }
556 }
557
558 if (record->event.pressed) {
559 register_code (kc);
560 } else {
561 unregister_code (kc);
562 shifted[idx] = false;
563 }
564}
565
566const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
567{
568 switch(id) {
569 case A_MPN:
570 if (record->event.pressed) {
571 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
572 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
573 int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out());
574
575 if (oneshot)
576 clear_oneshot_mods ();
577 unregister_code (KC_LSFT);
578
579 register_code (KC_MPRV);
580 unregister_code (KC_MPRV);
581
582 if (!oneshot)
583 register_code (KC_LSFT);
584 } else {
585 return MACRO (T(MNXT), END);
586 }
587 }
588 break;
589
590 /* Hungarian layer */
591 case HU_AACU:
592 return ang_do_hun (record, KC_QUOT, KC_A);
593 case HU_OACU:
594 return ang_do_hun (record, KC_QUOT, KC_O);
595 case HU_EACU:
596 return ang_do_hun (record, KC_QUOT, KC_E);
597 case HU_UACU:
598 return ang_do_hun (record, KC_QUOT, KC_U);
599 case HU_IACU:
600 return ang_do_hun (record, KC_QUOT, KC_I);
601 case HU_ODIA:
602 return ang_do_hun (record, KC_DQT, KC_O);
603 case HU_UDIA:
604 return ang_do_hun (record, KC_DQT, KC_U);
605 case HU_ODAC:
606 return ang_do_hun (record, KC_EQL, KC_O);
607 case HU_UDAC:
608 return ang_do_hun (record, KC_EQL, KC_U);
609
610 /* Plover base */
611 case A_PLVR:
612 toggle_steno(record->event.pressed);
613 break;
614
615 /* Fx */
616 case Fx:
617 if (record->event.pressed) {
618 set_oneshot_mods (MOD_LALT);
619 layer_on (NMDIA);
620 set_oneshot_layer (NMDIA, ONESHOT_START);
621 } else {
622 clear_oneshot_layer_state (ONESHOT_PRESSED);
623 }
624 break;
625
626 /* GUI & AppSel */
627 case A_GUI:
628 if (record->event.pressed) {
629 register_code (KC_LGUI);
630 if (record->tap.count && !record->tap.interrupted) {
631 if (record->tap.count == 2) {
632 uprintf("CMD:appsel_start\n");
633 layer_on (APPSEL);
634 set_oneshot_layer (APPSEL, ONESHOT_START);
635 } else if (record->tap.count >= 3) {
636 uprintf("CMD:appsel_helper\n");
637 layer_off (APPSEL);
638 clear_oneshot_layer_state (ONESHOT_PRESSED);
639 }
640 } else {
641 record->tap.count = 0;
642 }
643 gui_timer = 0;
644 } else {
645 if (record->tap.count >= 2)
646 {
647 clear_oneshot_layer_state (ONESHOT_PRESSED);
648 }
649 gui_timer = timer_read ();
650 }
651 break;
652
653 case APP_SLK:
654 if (record->event.pressed)
655 uprintf("CMD:appsel_slack\n");
656 break;
657
658 case APP_EMCS:
659 if (record->event.pressed)
660 uprintf("CMD:appsel_emacs\n");
661 break;
662
663 case APP_TERM:
664 if (record->event.pressed)
665 uprintf("CMD:appsel_term\n");
666 break;
667
668 case APP_CHRM:
669 if (record->event.pressed)
670 uprintf("CMD:appsel_chrome\n");
671 break;
672
673 case APP_MSIC:
674 if (record->event.pressed)
675 uprintf("CMD:appsel_music\n");
676 break;
677
678 case APP_SOCL:
679 if (record->event.pressed)
680 uprintf("CMD:appsel_social\n");
681 break;
682
683 case APP_PMGR:
684 if (record->event.pressed)
685 uprintf("CMD:appsel_pwmgr\n");
686 break;
687
688 case APP_SCL2:
689 if (record->event.pressed)
690 uprintf("CMD:appsel_social2\n");
691 break;
692
693 // number row and symbols
694 case A_1 ... A_0:
695 ang_handle_num_row(id, record);
696 break;
697 }
698
699 return MACRO_NONE;
700};
701
702// Runs just one time when the keyboard initializes.
703void matrix_init_user(void) {
704 uint8_t dl;
705
706 set_unicode_input_mode(UC_LNX);
707
708 ergodox_led_all_on();
709 for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
710 ergodox_led_all_set (i);
711 wait_ms (5);
712 }
713 wait_ms(1000);
714 for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
715 ergodox_led_all_set (i);
716 wait_ms (10);
717 }
718 ergodox_led_all_off();
719
720 if (!eeconfig_is_enabled())
721 eeconfig_init();
722 dl = eeconfig_read_default_layer ();
723 if (dl == (1UL << ADORE)) {
724 is_adore = 1;
725 }
726};
727
728LEADER_EXTERNS();
729
730static void ang_tap (uint16_t code, ...) {
731 uint16_t kc = code;
732 va_list ap;
733
734 va_start(ap, code);
735
736 do {
737 register_code16(kc);
738 unregister_code16(kc);
739 wait_ms(50);
740 kc = va_arg(ap, int);
741 } while (kc != 0);
742 va_end(ap);
743}
744
745#define TAP_ONCE(code) \
746 register_code (code); \
747 unregister_code (code)
748
749typedef struct {
750 bool layer_toggle;
751 bool sticky;
752} td_ta_state_t;
753
754static void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) {
755 td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
756
757 if (td_ta->sticky) {
758 td_ta->sticky = false;
759 td_ta->layer_toggle = false;
760 layer_off (ARRW);
761 return;
762 }
763
764 if (state->count == 1 && !state->pressed) {
765 register_code (KC_TAB);
766 td_ta->sticky = false;
767 td_ta->layer_toggle = false;
768 } else {
769 td_ta->layer_toggle = true;
770 layer_on (ARRW);
771 td_ta->sticky = (state->count == 2);
772 }
773}
774
775static void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) {
776 td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
777
778 if (!td_ta->layer_toggle)
779 unregister_code (KC_TAB);
780 if (!td_ta->sticky)
781 layer_off (ARRW);
782}
783
784static void ang_tap_dance_tmux_finished (qk_tap_dance_state_t *state, void *user_data) {
785 if (state->count == 1) {
786 register_code(KC_LALT);
787 register_code(KC_SPC);
788 unregister_code(KC_SPC);
789 unregister_code(KC_LALT);
790 } else {
791 register_code(KC_LCTL);
792 register_code(KC_A);
793 unregister_code(KC_A);
794 unregister_code(KC_LCTL);
795 }
796}
797
798static void ang_tap_dance_tmux_pane_select (qk_tap_dance_state_t *state, void *user_data) {
799 uint8_t kc = KC_P;
800
801 if (state->count >= 2) {
802 kc = KC_Z;
803 }
804
805 register_code(KC_LALT);
806 register_code(KC_SPC);
807 unregister_code(KC_SPC);
808 unregister_code(KC_LALT);
809
810 register_code(kc);
811 unregister_code(kc);
812}
813
814static void
815_td_sr_each (qk_tap_dance_state_t *state, void *user_data) {
816 skip_leds = true;
817
818 switch (state->count) {
819 case 1:
820 ergodox_right_led_3_on ();
821 break;
822 case 2:
823 ergodox_right_led_2_on ();
824 break;
825 case 3:
826 ergodox_right_led_1_on ();
827 break;
828 case 4:
829 ergodox_right_led_3_off ();
830 wait_ms (50);
831 ergodox_right_led_2_off ();
832 wait_ms (50);
833 ergodox_right_led_1_off ();
834 break;
835 }
836}
837
838static void
839_td_sr_finished (qk_tap_dance_state_t *state, void *user_data) {
840 if (state->count == 1) {
841 register_code (KC_MSTP);
842 }
843 if (state->count >= 4) {
844 uprintf("CMD:reflash\n");
845 wait_ms (1000);
846 reset_keyboard ();
847 reset_tap_dance (state);
848 }
849}
850
851static void
852_td_sr_reset (qk_tap_dance_state_t *state, void *user_data) {
853 ergodox_right_led_1_off ();
854 wait_ms (50);
855 ergodox_right_led_2_off ();
856 wait_ms (50);
857 ergodox_right_led_3_off ();
858
859 if (state->count == 1) {
860 unregister_code (KC_MSTP);
861 }
862}
863
864static void
865_td_brackets_finished (qk_tap_dance_state_t *state, void *user_data) {
866 if (state->count == 1) {
867 if (state->keycode == TD(CT_LBP))
868 register_code16 (KC_LBRC);
869 else
870 register_code16 (KC_RBRC);
871 } else if (state->count == 2) {
872 if (state->keycode == TD(CT_LBP))
873 register_code16 (KC_LPRN);
874 else
875 register_code16 (KC_RPRN);
876 } else if (state->count == 3) {
877 unicode_input_start();
878
879 if (state->keycode == TD(CT_LBP))
880 register_hex (0x300c);
881 else
882 register_hex (0x300d);
883
884 unicode_input_finish();
885 }
886}
887
888static void
889_td_brackets_reset (qk_tap_dance_state_t *state, void *user_data) {
890 if (state->count == 1) {
891 if (state->keycode == TD(CT_LBP))
892 unregister_code16 (KC_LBRC);
893 else
894 unregister_code16 (KC_RBRC);
895 } else if (state->count == 2) {
896 if (state->keycode == TD(CT_LBP))
897 unregister_code16 (KC_LPRN);
898 else
899 unregister_code16 (KC_RPRN);
900 }
901}
902
903qk_tap_dance_action_t tap_dance_actions[] = {
904 [CT_CLN] = ACTION_TAP_DANCE_DOUBLE (KC_COLN, KC_SCLN)
905 ,[CT_TA] = {
906 .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset },
907 .user_data = (void *)&((td_ta_state_t) { false, false })
908 }
909 ,[CT_LBP] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, _td_brackets_finished, _td_brackets_reset)
910 ,[CT_RBP] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, _td_brackets_finished, _td_brackets_reset)
911 ,[CT_TMUX]= ACTION_TAP_DANCE_FN (ang_tap_dance_tmux_finished)
912 ,[CT_TPS] = ACTION_TAP_DANCE_FN (ang_tap_dance_tmux_pane_select)
913 ,[CT_SR] = ACTION_TAP_DANCE_FN_ADVANCED (_td_sr_each, _td_sr_finished, _td_sr_reset)
914};
915
916// Runs constantly in the background, in a loop.
917void matrix_scan_user(void) {
918 uint8_t layer = biton32(layer_state);
919 bool is_arrow = false;
920
921 if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM)
922 unregister_code (KC_LGUI);
923
924 if (!skip_leds) {
925 if (layer == HUN) {
926 ergodox_right_led_2_on();
927 ergodox_right_led_3_on();
928 } else if (layer == NMDIA) {
929 ergodox_right_led_1_on();
930 ergodox_right_led_2_on();
931 } else if (layer == PLVR) {
932 ergodox_right_led_1_on ();
933 ergodox_right_led_2_on ();
934 ergodox_right_led_3_on ();
935 } else if (layer == ADORE) {
936 ergodox_right_led_1_on ();
937 ergodox_right_led_2_on ();
938 ergodox_right_led_3_on ();
939
940 ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
941 }
942 }
943
944 if (layer_state & (1UL << ARRW)) {
945 if (!skip_leds) {
946 ergodox_right_led_1_on ();
947 ergodox_right_led_3_on ();
948 }
949 is_arrow = true;
950 }
951
952 if (!skip_leds) {
953 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
954 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
955 ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
956 ergodox_right_led_1_on ();
957 } else {
958 ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
959 if (layer != NMDIA && layer != PLVR && layer != ADORE && !is_arrow)
960 ergodox_right_led_1_off ();
961 }
962
963 if (keyboard_report->mods & MOD_BIT(KC_LALT) ||
964 ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) {
965 ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
966 ergodox_right_led_2_on ();
967 } else {
968 ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
969 if (layer != HUN && layer != NMDIA && layer != PLVR && layer != ADORE)
970 ergodox_right_led_2_off ();
971 }
972
973 if (keyboard_report->mods & MOD_BIT(KC_LCTRL) ||
974 ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) {
975 ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
976 ergodox_right_led_3_on ();
977 } else {
978 ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
979 if (layer != HUN && layer != PLVR && layer != ADORE && !is_arrow)
980 ergodox_right_led_3_off ();
981 }
982 }
983
984 LEADER_DICTIONARY() {
985 leading = false;
986 leader_end ();
987
988 SEQ_ONE_KEY (KC_C) {
989 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,
990 KC_S, KC_Z, KC_O, KC_N, KC_Y, KC_K, KC_RALT, KC_QUOT, KC_A, KC_M, 0);
991 }
992
993 SEQ_ONE_KEY (KC_K) {
994 ang_tap (KC_SPC, LSFT(KC_7), KC_SPC, 0);
995 register_code(KC_LCTL);
996 register_code(KC_LSFT);
997 register_code(KC_U);
998 unregister_code(KC_U);
999 unregister_code(KC_LSFT);
1000 unregister_code(KC_LCTL);
1001 ang_tap (KC_1, KC_F, KC_4, KC_7, KC_6, 0);
1002 register_code (KC_ENT);
1003 unregister_code (KC_ENT);
1004 ang_tap (KC_END, 0);
1005 register_code(KC_LCTL);
1006 register_code(KC_LSFT);
1007 register_code(KC_U);
1008 unregister_code(KC_U);
1009 unregister_code(KC_LSFT);
1010 unregister_code(KC_LCTL);
1011 ang_tap (KC_1, KC_F, KC_4, KC_7, KC_6, 0);
1012 register_code (KC_SPC);
1013 unregister_code (KC_SPC);
1014 }
1015
1016 SEQ_ONE_KEY (KC_G) {
1017 ang_tap (LSFT(KC_G), KC_E, KC_J, KC_G, KC_RALT, KC_EQL, KC_O,
1018 KC_RALT, KC_EQL, KC_O,
1019 KC_RALT, KC_EQL, KC_O, 0);
1020 }
1021
1022#if KEYLOGGER_ENABLE
1023 SEQ_ONE_KEY (KC_D) {
1024 ergodox_led_all_on();
1025 wait_ms(100);
1026 ergodox_led_all_off();
1027 log_enable = !log_enable;
1028 }
1029#endif
1030
1031 SEQ_ONE_KEY (KC_R) {
1032 ang_tap(KC_RALT, 0);
1033 }
1034
1035 SEQ_ONE_KEY (KC_T) {
1036 time_travel = !time_travel;
1037 }
1038
1039 SEQ_ONE_KEY (KC_U) {
1040 qk_ucis_start();
1041 }
1042
1043 SEQ_ONE_KEY (KC_V) {
1044 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" LAYOUT_ergodox_VERSION ")");
1045 }
1046
1047 SEQ_ONE_KEY (KC_L) {
1048 /* λ */
1049 unicode_input_start();
1050 register_hex(0x03bb);
1051 unicode_input_finish();
1052 }
1053
1054 SEQ_ONE_KEY (KC_Y) {
1055 ang_tap (KC_BSLS, KC_O, KC_SLSH, 0);
1056 }
1057
1058 SEQ_ONE_KEY (KC_S) {
1059 unicode_input_start(); register_hex(0xaf); unicode_input_finish();
1060 TAP_ONCE (KC_BSLS);
1061 register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
1062 unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
1063 register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT);
1064 TAP_ONCE (KC_SLSH);
1065 unicode_input_start (); register_hex(0xaf); unicode_input_finish();
1066 }
1067
1068 SEQ_TWO_KEYS (KC_W, KC_M) {
1069 uprintf("CMD:wm\n");
1070 }
1071
1072 SEQ_ONE_KEY (KC_A) {
1073 if (is_adore == 0) {
1074 default_layer_and (0);
1075 default_layer_or ((1UL << ADORE));
1076 eeconfig_update_default_layer ((1UL << ADORE));
1077 is_adore = 1;
1078
1079 ergodox_led_all_off ();
1080 ergodox_right_led_3_on ();
1081 wait_ms (100);
1082 ergodox_right_led_2_on ();
1083 wait_ms (100);
1084 ergodox_right_led_3_off ();
1085 ergodox_right_led_1_on ();
1086 wait_ms (100);
1087 ergodox_right_led_2_off ();
1088 wait_ms (100);
1089 ergodox_right_led_1_off ();
1090 } else {
1091 is_adore = 0;
1092 default_layer_and (0);
1093 default_layer_or (1UL << BASE);
1094 eeconfig_update_default_layer ((1UL << BASE));
1095
1096 ergodox_led_all_off ();
1097 ergodox_right_led_1_on ();
1098 wait_ms (100);
1099 ergodox_right_led_2_on ();
1100 wait_ms (100);
1101 ergodox_right_led_1_off ();
1102 ergodox_right_led_3_on ();
1103 wait_ms (100);
1104 ergodox_right_led_2_off ();
1105 wait_ms (100);
1106 ergodox_right_led_3_off ();
1107 }
1108 }
1109 }
1110}
1111
1112static uint16_t last4[4];
1113
1114const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE
1115(
1116 UCIS_SYM("poop", 0x1f4a9),
1117 UCIS_SYM("rofl", 0x1f923),
1118 UCIS_SYM("kiss", 0x1f619),
1119 UCIS_SYM("snowman", 0x2603),
1120 UCIS_SYM("coffee", 0x2615),
1121 UCIS_SYM("heart", 0x2764),
1122 UCIS_SYM("bolt", 0x26a1),
1123 UCIS_SYM("pi", 0x03c0),
1124 UCIS_SYM("mouse", 0x1f401),
1125 UCIS_SYM("micro", 0x00b5),
1126 UCIS_SYM("tm", 0x2122),
1127 UCIS_SYM("child", 0x1f476),
1128 UCIS_SYM("family", 0x1F46A),
1129 UCIS_SYM("joy", 0x1F602)
1130);
1131
1132bool process_record_user (uint16_t keycode, keyrecord_t *record) {
1133#if KEYLOGGER_ENABLE
1134 if (log_enable) {
1135 uint8_t layer = biton32(layer_state);
1136
1137 if ((layer == ADORE) || (layer == BASE))
1138 uprintf ("KL: col=%02d, row=%02d, pressed=%d, layer=%s\n", record->event.key.col,
1139 record->event.key.row, record->event.pressed, (is_adore) ? "ADORE" : "Dvorak");
1140 }
1141#endif
1142
1143 if (keycode == KC_ESC && record->event.pressed) {
1144 bool queue = true;
1145
1146 if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) {
1147 clear_oneshot_mods ();
1148 queue = false;
1149 }
1150 if (layer_state & (1UL<<HUN)) {
1151 layer_off (HUN);
1152 queue = false;
1153 }
1154 return queue;
1155 }
1156
1157 if (time_travel && !record->event.pressed) {
1158 uint8_t p;
1159
1160 // shift cache one to the left
1161 for (p = 0; p < 3; p++) {
1162 last4[p] = last4[p + 1];
1163 }
1164 last4[3] = keycode;
1165
1166 if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) {
1167 ang_tap (KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0);
1168 register_code (KC_RSFT);
1169 register_code (KC_EQL);
1170 unregister_code (KC_EQL);
1171 unregister_code (KC_RSFT);
1172
1173 ang_tap (KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0);
1174
1175 return false;
1176 }
1177 }
1178
1179 return true;
1180}
1181
1182void qk_ucis_symbol_fallback (void) {
1183 for (uint8_t i = 0; i < qk_ucis_state.count - 1; i++) {
1184 uint8_t code;
1185
1186 if ((qk_ucis_state.codes[i] >= M(A_1)) && (qk_ucis_state.codes[i] <= M(A_0)))
1187 code = qk_ucis_state.codes[i] - M(A_1) + KC_1;
1188 else
1189 code = qk_ucis_state.codes[i];
1190 register_code(code);
1191 unregister_code(code);
1192 wait_ms (10);
1193 }
1194}