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