2 * algernon's ErgoDox EZ layout, please see the readme.md file!
\r
8 #include "action_layer.h"
\r
9 #include "action_util.h"
\r
10 #include "mousekey.h"
\r
12 #include "keymap_plover.h"
\r
13 #include "eeconfig.h"
\r
35 // Buttons that do extra stuff
\r
41 // Function / number keys
\r
54 // Application select keys
\r
57 APP_TERM, // Terminal
\r
61 // Diagonal mouse movement
\r
67 // Hungarian layer keys
\r
78 // One-handed layout specials
\r
97 /* Custom keycodes */
\r
105 /* States & timers */
\r
107 uint16_t gui_timer = 0;
\r
109 uint16_t kf_timers[12];
\r
111 uint16_t oh_base_timer = 0;
\r
112 uint16_t oh_bsspc_timer = 0;
\r
113 uint16_t oh_entsft_timer = 0;
\r
115 #define OH_BLINK_INTERVAL 500
\r
117 uint8_t oh_left_blink = 0;
\r
118 uint16_t oh_left_blink_timer = 0;
\r
119 uint8_t oh_right_blink = 0;
\r
120 uint16_t oh_right_blink_timer = 0;
\r
122 #if KEYLOGGER_ENABLE
\r
123 bool log_enable = false;
\r
126 bool time_travel = false;
\r
130 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
\r
132 /* Keymap 0: Base Layer
\r
134 * ,-----------------------------------------------------. ,-----------------------------------------------------.
\r
135 * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 |
\r
136 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
\r
137 * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ |
\r
138 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
139 * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow |
\r
140 * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------|
\r
141 * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop |
\r
142 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
\r
143 * | | | | | : | | - | | | | |
\r
144 * `-----------------------------------' `-----------------------------------'
\r
145 * ,-------------. ,-------------.
\r
146 * | LAlt | GUI | | MDIA | 1HND |
\r
147 * ,------|------|------| |------+------+------.
\r
148 * | | | Ctrl | | LEAD | | |
\r
149 * |Backsp|LShift|------| |------| Enter| Space|
\r
150 * | | | ESC | | HUN | | |
\r
151 * `--------------------' `--------------------'
\r
155 KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
\r
156 ,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
\r
157 ,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
\r
158 ,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
\r
159 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
\r
163 ,KC_BSPC,F(F_SFT),M(A_ESC)
\r
166 ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
\r
167 ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS
\r
168 ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL
\r
169 ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP
\r
170 ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
172 ,OSL(NMDIA),M(OH_LEFT)
\r
174 ,F(F_HUN) ,KC_ENT ,KC_SPC
\r
177 /* Keymap 1: Adore layer
\r
179 * ,-----------------------------------------------------. ,-----------------------------------------------------.
\r
180 * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 |
\r
181 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
\r
182 * | Next/Prev | , | . | L | W | M | [ | | ] | F | H | C | P | Y | \ |
\r
183 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
184 * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = / Arrow |
\r
185 * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------|
\r
186 * | Play/Pause| / | Z | ' | K | X | | | | B | G | V | J | Q | Stop |
\r
187 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
\r
188 * | | | | | : | | - | | | | |
\r
189 * `-----------------------------------' `-----------------------------------'
\r
190 * ,-------------. ,-------------.
\r
191 * | LAlt | GUI | | MDIA | 1HND |
\r
192 * ,------|------|------| |------+------+------.
\r
193 * | | | Ctrl | | LEAD | | |
\r
194 * |Backsp|LShift|------| |------| Enter| Space|
\r
195 * | | | ESC | | HUN | | |
\r
196 * `--------------------' `--------------------'
\r
200 KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
\r
201 ,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC
\r
202 ,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U
\r
203 ,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN
\r
204 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
\r
208 ,KC_BSPC,F(F_SFT),M(A_ESC)
\r
211 ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
\r
212 ,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS
\r
213 ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL
\r
214 ,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP
\r
215 ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
217 ,OSL(NMDIA),M(OH_LEFT)
\r
219 ,F(F_HUN) ,KC_ENT ,KC_SPC
\r
222 /* Keymap 2: Arrow layer
\r
224 * ,-----------------------------------------------------. ,-----------------------------------------------------.
\r
225 * | | | | | | | | | | | | | | | |
\r
226 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
\r
227 * | | | | | | | | | | | Home | Up | End | | |
\r
228 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
229 * | | | | | | |------| |------| | Left | Down | Rght | | |
\r
230 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
231 * | | | | | | | | | | | | | | | |
\r
232 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
\r
233 * | | | | | | | | | | | |
\r
234 * `----------------------------------' `----------------------------------'
\r
235 * ,-------------. ,-------------.
\r
237 * ,------|------|------| |------+------+------.
\r
239 * | | |------| |------| PgUp | PgDn |
\r
241 * `--------------------' `--------------------'
\r
246 KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
247 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
248 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
249 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
250 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
254 ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
257 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
258 ,KC_TRNS ,KC_TRNS ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS
\r
259 ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS
\r
260 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
261 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
265 ,KC_TRNS ,KC_PGUP ,KC_PGDN
\r
268 /* Keymap 3: Application select layer
\r
270 * ,-----------------------------------------------------. ,-----------------------------------------------------.
\r
271 * | |Music |Slack |Emacs |Term |Chrome| | | | | | | | | |
\r
272 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
\r
273 * | | | | | | | | | | | | | | | |
\r
274 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
275 * | | | | | | |------| |------| | | | | | |
\r
276 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
277 * | | | | | | | | | | | | | | | |
\r
278 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
\r
279 * | | | | | | | | | | | |
\r
280 * `----------------------------------' `----------------------------------'
\r
281 * ,-------------. ,-------------.
\r
283 * ,------|------|------| |------+------+------.
\r
285 * | | |------| |------| | |
\r
287 * `--------------------' `--------------------'
\r
292 KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS
\r
293 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
294 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
295 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
296 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
300 ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
303 ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS
\r
304 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
305 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
306 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
307 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
311 ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
315 /* Keymap 4: Hungarian Layer
\r
317 * ,-----------------------------------------------------. ,-----------------------------------------------------.
\r
318 * | | | | | | | | | | | | | | | |
\r
319 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
\r
320 * | | | Ő | | Ű | | | | | | | | | | |
\r
321 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
322 * | | Á | Ó | É | Ú | Í |------| |------| | | | | | |
\r
323 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
324 * | | | Ö | | Ü | | | | | | | | | | |
\r
325 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
\r
326 * | | | | | | | | | | | |
\r
327 * `----------------------------------' `----------------------------------'
\r
328 * ,-------------. ,-------------.
\r
330 * ,------|------|------| |------+------+------.
\r
332 * | | |------| |------| | |
\r
333 * | | | | | BASE | | |
\r
334 * `--------------------' `--------------------'
\r
339 KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
340 ,KC_NO ,KC_NO ,M(HU_OEE),KC_NO ,M(HU_UEE),KC_NO ,KC_NO
\r
341 ,KC_NO ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II)
\r
342 ,KC_NO ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,KC_NO ,KC_NO
\r
343 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
347 ,KC_NO ,KC_TRNS ,KC_TRNS
\r
350 ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
351 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
352 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
353 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
354 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
358 ,F(F_BSE),KC_TRNS ,KC_TRNS
\r
361 /* Keymap 5: Navigation & Media layer
\r
363 * ,-----------------------------------------------------. ,-----------------------------------------------------.
\r
364 * | MS Slow | | | | | |ScrLCK| |ScrLCK| | | | | | |
\r
365 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
\r
366 * | MS Normal | | Home | Up | PgUp | | | |Scroll| |MsUpL | MsUp |MsUpR | |PrintScreen|
\r
367 * |-----------+------+------+------+------+------| | | Up |------+------+------+------+------+-----------|
\r
368 * | MS Fast | | Left | Down | Right| |------| |------| |MsLeft| MsDn |MsRght| | |
\r
369 * |-----------+------+------+------+------+------| | |Scroll|------+------+------+------+------+-----------|
\r
370 * | Play/Pause| | End | Down | PgDn | | | | Down | |MsDnL | MsDn |MsDnR | | Stop |
\r
371 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
\r
372 * | | | | | | | | | | | |
\r
373 * `----------------------------------' `----------------------------------'
\r
374 * ,-------------. ,-------------.
\r
375 * | Mute | VlUp | | BASE | MClk |
\r
376 * ,------|------|------| |------+------+------.
\r
377 * | | | VlDn | | Prev |Left |Right |
\r
378 * | SPC | Enter|------| |------| Click| Click|
\r
379 * | | | ESC | | Next | | |
\r
380 * `--------------------' `--------------------'
\r
384 KC_ACL0 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L)
\r
385 ,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO
\r
386 ,KC_ACL2 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO
\r
387 ,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO
\r
388 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
391 ,KC_SPC,KC_ENTER,M(A_ESC)
\r
394 ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
395 ,KC_WH_U ,KC_NO ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO ,KC_PSCR
\r
396 ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO
\r
397 ,KC_WH_D ,KC_NO ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO ,KC_MSTP
\r
398 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
400 ,KC_TRNS ,KC_MS_BTN3
\r
402 ,KC_MNXT ,KC_BTN1 ,KC_BTN2
\r
405 /* Keymap 6: One-handed, left side
\r
407 * ,-----------------------------------------------------.
\r
408 * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |A BSE|
\r
409 * |-----------+------+------+------+------+-------------|
\r
410 * | Tab | ' | , | . | P | Y | [ |
\r
411 * |-----------+------+------+------+------+------| |
\r
412 * | - | A | O | E | U | I |------|
\r
413 * |-----------+------+------+------+------+------| ( |
\r
414 * | Play/Pause| ; | Q | J | K | X | |
\r
415 * `-----------+------+------+------+------+-------------'
\r
416 * | Home | End | Down | Up | ESC |
\r
417 * `-----------------------------------'
\r
420 * ,------|------|------|
\r
421 * |BackSp|LShift| Ctrl |
\r
423 * |Space |Enter |OTHER |
\r
424 * `--------------------'
\r
428 KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,M(OH_BASE)
\r
429 ,KC_TAB ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
\r
430 ,KC_MINS ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
\r
431 ,KC_MPLY ,KC_SCLN ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
\r
432 ,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_ESC)
\r
436 ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_RIGHT)
\r
439 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
440 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
441 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
442 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
443 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
447 ,KC_NO ,KC_NO ,KC_NO
\r
450 /* Keymap 7: One-handed, right side
\r
452 * ,-----------------------------------------------------.
\r
453 * | = F11 | 0 F10| 9 F9 | 8 F8 | 7 F7 | 6 F6 |A BSE|
\r
454 * |-----------+------+------+------+------+-------------|
\r
455 * | / | L | R | C | G | F | ] |
\r
456 * |-----------+------+------+------+------+------| |
\r
457 * | \ | S | N | T | H | D |------|
\r
458 * |-----------+------+------+------+------+------| ) |
\r
459 * | Stop | Z | V | W | M | B | |
\r
460 * `-----------+------+------+------+------+-------------'
\r
461 * | PgDn | PgUp | Right| Left | ESC |
\r
462 * `-----------------------------------'
\r
465 * ,------|------|------|
\r
466 * |BackSp|LShift| Ctrl |
\r
468 * |Space |Enter |OTHER |
\r
469 * `--------------------'
\r
473 M(KF_11) ,M(KF_10) ,M(KF_9) ,M(KF_8) ,M(KF_7) ,M(KF_6) ,M(OH_BASE)
\r
474 ,KC_SLSH ,KC_L ,KC_R ,KC_C ,KC_G ,KC_F ,KC_RBRC
\r
475 ,KC_BSLS ,KC_S ,KC_N ,KC_T ,KC_H ,KC_D
\r
476 ,KC_MSTP ,KC_Z ,KC_V ,KC_W ,KC_M ,KC_B ,KC_RPRN
\r
477 ,KC_PGDN ,KC_PGUP ,KC_RGHT ,KC_LEFT ,M(A_ESC)
\r
481 ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_LEFT)
\r
484 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
485 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
486 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
487 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
488 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
492 ,KC_NO ,KC_NO ,KC_NO
\r
495 /* Keymap 8: Steno for Plover
\r
497 * ,--------------------------------------------------. ,--------------------------------------------------.
\r
498 * | | | | | | | BASE | | | | | | | | |
\r
499 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
\r
500 * | | # | # | # | # | # | # | | # | # | # | # | # | # | # |
\r
501 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
\r
502 * | | | T | P | H | |------| |------| | F | P | L | T | D |
\r
503 * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+------+--------|
\r
504 * | | | K | W | R | | | | | | R | B | G | S | Z |
\r
505 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
\r
506 * | | | | | | | | | | | |
\r
507 * `----------------------------------' `----------------------------------'
\r
508 * ,-------------. ,-------------.
\r
510 * ,------|------|------| |------+------+------.
\r
512 * | A | O |------| |------| E | U |
\r
514 * `--------------------' `--------------------'
\r
519 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR),
\r
520 KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
\r
521 KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
\r
522 KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
\r
523 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
\r
529 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
\r
530 PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
\r
531 PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
\r
532 PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
\r
533 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
\r
541 const uint16_t PROGMEM fn_actions[] = {
\r
542 [F_BSE] = ACTION_LAYER_CLEAR(ON_PRESS)
\r
543 ,[F_HUN] = ACTION_LAYER_INVERT(HUN, ON_PRESS)
\r
544 ,[F_GUI] = ACTION_MACRO_TAP(A_GUI)
\r
545 ,[F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT)
\r
546 ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT)
\r
547 ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL)
\r
550 void toggle_steno(int pressed)
\r
552 uint8_t layer = biton32(layer_state);
\r
555 if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR);
\r
557 register_code(PV_LP);
\r
558 register_code(PV_LH);
\r
559 register_code(PV_LR);
\r
560 register_code(PV_O);
\r
561 register_code(PV_RL);
\r
562 register_code(PV_RG);
\r
564 unregister_code(PV_LP);
\r
565 unregister_code(PV_LH);
\r
566 unregister_code(PV_LR);
\r
567 unregister_code(PV_O);
\r
568 unregister_code(PV_RL);
\r
569 unregister_code(PV_RG);
\r
573 macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char)
\r
575 uint8_t need_shift = 0;
\r
576 uint8_t hold_shift = 0;
\r
578 if (!record->event.pressed)
\r
583 if (keyboard_report->mods & MOD_BIT (KC_LSFT)) {
\r
586 unregister_code (KC_LSFT);
\r
588 if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) {
\r
591 unregister_code (KC_LSFT);
\r
594 clear_oneshot_mods ();
\r
596 register_code (KC_RALT);
\r
597 unregister_code (KC_RALT);
\r
598 if (accent == (KC_DQT)) {
\r
599 register_code (KC_RSFT);
\r
601 register_code (accent);
\r
602 unregister_code (accent);
\r
603 if (need_shift && accent != (KC_DQT)) {
\r
604 register_code (KC_RSFT);
\r
605 } else if (accent == (KC_DQT) && !need_shift) {
\r
606 unregister_code (KC_RSFT);
\r
608 register_code (hun_char);
\r
609 unregister_code (hun_char);
\r
610 if (need_shift || accent == (KC_DQT))
\r
611 unregister_code (KC_RSFT);
\r
613 register_code (KC_LSFT);
\r
618 void ang_handle_kf (keyrecord_t *record, uint8_t id)
\r
620 uint8_t code = id - KF_1;
\r
622 if (record->event.pressed) {
\r
623 kf_timers[code] = timer_read ();
\r
627 if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) {
\r
637 register_code (kc);
\r
638 unregister_code (kc);
\r
642 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
\r
646 if (record->event.pressed) {
\r
647 if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) {
\r
648 clear_oneshot_mods ();
\r
650 register_code (KC_ESC);
\r
654 unregister_code (KC_ESC);
\r
659 if (record->event.pressed) {
\r
660 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
\r
661 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
\r
662 int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out());
\r
665 clear_oneshot_mods ();
\r
666 unregister_code (KC_LSFT);
\r
668 register_code (KC_MPRV);
\r
669 unregister_code (KC_MPRV);
\r
672 register_code (KC_LSFT);
\r
674 return MACRO (T(MNXT), END);
\r
679 /* Hungarian layer */
\r
681 return ang_do_hun (record, KC_QUOT, KC_A);
\r
683 return ang_do_hun (record, KC_QUOT, KC_O);
\r
685 return ang_do_hun (record, KC_QUOT, KC_E);
\r
687 return ang_do_hun (record, KC_QUOT, KC_U);
\r
689 return ang_do_hun (record, KC_QUOT, KC_I);
\r
691 return ang_do_hun (record, KC_DQT, KC_O);
\r
693 return ang_do_hun (record, KC_DQT, KC_U);
\r
695 return ang_do_hun (record, KC_EQL, KC_O);
\r
697 return ang_do_hun (record, KC_EQL, KC_U);
\r
699 /* Mouse movement */
\r
701 if (record->event.pressed) {
\r
702 mousekey_on(KC_MS_UP);
\r
703 mousekey_on(KC_MS_LEFT);
\r
705 mousekey_off(KC_MS_UP);
\r
706 mousekey_off(KC_MS_LEFT);
\r
712 if (record->event.pressed) {
\r
713 mousekey_on(KC_MS_UP);
\r
714 mousekey_on(KC_MS_RIGHT);
\r
716 mousekey_off(KC_MS_UP);
\r
717 mousekey_off(KC_MS_RIGHT);
\r
723 if (record->event.pressed) {
\r
724 mousekey_on(KC_MS_DOWN);
\r
725 mousekey_on(KC_MS_LEFT);
\r
727 mousekey_off(KC_MS_DOWN);
\r
728 mousekey_off(KC_MS_LEFT);
\r
734 if (record->event.pressed) {
\r
735 mousekey_on(KC_MS_DOWN);
\r
736 mousekey_on(KC_MS_RIGHT);
\r
738 mousekey_off(KC_MS_DOWN);
\r
739 mousekey_off(KC_MS_RIGHT);
\r
746 toggle_steno(record->event.pressed);
\r
751 if (record->event.pressed) {
\r
752 register_code (KC_LGUI);
\r
753 if (record->tap.count && !record->tap.interrupted) {
\r
754 if (record->tap.count >= 2) {
\r
755 register_code (KC_W);
\r
757 set_oneshot_layer (APPSEL, ONESHOT_START);
\r
760 record->tap.count = 0;
\r
764 if (record->tap.count >= 2)
\r
766 unregister_code (KC_W);
\r
767 clear_oneshot_layer_state (ONESHOT_PRESSED);
\r
769 gui_timer = timer_read ();
\r
774 return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END);
\r
777 return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(ENT), END);
\r
780 return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END);
\r
783 return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END);
\r
786 return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END);
\r
788 /* Function keys */
\r
789 case KF_1 ... KF_11:
\r
790 ang_handle_kf (record, id);
\r
795 if (record->event.pressed) {
\r
796 oh_base_timer = timer_read ();
\r
798 if (timer_elapsed (oh_base_timer) > TAPPING_TERM) {
\r
801 return MACRO (T(APP), END);
\r
807 if (record->event.pressed) {
\r
808 oh_bsspc_timer = timer_read ();
\r
810 if (timer_elapsed (oh_bsspc_timer) > TAPPING_TERM) {
\r
811 return MACRO (T(BSPC), END);
\r
813 return MACRO (T(SPC), END);
\r
819 if (record->event.pressed) {
\r
820 oh_entsft_timer = timer_read ();
\r
822 if (timer_elapsed (oh_entsft_timer) > TAPPING_TERM) {
\r
823 if (keyboard_report->mods & MOD_BIT(KC_LSFT))
\r
824 unregister_code (KC_LSFT);
\r
826 register_code (KC_LSFT);
\r
828 return MACRO (T(ENT), END);
\r
834 if (record->event.pressed) {
\r
835 layer_move (OHLFT);
\r
837 oh_left_blink_timer = timer_read ();
\r
838 ergodox_right_led_1_on ();
\r
843 if (record->event.pressed) {
\r
844 layer_move (OHRGT);
\r
845 oh_right_blink = 1;
\r
846 oh_right_blink_timer = timer_read ();
\r
847 ergodox_right_led_3_on ();
\r
854 uint8_t is_adore = 0;
\r
856 // Runs just one time when the keyboard initializes.
\r
857 void matrix_init_user(void) {
\r
860 ergodox_led_all_on();
\r
861 for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
\r
862 ergodox_led_all_set (i);
\r
866 for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
\r
867 ergodox_led_all_set (i);
\r
870 ergodox_led_all_off();
\r
872 if (!eeconfig_is_enabled())
\r
874 dl = eeconfig_read_default_layer ();
\r
875 if (dl == (1UL << ADORE))
\r
881 void ang_do_unicode (void) {
\r
882 register_code (KC_RCTL);
\r
883 register_code (KC_RSFT);
\r
884 register_code (KC_U);
\r
885 unregister_code (KC_U);
\r
886 unregister_code (KC_RSFT);
\r
887 unregister_code (KC_RCTL);
\r
891 void ang_tap (uint16_t codes[]) {
\r
892 for (int i = 0; codes[i] != 0; i++) {
\r
893 register_code (codes[i]);
\r
894 unregister_code (codes[i]);
\r
899 #define TAP_ONCE(code) \
\r
900 register_code (code); \
\r
901 unregister_code (code)
\r
903 void ang_tap_dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) {
\r
904 if (state->count == 1) {
\r
905 register_code (KC_RSFT);
\r
906 register_code (KC_SCLN);
\r
907 } else if (state->count == 2) {
\r
908 register_code (KC_SCLN);
\r
912 void ang_tap_dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) {
\r
913 if (state->count == 1) {
\r
914 unregister_code (KC_SCLN);
\r
915 unregister_code (KC_RSFT);
\r
916 } else if (state->count == 2) {
\r
917 unregister_code (KC_SCLN);
\r
921 void ang_tap_dance_mns_finished (qk_tap_dance_state_t *state, void *user_data) {
\r
922 if (state->count == 1) {
\r
923 register_code (KC_MINS);
\r
924 } else if (state->count == 2) {
\r
925 register_code (KC_RSFT);
\r
926 register_code (KC_MINS);
\r
930 void ang_tap_dance_mns_reset (qk_tap_dance_state_t *state, void *user_data) {
\r
931 if (state->count == 1) {
\r
932 unregister_code (KC_MINS);
\r
933 } else if (state->count == 2) {
\r
934 unregister_code (KC_RSFT);
\r
935 unregister_code (KC_MINS);
\r
942 bool finished_once;
\r
945 void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) {
\r
946 td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
\r
948 if (td_ta->finished_once) {
\r
952 if (td_ta->sticky) {
\r
953 td_ta->sticky = false;
\r
954 td_ta->layer_toggle = false;
\r
959 td_ta->finished_once = true;
\r
960 if (state->count == 1 && !state->pressed) {
\r
961 register_code (KC_TAB);
\r
962 td_ta->sticky = false;
\r
963 td_ta->layer_toggle = false;
\r
965 td_ta->layer_toggle = true;
\r
967 td_ta->sticky = (state->count == 2);
\r
971 void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) {
\r
972 td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
\r
974 if (!td_ta->layer_toggle)
\r
975 unregister_code (KC_TAB);
\r
976 if (!td_ta->sticky)
\r
979 td_ta->finished_once = false;
\r
982 const qk_tap_dance_action_t tap_dance_actions[] = {
\r
983 [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_cln_finished, ang_tap_dance_cln_reset)
\r
984 ,[CT_MNS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_mns_finished, ang_tap_dance_mns_reset)
\r
986 .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset },
\r
987 .user_data = (void *)&((td_ta_state_t) { false, false, false })
\r
991 // Runs constantly in the background, in a loop.
\r
992 void matrix_scan_user(void) {
\r
993 uint8_t layer = biton32(layer_state);
\r
995 if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM)
\r
996 unregister_code (KC_LGUI);
\r
998 if (layer != OHLFT)
\r
1000 if (layer != OHRGT)
\r
1001 oh_right_blink = 0;
\r
1003 if (layer == HUN) {
\r
1004 ergodox_right_led_2_on();
\r
1005 ergodox_right_led_3_on();
\r
1006 } else if (layer == NMDIA) {
\r
1007 ergodox_right_led_1_on();
\r
1008 ergodox_right_led_2_on();
\r
1009 } else if (layer == PLVR) {
\r
1010 ergodox_right_led_1_on ();
\r
1011 ergodox_right_led_2_on ();
\r
1012 ergodox_right_led_3_on ();
\r
1013 } else if (layer == ADORE) {
\r
1014 ergodox_right_led_1_on ();
\r
1015 ergodox_right_led_2_on ();
\r
1016 ergodox_right_led_3_on ();
\r
1018 ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
\r
1021 if (layer == OHLFT || layer == OHRGT) {
\r
1022 ergodox_right_led_2_on();
\r
1024 if (oh_left_blink) {
\r
1025 if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL) {
\r
1026 if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) == 0)
\r
1027 ergodox_right_led_1_off ();
\r
1029 if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL * 2) {
\r
1030 ergodox_right_led_1_on ();
\r
1031 oh_left_blink_timer = timer_read ();
\r
1035 if (oh_right_blink) {
\r
1036 if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL) {
\r
1037 if ((keyboard_report->mods & MOD_BIT(KC_LCTRL)) == 0)
\r
1038 ergodox_right_led_3_off ();
\r
1040 if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL * 2) {
\r
1041 ergodox_right_led_3_on ();
\r
1042 oh_right_blink_timer = timer_read ();
\r
1047 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
\r
1048 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
\r
1049 ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
\r
1050 ergodox_right_led_1_on ();
\r
1052 ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
\r
1053 if (layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE)
\r
1054 ergodox_right_led_1_off ();
\r
1057 if (keyboard_report->mods & MOD_BIT(KC_LALT) ||
\r
1058 ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) {
\r
1059 ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
\r
1060 ergodox_right_led_2_on ();
\r
1062 ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
\r
1063 if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE)
\r
1064 ergodox_right_led_2_off ();
\r
1067 if (keyboard_report->mods & MOD_BIT(KC_LCTRL) ||
\r
1068 ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) {
\r
1069 ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
\r
1070 ergodox_right_led_3_on ();
\r
1072 ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
\r
1073 if (layer != OHRGT && layer != HUN && layer != PLVR && layer != ADORE)
\r
1074 ergodox_right_led_3_off ();
\r
1077 LEADER_DICTIONARY() {
\r
1081 #if KEYLOGGER_ENABLE
\r
1082 SEQ_ONE_KEY (KC_D) {
\r
1083 ergodox_led_all_on();
\r
1085 ergodox_led_all_off();
\r
1086 log_enable = !log_enable;
\r
1090 SEQ_ONE_KEY (KC_T) {
\r
1091 time_travel = !time_travel;
\r
1094 SEQ_ONE_KEY (KC_U) {
\r
1095 ang_do_unicode ();
\r
1098 SEQ_ONE_KEY (KC_V) {
\r
1099 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")");
\r
1102 SEQ_ONE_KEY (KC_L) {
\r
1104 ang_do_unicode ();
\r
1106 uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0};
\r
1110 SEQ_ONE_KEY (KC_Y) {
\r
1111 uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0};
\r
1115 SEQ_ONE_KEY (KC_S) {
\r
1116 ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
\r
1117 TAP_ONCE (KC_BSLS);
\r
1118 register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
\r
1119 ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC);
\r
1120 register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT);
\r
1121 TAP_ONCE (KC_SLSH);
\r
1122 ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
\r
1125 SEQ_TWO_KEYS (KC_W, KC_M) {
\r
1126 register_code (KC_LALT);
\r
1127 register_code (KC_F2);
\r
1128 unregister_code (KC_F2);
\r
1129 unregister_code (KC_LALT);
\r
1133 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};
\r
1135 register_code (KC_LGUI);
\r
1136 register_code (KC_UP);
\r
1137 unregister_code (KC_UP);
\r
1138 unregister_code (KC_LGUI);
\r
1141 SEQ_ONE_KEY (KC_A) {
\r
1142 if (is_adore == 0) {
\r
1143 default_layer_and (0);
\r
1144 default_layer_or ((1UL << ADORE));
\r
1145 eeconfig_update_default_layer ((1UL << ADORE));
\r
1148 ergodox_led_all_off ();
\r
1149 ergodox_right_led_3_on ();
\r
1151 ergodox_right_led_2_on ();
\r
1153 ergodox_right_led_3_off ();
\r
1154 ergodox_right_led_1_on ();
\r
1156 ergodox_right_led_2_off ();
\r
1158 ergodox_right_led_1_off ();
\r
1161 default_layer_and (0);
\r
1162 default_layer_or (1UL << BASE);
\r
1163 eeconfig_update_default_layer ((1UL << BASE));
\r
1165 ergodox_led_all_off ();
\r
1166 ergodox_right_led_1_on ();
\r
1168 ergodox_right_led_2_on ();
\r
1170 ergodox_right_led_1_off ();
\r
1171 ergodox_right_led_3_on ();
\r
1173 ergodox_right_led_2_off ();
\r
1175 ergodox_right_led_3_off ();
\r
1181 static uint16_t last4[4];
\r
1183 bool process_record_user (uint16_t keycode, keyrecord_t *record) {
\r
1184 #if KEYLOGGER_ENABLE
\r
1185 uint8_t layer = biton32(layer_state);
\r
1187 if (log_enable && layer == BASE) {
\r
1188 xprintf ("KL: col=%d, row=%d\n", record->event.key.col,
\r
1189 record->event.key.row);
\r
1193 if (time_travel && !record->event.pressed) {
\r
1196 // shift cache one to the left
\r
1197 for (p = 0; p < 3; p++) {
\r
1198 last4[p] = last4[p + 1];
\r
1200 last4[3] = keycode;
\r
1202 if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) {
\r
1203 uint16_t codes[] = {KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0};
\r
1205 register_code (KC_RSFT);
\r
1206 register_code (KC_EQL);
\r
1207 unregister_code (KC_EQL);
\r
1208 unregister_code (KC_RSFT);
\r
1210 uint16_t codes2[] = {KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0};
\r