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
34 // Buttons that do extra stuff
\r
40 // Function / number keys
\r
53 // Application select keys
\r
56 APP_TERM, // Terminal
\r
60 // Diagonal mouse movement
\r
66 // Hungarian layer keys
\r
77 // One-handed layout specials
\r
96 /* Custom keycodes */
\r
104 /* States & timers */
\r
106 uint16_t gui_timer = 0;
\r
108 uint16_t kf_timers[12];
\r
110 uint16_t oh_base_timer = 0;
\r
111 uint16_t oh_bsspc_timer = 0;
\r
112 uint16_t oh_entsft_timer = 0;
\r
114 #define OH_BLINK_INTERVAL 500
\r
116 uint8_t oh_left_blink = 0;
\r
117 uint16_t oh_left_blink_timer = 0;
\r
118 uint8_t oh_right_blink = 0;
\r
119 uint16_t oh_right_blink_timer = 0;
\r
121 #if KEYLOGGER_ENABLE
\r
122 bool log_enable = false;
\r
125 bool time_travel = false;
\r
129 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
\r
131 /* Keymap 0: Base Layer
\r
133 * ,-----------------------------------------------------. ,-----------------------------------------------------.
\r
134 * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 |
\r
135 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
\r
136 * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ |
\r
137 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
138 * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow |
\r
139 * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------|
\r
140 * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop |
\r
141 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
\r
142 * | | | | | : | | - | | | | |
\r
143 * `-----------------------------------' `-----------------------------------'
\r
144 * ,-------------. ,-------------.
\r
145 * | LAlt | GUI | | MDIA | 1HND |
\r
146 * ,------|------|------| |------+------+------.
\r
147 * | | | Ctrl | | LEAD | | |
\r
148 * |Backsp|LShift|------| |------| Enter| Space|
\r
149 * | | | ESC | | HUN | | |
\r
150 * `--------------------' `--------------------'
\r
154 KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
\r
155 ,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
\r
156 ,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
\r
157 ,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
\r
158 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
\r
162 ,KC_BSPC,F(F_SFT),M(A_ESC)
\r
165 ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
\r
166 ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS
\r
167 ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL
\r
168 ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP
\r
169 ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
171 ,OSL(NMDIA),M(OH_LEFT)
\r
173 ,F(F_HUN) ,KC_ENT ,KC_SPC
\r
176 /* Keymap 1: Adore layer
\r
178 * ,-----------------------------------------------------. ,-----------------------------------------------------.
\r
179 * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | Apps | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 |
\r
180 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
\r
181 * | Next/Prev | , | . | L | W | M | [ | | ] | F | H | C | P | Y | \ |
\r
182 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
183 * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = / Arrow |
\r
184 * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------|
\r
185 * | Play/Pause| / | Z | ' | K | X | | | | B | G | V | J | Q | Stop |
\r
186 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
\r
187 * | | | | | : | | - | | | | |
\r
188 * `-----------------------------------' `-----------------------------------'
\r
189 * ,-------------. ,-------------.
\r
190 * | LAlt | GUI | | MDIA | 1HND |
\r
191 * ,------|------|------| |------+------+------.
\r
192 * | | | Ctrl | | LEAD | | |
\r
193 * |Backsp|LShift|------| |------| Enter| Space|
\r
194 * | | | ESC | | HUN | | |
\r
195 * `--------------------' `--------------------'
\r
199 KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
\r
200 ,M(A_MPN) ,KC_COMM ,KC_DOT ,KC_L ,KC_W ,KC_M ,KC_LBRC
\r
201 ,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U
\r
202 ,KC_MPLY ,KC_SLSH ,KC_Z ,KC_QUOT,KC_K ,KC_X ,KC_LPRN
\r
203 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
\r
207 ,KC_BSPC,F(F_SFT),M(A_ESC)
\r
210 ,KC_APP ,M(KF_6),M(KF_7) ,M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
\r
211 ,KC_RBRC ,KC_F ,KC_H ,KC_C ,KC_P ,KC_Y ,KC_BSLS
\r
212 ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL
\r
213 ,KC_RPRN ,KC_B ,KC_G ,KC_V ,KC_J ,KC_Q ,KC_MSTP
\r
214 ,TD(CT_MNS),KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
216 ,OSL(NMDIA),M(OH_LEFT)
\r
218 ,F(F_HUN) ,KC_ENT ,KC_SPC
\r
221 /* Keymap 2: Arrow layer
\r
223 * ,-----------------------------------------------------. ,-----------------------------------------------------.
\r
224 * | | | | | | | | | | | | | | | |
\r
225 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
\r
226 * | | | | | | | | | | | Home | Up | End | | |
\r
227 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
228 * | | | | | | |------| |------| | Left | Down | Rght | | |
\r
229 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
230 * | | | | | | | | | | | | | | | |
\r
231 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
\r
232 * | | | | | | | | | | | |
\r
233 * `----------------------------------' `----------------------------------'
\r
234 * ,-------------. ,-------------.
\r
236 * ,------|------|------| |------+------+------.
\r
238 * | | |------| |------| PgUp | PgDn |
\r
240 * `--------------------' `--------------------'
\r
245 KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\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
\r
248 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
249 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
253 ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
256 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
257 ,KC_TRNS ,KC_TRNS ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS
\r
258 ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS
\r
259 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
260 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
264 ,KC_TRNS ,KC_PGUP ,KC_PGDN
\r
267 /* Keymap 3: Application select layer
\r
269 * ,-----------------------------------------------------. ,-----------------------------------------------------.
\r
270 * | |Music |Slack |Emacs |Term |Chrome| | | | | | | | | |
\r
271 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
\r
272 * | | | | | | | | | | | | | | | |
\r
273 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
274 * | | | | | | |------| |------| | | | | | |
\r
275 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
276 * | | | | | | | | | | | | | | | |
\r
277 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
\r
278 * | | | | | | | | | | | |
\r
279 * `----------------------------------' `----------------------------------'
\r
280 * ,-------------. ,-------------.
\r
282 * ,------|------|------| |------+------+------.
\r
284 * | | |------| |------| | |
\r
286 * `--------------------' `--------------------'
\r
291 KC_TRNS ,M(APP_MSIC),M(APP_SLK),M(APP_EMCS),M(APP_TERM),M(APP_CHRM),KC_TRNS
\r
292 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
293 ,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 ,KC_TRNS
\r
295 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
299 ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
302 ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_TRNS
\r
303 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
304 ,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 ,KC_TRNS
\r
306 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
310 ,KC_TRNS ,KC_TRNS ,KC_TRNS
\r
314 /* Keymap 4: Hungarian Layer
\r
316 * ,-----------------------------------------------------. ,-----------------------------------------------------.
\r
317 * | | | | | | | | | | | | | | | |
\r
318 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
\r
319 * | | | Ő | | Ű | | | | | | | | | | |
\r
320 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
321 * | | Á | Ó | É | Ú | Í |------| |------| | | | | | |
\r
322 * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
\r
323 * | | | Ö | | Ü | | | | | | | | | | |
\r
324 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
\r
325 * | | | | | | | | | | | |
\r
326 * `----------------------------------' `----------------------------------'
\r
327 * ,-------------. ,-------------.
\r
329 * ,------|------|------| |------+------+------.
\r
331 * | | |------| |------| | |
\r
332 * | | | | | BASE | | |
\r
333 * `--------------------' `--------------------'
\r
338 KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
339 ,KC_NO ,KC_NO ,M(HU_OEE),KC_NO ,M(HU_UEE),KC_NO ,KC_NO
\r
340 ,KC_NO ,M(HU_AA),M(HU_OO) ,M(HU_EE),M(HU_UU) ,M(HU_II)
\r
341 ,KC_NO ,KC_NO ,M(HU_OE) ,KC_NO ,M(HU_UE) ,KC_NO ,KC_NO
\r
342 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
346 ,KC_NO ,KC_TRNS ,KC_TRNS
\r
349 ,KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
350 ,KC_NO ,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
\r
352 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
353 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
357 ,F(F_BSE),KC_TRNS ,KC_TRNS
\r
360 /* Keymap 5: Navigation & Media layer
\r
362 * ,-----------------------------------------------------. ,-----------------------------------------------------.
\r
363 * | MS Slow | | | | | |ScrLCK| |ScrLCK| | | | | | |
\r
364 * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
\r
365 * | MS Normal | | Home | Up | PgUp | | | |Scroll| |MsUpL | MsUp |MsUpR | |PrintScreen|
\r
366 * |-----------+------+------+------+------+------| | | Up |------+------+------+------+------+-----------|
\r
367 * | MS Fast | | Left | Down | Right| |------| |------| |MsLeft| MsDn |MsRght| | |
\r
368 * |-----------+------+------+------+------+------| | |Scroll|------+------+------+------+------+-----------|
\r
369 * | Play/Pause| | End | Down | PgDn | | | | Down | |MsDnL | MsDn |MsDnR | | Stop |
\r
370 * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
\r
371 * | | | | | | | | | | | |
\r
372 * `----------------------------------' `----------------------------------'
\r
373 * ,-------------. ,-------------.
\r
374 * | Mute | VlUp | | BASE | MClk |
\r
375 * ,------|------|------| |------+------+------.
\r
376 * | | | VlDn | | Prev |Left |Right |
\r
377 * | SPC | Enter|------| |------| Click| Click|
\r
378 * | | | ESC | | Next | | |
\r
379 * `--------------------' `--------------------'
\r
383 KC_ACL0 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L)
\r
384 ,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO
\r
385 ,KC_ACL2 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO
\r
386 ,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO
\r
387 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
390 ,KC_SPC,KC_ENTER,M(A_ESC)
\r
393 ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
394 ,KC_WH_U ,KC_NO ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO ,KC_PSCR
\r
395 ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO
\r
396 ,KC_WH_D ,KC_NO ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO ,KC_MSTP
\r
397 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
399 ,KC_TRNS ,KC_MS_BTN3
\r
401 ,KC_MNXT ,KC_BTN1 ,KC_BTN2
\r
404 /* Keymap 6: One-handed, left side
\r
406 * ,-----------------------------------------------------.
\r
407 * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |A BSE|
\r
408 * |-----------+------+------+------+------+-------------|
\r
409 * | Tab | ' | , | . | P | Y | [ |
\r
410 * |-----------+------+------+------+------+------| |
\r
411 * | - | A | O | E | U | I |------|
\r
412 * |-----------+------+------+------+------+------| ( |
\r
413 * | Play/Pause| ; | Q | J | K | X | |
\r
414 * `-----------+------+------+------+------+-------------'
\r
415 * | Home | End | Down | Up | ESC |
\r
416 * `-----------------------------------'
\r
419 * ,------|------|------|
\r
420 * |BackSp|LShift| Ctrl |
\r
422 * |Space |Enter |OTHER |
\r
423 * `--------------------'
\r
427 KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,M(OH_BASE)
\r
428 ,KC_TAB ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
\r
429 ,KC_MINS ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
\r
430 ,KC_MPLY ,KC_SCLN ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
\r
431 ,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_ESC)
\r
435 ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_RIGHT)
\r
438 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\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
\r
441 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
442 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
446 ,KC_NO ,KC_NO ,KC_NO
\r
449 /* Keymap 7: One-handed, right side
\r
451 * ,-----------------------------------------------------.
\r
452 * | = F11 | 0 F10| 9 F9 | 8 F8 | 7 F7 | 6 F6 |A BSE|
\r
453 * |-----------+------+------+------+------+-------------|
\r
454 * | / | L | R | C | G | F | ] |
\r
455 * |-----------+------+------+------+------+------| |
\r
456 * | \ | S | N | T | H | D |------|
\r
457 * |-----------+------+------+------+------+------| ) |
\r
458 * | Stop | Z | V | W | M | B | |
\r
459 * `-----------+------+------+------+------+-------------'
\r
460 * | PgDn | PgUp | Right| Left | ESC |
\r
461 * `-----------------------------------'
\r
464 * ,------|------|------|
\r
465 * |BackSp|LShift| Ctrl |
\r
467 * |Space |Enter |OTHER |
\r
468 * `--------------------'
\r
472 M(KF_11) ,M(KF_10) ,M(KF_9) ,M(KF_8) ,M(KF_7) ,M(KF_6) ,M(OH_BASE)
\r
473 ,KC_SLSH ,KC_L ,KC_R ,KC_C ,KC_G ,KC_F ,KC_RBRC
\r
474 ,KC_BSLS ,KC_S ,KC_N ,KC_T ,KC_H ,KC_D
\r
475 ,KC_MSTP ,KC_Z ,KC_V ,KC_W ,KC_M ,KC_B ,KC_RPRN
\r
476 ,KC_PGDN ,KC_PGUP ,KC_RGHT ,KC_LEFT ,M(A_ESC)
\r
480 ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_LEFT)
\r
483 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\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
\r
486 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
487 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
\r
491 ,KC_NO ,KC_NO ,KC_NO
\r
494 /* Keymap 8: Steno for Plover
\r
496 * ,--------------------------------------------------. ,--------------------------------------------------.
\r
497 * | | | | | | | BASE | | | | | | | | |
\r
498 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
\r
499 * | | # | # | # | # | # | # | | # | # | # | # | # | # | # |
\r
500 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
\r
501 * | | | T | P | H | |------| |------| | F | P | L | T | D |
\r
502 * |--------+ S +------+------+------+ * | * | | * | * +------+------+------+------+--------|
\r
503 * | | | K | W | R | | | | | | R | B | G | S | Z |
\r
504 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
\r
505 * | | | | | | | | | | | |
\r
506 * `----------------------------------' `----------------------------------'
\r
507 * ,-------------. ,-------------.
\r
509 * ,------|------|------| |------+------+------.
\r
511 * | A | O |------| |------| E | U |
\r
513 * `--------------------' `--------------------'
\r
518 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR),
\r
519 KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
\r
520 KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
\r
521 KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
\r
522 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
\r
528 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
\r
529 PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
\r
530 PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
\r
531 PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
\r
532 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
\r
540 const uint16_t PROGMEM fn_actions[] = {
\r
541 [F_BSE] = ACTION_LAYER_CLEAR(ON_PRESS)
\r
542 ,[F_HUN] = ACTION_LAYER_INVERT(HUN, ON_PRESS)
\r
543 ,[F_GUI] = ACTION_MACRO_TAP(A_GUI)
\r
544 ,[F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT)
\r
545 ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT)
\r
546 ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL)
\r
549 void toggle_steno(int pressed)
\r
551 uint8_t layer = biton32(layer_state);
\r
554 if (layer != PLVR) layer_on(PLVR); else layer_off(PLVR);
\r
556 register_code(PV_LP);
\r
557 register_code(PV_LH);
\r
558 register_code(PV_LR);
\r
559 register_code(PV_O);
\r
560 register_code(PV_RL);
\r
561 register_code(PV_RG);
\r
563 unregister_code(PV_LP);
\r
564 unregister_code(PV_LH);
\r
565 unregister_code(PV_LR);
\r
566 unregister_code(PV_O);
\r
567 unregister_code(PV_RL);
\r
568 unregister_code(PV_RG);
\r
572 macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char)
\r
574 uint8_t need_shift = 0;
\r
575 uint8_t hold_shift = 0;
\r
577 if (!record->event.pressed)
\r
582 if (keyboard_report->mods & MOD_BIT (KC_LSFT)) {
\r
585 unregister_code (KC_LSFT);
\r
587 if ((get_oneshot_mods () & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out ()) {
\r
590 unregister_code (KC_LSFT);
\r
593 clear_oneshot_mods ();
\r
595 register_code (KC_RALT);
\r
596 unregister_code (KC_RALT);
\r
597 if (accent == (KC_DQT)) {
\r
598 register_code (KC_RSFT);
\r
600 register_code (accent);
\r
601 unregister_code (accent);
\r
602 if (need_shift && accent != (KC_DQT)) {
\r
603 register_code (KC_RSFT);
\r
604 } else if (accent == (KC_DQT) && !need_shift) {
\r
605 unregister_code (KC_RSFT);
\r
607 register_code (hun_char);
\r
608 unregister_code (hun_char);
\r
609 if (need_shift || accent == (KC_DQT))
\r
610 unregister_code (KC_RSFT);
\r
612 register_code (KC_LSFT);
\r
617 void ang_handle_kf (keyrecord_t *record, uint8_t id)
\r
619 uint8_t code = id - KF_1;
\r
621 if (record->event.pressed) {
\r
622 kf_timers[code] = timer_read ();
\r
626 if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) {
\r
636 register_code (kc);
\r
637 unregister_code (kc);
\r
641 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
\r
645 if (record->event.pressed) {
\r
646 if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) {
\r
647 clear_oneshot_mods ();
\r
649 register_code (KC_ESC);
\r
653 unregister_code (KC_ESC);
\r
658 if (record->event.pressed) {
\r
659 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
\r
660 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
\r
661 int oneshot = ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out());
\r
664 clear_oneshot_mods ();
\r
665 unregister_code (KC_LSFT);
\r
667 register_code (KC_MPRV);
\r
668 unregister_code (KC_MPRV);
\r
671 register_code (KC_LSFT);
\r
673 return MACRO (T(MNXT), END);
\r
678 /* Hungarian layer */
\r
680 return ang_do_hun (record, KC_QUOT, KC_A);
\r
682 return ang_do_hun (record, KC_QUOT, KC_O);
\r
684 return ang_do_hun (record, KC_QUOT, KC_E);
\r
686 return ang_do_hun (record, KC_QUOT, KC_U);
\r
688 return ang_do_hun (record, KC_QUOT, KC_I);
\r
690 return ang_do_hun (record, KC_DQT, KC_O);
\r
692 return ang_do_hun (record, KC_DQT, KC_U);
\r
694 return ang_do_hun (record, KC_EQL, KC_O);
\r
696 return ang_do_hun (record, KC_EQL, KC_U);
\r
698 /* Mouse movement */
\r
700 if (record->event.pressed) {
\r
701 mousekey_on(KC_MS_UP);
\r
702 mousekey_on(KC_MS_LEFT);
\r
704 mousekey_off(KC_MS_UP);
\r
705 mousekey_off(KC_MS_LEFT);
\r
711 if (record->event.pressed) {
\r
712 mousekey_on(KC_MS_UP);
\r
713 mousekey_on(KC_MS_RIGHT);
\r
715 mousekey_off(KC_MS_UP);
\r
716 mousekey_off(KC_MS_RIGHT);
\r
722 if (record->event.pressed) {
\r
723 mousekey_on(KC_MS_DOWN);
\r
724 mousekey_on(KC_MS_LEFT);
\r
726 mousekey_off(KC_MS_DOWN);
\r
727 mousekey_off(KC_MS_LEFT);
\r
733 if (record->event.pressed) {
\r
734 mousekey_on(KC_MS_DOWN);
\r
735 mousekey_on(KC_MS_RIGHT);
\r
737 mousekey_off(KC_MS_DOWN);
\r
738 mousekey_off(KC_MS_RIGHT);
\r
745 toggle_steno(record->event.pressed);
\r
750 if (record->event.pressed) {
\r
751 register_code (KC_LGUI);
\r
752 if (record->tap.count && !record->tap.interrupted) {
\r
753 if (record->tap.count >= 2) {
\r
754 register_code (KC_W);
\r
756 set_oneshot_layer (APPSEL, ONESHOT_START);
\r
759 record->tap.count = 0;
\r
763 if (record->tap.count >= 2)
\r
765 unregister_code (KC_W);
\r
766 clear_oneshot_layer_state (ONESHOT_PRESSED);
\r
768 gui_timer = timer_read ();
\r
773 return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END);
\r
776 return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(ENT), END);
\r
779 return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END);
\r
782 return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END);
\r
785 return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END);
\r
787 /* Function keys */
\r
788 case KF_1 ... KF_11:
\r
789 ang_handle_kf (record, id);
\r
794 if (record->event.pressed) {
\r
795 oh_base_timer = timer_read ();
\r
797 if (timer_elapsed (oh_base_timer) > TAPPING_TERM) {
\r
800 return MACRO (T(APP), END);
\r
806 if (record->event.pressed) {
\r
807 oh_bsspc_timer = timer_read ();
\r
809 if (timer_elapsed (oh_bsspc_timer) > TAPPING_TERM) {
\r
810 return MACRO (T(BSPC), END);
\r
812 return MACRO (T(SPC), END);
\r
818 if (record->event.pressed) {
\r
819 oh_entsft_timer = timer_read ();
\r
821 if (timer_elapsed (oh_entsft_timer) > TAPPING_TERM) {
\r
822 if (keyboard_report->mods & MOD_BIT(KC_LSFT))
\r
823 unregister_code (KC_LSFT);
\r
825 register_code (KC_LSFT);
\r
827 return MACRO (T(ENT), END);
\r
833 if (record->event.pressed) {
\r
834 layer_move (OHLFT);
\r
836 oh_left_blink_timer = timer_read ();
\r
837 ergodox_right_led_1_on ();
\r
842 if (record->event.pressed) {
\r
843 layer_move (OHRGT);
\r
844 oh_right_blink = 1;
\r
845 oh_right_blink_timer = timer_read ();
\r
846 ergodox_right_led_3_on ();
\r
853 uint8_t is_adore = 0;
\r
855 // Runs just one time when the keyboard initializes.
\r
856 void matrix_init_user(void) {
\r
859 ergodox_led_all_on();
\r
860 for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
\r
861 ergodox_led_all_set (i);
\r
865 for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
\r
866 ergodox_led_all_set (i);
\r
869 ergodox_led_all_off();
\r
871 if (!eeconfig_is_enabled())
\r
873 dl = eeconfig_read_default_layer ();
\r
874 if (dl == (1UL << ADORE))
\r
880 void ang_do_unicode (void) {
\r
881 register_code (KC_RCTL);
\r
882 register_code (KC_RSFT);
\r
883 register_code (KC_U);
\r
884 unregister_code (KC_U);
\r
885 unregister_code (KC_RSFT);
\r
886 unregister_code (KC_RCTL);
\r
890 void ang_tap (uint16_t codes[]) {
\r
891 for (int i = 0; codes[i] != 0; i++) {
\r
892 register_code (codes[i]);
\r
893 unregister_code (codes[i]);
\r
898 #define TAP_ONCE(code) \
\r
899 register_code (code); \
\r
900 unregister_code (code)
\r
902 void ang_tap_dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) {
\r
903 if (state->count == 1) {
\r
904 register_code (KC_RSFT);
\r
905 register_code (KC_SCLN);
\r
906 } else if (state->count == 2) {
\r
907 register_code (KC_SCLN);
\r
911 void ang_tap_dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) {
\r
912 if (state->count == 1) {
\r
913 unregister_code (KC_SCLN);
\r
914 unregister_code (KC_RSFT);
\r
915 } else if (state->count == 2) {
\r
916 unregister_code (KC_SCLN);
\r
920 void ang_tap_dance_mns_finished (qk_tap_dance_state_t *state, void *user_data) {
\r
921 if (state->count == 1) {
\r
922 register_code (KC_MINS);
\r
923 } else if (state->count == 2) {
\r
924 register_code (KC_RSFT);
\r
925 register_code (KC_MINS);
\r
929 void ang_tap_dance_mns_reset (qk_tap_dance_state_t *state, void *user_data) {
\r
930 if (state->count == 1) {
\r
931 unregister_code (KC_MINS);
\r
932 } else if (state->count == 2) {
\r
933 unregister_code (KC_RSFT);
\r
934 unregister_code (KC_MINS);
\r
941 bool finished_once;
\r
944 void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) {
\r
945 td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
\r
947 if (td_ta->finished_once) {
\r
951 if (td_ta->sticky) {
\r
952 td_ta->sticky = false;
\r
953 td_ta->layer_toggle = false;
\r
958 td_ta->finished_once = true;
\r
959 if (state->count == 1 && !state->pressed) {
\r
960 register_code (KC_TAB);
\r
961 td_ta->sticky = false;
\r
962 td_ta->layer_toggle = false;
\r
964 td_ta->layer_toggle = true;
\r
966 td_ta->sticky = (state->count == 2);
\r
970 void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) {
\r
971 td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
\r
973 if (!td_ta->layer_toggle)
\r
974 unregister_code (KC_TAB);
\r
975 if (!td_ta->sticky)
\r
978 td_ta->finished_once = false;
\r
981 const qk_tap_dance_action_t tap_dance_actions[] = {
\r
982 [CT_CLN] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_cln_finished, ang_tap_dance_cln_reset)
\r
983 ,[CT_MNS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ang_tap_dance_mns_finished, ang_tap_dance_mns_reset)
\r
985 .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset },
\r
986 .user_data = (void *)&((td_ta_state_t) { false, false, false })
\r
990 // Runs constantly in the background, in a loop.
\r
991 void matrix_scan_user(void) {
\r
992 uint8_t layer = biton32(layer_state);
\r
994 if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM)
\r
995 unregister_code (KC_LGUI);
\r
997 if (layer != OHLFT)
\r
999 if (layer != OHRGT)
\r
1000 oh_right_blink = 0;
\r
1002 if (layer == HUN) {
\r
1003 ergodox_right_led_2_on();
\r
1004 ergodox_right_led_3_on();
\r
1005 } else if (layer == NMDIA) {
\r
1006 ergodox_right_led_1_on();
\r
1007 ergodox_right_led_2_on();
\r
1008 } else if (layer == PLVR) {
\r
1009 ergodox_right_led_1_on ();
\r
1010 ergodox_right_led_2_on ();
\r
1011 ergodox_right_led_3_on ();
\r
1012 } else if (layer == ADORE) {
\r
1013 ergodox_right_led_1_on ();
\r
1014 ergodox_right_led_2_on ();
\r
1015 ergodox_right_led_3_on ();
\r
1017 ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
\r
1020 if (layer == OHLFT || layer == OHRGT) {
\r
1021 ergodox_right_led_2_on();
\r
1023 if (oh_left_blink) {
\r
1024 if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL) {
\r
1025 if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) == 0)
\r
1026 ergodox_right_led_1_off ();
\r
1028 if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL * 2) {
\r
1029 ergodox_right_led_1_on ();
\r
1030 oh_left_blink_timer = timer_read ();
\r
1034 if (oh_right_blink) {
\r
1035 if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL) {
\r
1036 if ((keyboard_report->mods & MOD_BIT(KC_LCTRL)) == 0)
\r
1037 ergodox_right_led_3_off ();
\r
1039 if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL * 2) {
\r
1040 ergodox_right_led_3_on ();
\r
1041 oh_right_blink_timer = timer_read ();
\r
1046 if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
\r
1047 ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
\r
1048 ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
\r
1049 ergodox_right_led_1_on ();
\r
1051 ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
\r
1052 if (layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE)
\r
1053 ergodox_right_led_1_off ();
\r
1056 if (keyboard_report->mods & MOD_BIT(KC_LALT) ||
\r
1057 ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) {
\r
1058 ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
\r
1059 ergodox_right_led_2_on ();
\r
1061 ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
\r
1062 if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != NMDIA && layer != PLVR && layer != ADORE)
\r
1063 ergodox_right_led_2_off ();
\r
1066 if (keyboard_report->mods & MOD_BIT(KC_LCTRL) ||
\r
1067 ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) {
\r
1068 ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
\r
1069 ergodox_right_led_3_on ();
\r
1071 ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
\r
1072 if (layer != OHRGT && layer != HUN && layer != PLVR && layer != ADORE)
\r
1073 ergodox_right_led_3_off ();
\r
1076 LEADER_DICTIONARY() {
\r
1080 #if KEYLOGGER_ENABLE
\r
1081 SEQ_ONE_KEY (KC_D) {
\r
1082 ergodox_led_all_on();
\r
1084 ergodox_led_all_off();
\r
1085 log_enable = !log_enable;
\r
1089 SEQ_ONE_KEY (KC_T) {
\r
1090 time_travel = !time_travel;
\r
1093 SEQ_ONE_KEY (KC_U) {
\r
1094 ang_do_unicode ();
\r
1097 SEQ_ONE_KEY (KC_V) {
\r
1098 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ (" QMK_VERSION "/" KEYMAP_VERSION ")");
\r
1101 SEQ_ONE_KEY (KC_L) {
\r
1103 ang_do_unicode ();
\r
1105 uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0};
\r
1109 SEQ_ONE_KEY (KC_Y) {
\r
1110 uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0};
\r
1114 SEQ_ONE_KEY (KC_S) {
\r
1115 ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
\r
1116 TAP_ONCE (KC_BSLS);
\r
1117 register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
\r
1118 ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC);
\r
1119 register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT);
\r
1120 TAP_ONCE (KC_SLSH);
\r
1121 ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
\r
1124 SEQ_TWO_KEYS (KC_W, KC_M) {
\r
1125 register_code (KC_LALT);
\r
1126 register_code (KC_F2);
\r
1127 unregister_code (KC_F2);
\r
1128 unregister_code (KC_LALT);
\r
1132 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
1134 register_code (KC_LGUI);
\r
1135 register_code (KC_UP);
\r
1136 unregister_code (KC_UP);
\r
1137 unregister_code (KC_LGUI);
\r
1140 SEQ_ONE_KEY (KC_A) {
\r
1141 if (is_adore == 0) {
\r
1142 default_layer_and (0);
\r
1143 default_layer_or ((1UL << ADORE));
\r
1144 eeconfig_update_default_layer ((1UL << ADORE));
\r
1147 ergodox_led_all_off ();
\r
1148 ergodox_right_led_3_on ();
\r
1150 ergodox_right_led_2_on ();
\r
1152 ergodox_right_led_3_off ();
\r
1153 ergodox_right_led_1_on ();
\r
1155 ergodox_right_led_2_off ();
\r
1157 ergodox_right_led_1_off ();
\r
1160 default_layer_and (0);
\r
1161 default_layer_or (1UL << BASE);
\r
1162 eeconfig_update_default_layer ((1UL << BASE));
\r
1164 ergodox_led_all_off ();
\r
1165 ergodox_right_led_1_on ();
\r
1167 ergodox_right_led_2_on ();
\r
1169 ergodox_right_led_1_off ();
\r
1170 ergodox_right_led_3_on ();
\r
1172 ergodox_right_led_2_off ();
\r
1174 ergodox_right_led_3_off ();
\r
1180 static uint16_t last4[4];
\r
1182 bool process_record_user (uint16_t keycode, keyrecord_t *record) {
\r
1183 #if KEYLOGGER_ENABLE
\r
1184 uint8_t layer = biton32(layer_state);
\r
1186 if (log_enable && layer == BASE) {
\r
1187 xprintf ("KL: col=%d, row=%d\n", record->event.key.col,
\r
1188 record->event.key.row);
\r
1192 if (time_travel && !record->event.pressed) {
\r
1195 // shift cache one to the left
\r
1196 for (p = 0; p < 3; p++) {
\r
1197 last4[p] = last4[p + 1];
\r
1199 last4[3] = keycode;
\r
1201 if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) {
\r
1202 uint16_t codes[] = {KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0};
\r
1204 register_code (KC_RSFT);
\r
1205 register_code (KC_EQL);
\r
1206 unregister_code (KC_EQL);
\r
1207 unregister_code (KC_RSFT);
\r
1209 uint16_t codes2[] = {KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0};
\r