diff options
author | Manassarn Manoonchai <manassarn@gmail.com> | 2019-09-07 22:06:30 +0700 |
---|---|---|
committer | Drashna Jaelre <drashna@live.com> | 2019-09-07 08:06:30 -0700 |
commit | c21281c593d2eb9ef87053ef1d04d0b7d41be726 (patch) | |
tree | 22e7d04bd9f27e4bc481cf89791a0cf0ee4ef175 | |
parent | 6ca29f2b9b02763aa3de607e8d08f14d5284918f (diff) | |
download | qmk_firmware-c21281c593d2eb9ef87053ef1d04d0b7d41be726.tar.gz qmk_firmware-c21281c593d2eb9ef87053ef1d04d0b7d41be726.zip |
[Keymap] Add narze userspace (#6652)
* Refactor & reimplement mod tap macros
* Reduce tapping term
* Update readme
* Add narze userspace
* Make use of narze userspace
* Extract Superduper mode
* Refactor Superduper mode
* (Ergodox Infinity) Prevent stuck modifiers
* Update ergodox_infinity/narze likewise
* Add warning for building Infinity with docker
* Fix include eeprom.h in superduper
* Try enabling superduper mode with combo for ergodox infinity
* Apply suggestions on #4546
* Convert to 4 spaces
* Map backlight step key
* Replace PLAY_NOTE_ARRAY
* Fix superduper toggle
* Re enable audio in planck rev4
* Use perform_space_cadet
* Remove superduper mod tap triggers
* Add readme for planck light firmware flashing command
* Remove unused layers
* Remove unused keycodes
* Add backlight toggle
* Remove unused songs & use DEFAULT_LAYER_SONGS
* Update readme
* Move includes to header file
-rw-r--r-- | keyboards/ergodox_infinity/keymaps/narze/config.h | 11 | ||||
-rw-r--r-- | keyboards/ergodox_infinity/keymaps/narze/keymap.c | 532 | ||||
-rw-r--r-- | keyboards/ergodox_infinity/keymaps/narze/readme.md | 19 | ||||
-rw-r--r-- | keyboards/ergodox_infinity/keymaps/narze/rules.mk | 5 | ||||
-rw-r--r-- | keyboards/planck/keymaps/narze/config.h | 15 | ||||
-rw-r--r-- | keyboards/planck/keymaps/narze/keymap.c | 595 | ||||
-rw-r--r-- | keyboards/planck/keymaps/narze/readme.md | 15 | ||||
-rw-r--r-- | keyboards/planck/keymaps/narze/rules.mk | 20 | ||||
-rw-r--r-- | users/narze/narze.c | 1 | ||||
-rw-r--r-- | users/narze/narze.h | 9 | ||||
-rw-r--r-- | users/narze/readme.md | 18 | ||||
-rw-r--r-- | users/narze/rules.mk | 5 | ||||
-rw-r--r-- | users/narze/superduper.c | 66 | ||||
-rw-r--r-- | users/narze/superduper.h | 7 |
14 files changed, 533 insertions, 785 deletions
diff --git a/keyboards/ergodox_infinity/keymaps/narze/config.h b/keyboards/ergodox_infinity/keymaps/narze/config.h index 551327a12..bceb14c92 100644 --- a/keyboards/ergodox_infinity/keymaps/narze/config.h +++ b/keyboards/ergodox_infinity/keymaps/narze/config.h | |||
@@ -1,14 +1,11 @@ | |||
1 | #ifndef CONFIG_H_ | 1 | #pragma once |
2 | #define CONFIG_H_ | ||
3 | |||
4 | #include "../../config.h" | ||
5 | 2 | ||
6 | #undef TAPPING_TERM | 3 | #undef TAPPING_TERM |
7 | #define TAPPING_TERM 150 | 4 | #define TAPPING_TERM 150 |
8 | 5 | ||
9 | // Combos not working yet | 6 | // Combos not working yet |
10 | // #define COMBO_TERM 20 | 7 | #define COMBO_TERM 20 |
11 | // #define COMBO_COUNT 1 | 8 | #define COMBO_COUNT 1 |
12 | // #define COMBO_ALLOW_ACTION_KEYS | 9 | // #define COMBO_ALLOW_ACTION_KEYS |
13 | 10 | ||
14 | #define IGNORE_MOD_TAP_INTERRUPT | 11 | #define IGNORE_MOD_TAP_INTERRUPT |
@@ -16,5 +13,3 @@ | |||
16 | 13 | ||
17 | #undef MOUSEKEY_DELAY | 14 | #undef MOUSEKEY_DELAY |
18 | #define MOUSEKEY_DELAY 100 | 15 | #define MOUSEKEY_DELAY 100 |
19 | |||
20 | #endif | ||
diff --git a/keyboards/ergodox_infinity/keymaps/narze/keymap.c b/keyboards/ergodox_infinity/keymaps/narze/keymap.c index d562c4a9d..e48db6f28 100644 --- a/keyboards/ergodox_infinity/keymaps/narze/keymap.c +++ b/keyboards/ergodox_infinity/keymaps/narze/keymap.c | |||
@@ -1,93 +1,55 @@ | |||
1 | #include QMK_KEYBOARD_H | 1 | #include QMK_KEYBOARD_H |
2 | // #include "debug.h" | 2 | #include "narze.h" |
3 | #include "action_layer.h" | ||
4 | #include "version.h" | 3 | #include "version.h" |
5 | #include "eeconfig.h" | ||
6 | #include "eeprom.h" | ||
7 | #include "keymap_colemak.h" | 4 | #include "keymap_colemak.h" |
8 | 5 | ||
9 | extern keymap_config_t keymap_config; | 6 | extern keymap_config_t keymap_config; |
10 | 7 | ||
11 | enum ergodox_layers { | 8 | enum ergodox_layers { |
12 | _QWERTY, | 9 | _QWERTY, |
13 | _COLEMAK, | 10 | _COLEMAK, |
14 | _QWOC, | 11 | _QWOC, |
15 | _LOWER, | 12 | _LOWER, |
16 | _RAISE, | 13 | _RAISE, |
17 | _PLOVER, | 14 | _PLOVER, |
18 | // Intermediate layers for SuperDuper (Combo keys does not work on Infinity yet) | 15 | // Intermediate layers for SuperDuper (Combo keys does not work on Infinity yet) |
19 | _SUPER, | 16 | _SUPERDUPER, |
20 | _DUPER, | 17 | _MOUSE, |
21 | _SUPERDUPER, | 18 | _ADJUST, |
22 | _MOUSE, | 19 | _MDIA, |
23 | _ADJUST, | 20 | _SYMB, |
24 | _MDIA, | ||
25 | _SYMB, | ||
26 | }; | 21 | }; |
27 | 22 | ||
28 | enum ergodox_keycodes { | 23 | enum ergodox_keycodes { |
29 | QWERTY = SAFE_RANGE, | 24 | QWERTY = SAFE_RANGE, |
30 | COLEMAK, | 25 | COLEMAK, |
31 | QWOC, | 26 | QWOC, |
32 | PLOVER, | 27 | LOWER, |
33 | SUPER, | 28 | RAISE, |
34 | DUPER, | 29 | PLOVER, |
35 | SUPERDUPER, | 30 | SUPERDUPER, |
36 | MOUSE, | 31 | MOUSE, |
37 | LOWER, | 32 | BACKLIT, |
38 | RAISE, | 33 | EXT_PLV, |
39 | BACKLIT, | 34 | SDTOGG, // Toggle SuperDuper |
40 | EXT_PLV, | 35 | EPRM, |
41 | SDTOGG, // Toggle SuperDuper | 36 | VRSN, |
42 | EPRM, | 37 | RGB_SLD, |
43 | VRSN, | 38 | GUI_UNDS, |
44 | RGB_SLD | 39 | LSFT_LPRN, |
40 | RSFT_RPRN, | ||
45 | }; | 41 | }; |
46 | 42 | ||
47 | enum functions { | ||
48 | M_GUI_UNDS, // Simulate GUI_T(KC_UNDS) | ||
49 | M_SFT_PO, // SFT_T(KC_LPRN) | ||
50 | M_SFT_PC, // SFT_T(KC_RPRN) | ||
51 | }; | ||
52 | |||
53 | // Timer for custom mod tap | ||
54 | static uint16_t m_gui_unds_timer; | ||
55 | static uint16_t m_sft_po_timer; | ||
56 | static uint16_t m_sft_pc_timer; | ||
57 | |||
58 | // Narze : Custom Macros | 43 | // Narze : Custom Macros |
59 | #define HPR_ESC ALL_T(KC_ESC) | 44 | #define HPR_ESC ALL_T(KC_ESC) |
60 | #define SFT_ENT SFT_T(KC_ENT) | 45 | #define SFT_ENT SFT_T(KC_ENT) |
61 | #define SFT_PO F(M_SFT_PO) | 46 | #define SFT_PO LSFT_LPRN |
62 | #define SFT_PC F(M_SFT_PC) | 47 | #define SFT_PC RSFT_RPRN |
63 | #define GUI_MINS GUI_T(KC_MINS) | 48 | #define GUI_MINS GUI_T(KC_MINS) |
64 | #define GUI_UNDS F(M_GUI_UNDS) | ||
65 | |||
66 | // Combo : SuperDuper layer from S+D (R+S in Colemak) | ||
67 | // #define COMBO_COUNT 1 | ||
68 | // #define SUPERDUPER_COMBO_COUNT 3 | ||
69 | // #define EECONFIG_SUPERDUPER_INDEX (uint8_t *) 19 | ||
70 | |||
71 | // enum process_combo_event { | ||
72 | // CB_SUPERDUPER, | ||
73 | // }; | ||
74 | |||
75 | // const uint16_t PROGMEM superduper_combos[SUPERDUPER_COMBO_COUNT][3] = { | ||
76 | // [_QWERTY] = {KC_S, KC_D, COMBO_END}, | ||
77 | // [_COLEMAK] = {KC_R, KC_S, COMBO_END}, | ||
78 | // [_QWOC] = {CM_S, CM_D, COMBO_END}, | ||
79 | // }; | ||
80 | |||
81 | // combo_t PROGMEM key_combos[COMBO_COUNT] = { | ||
82 | // [CB_SUPERDUPER] = COMBO_ACTION(superduper_combos[_QWERTY]), | ||
83 | // }; | ||
84 | |||
85 | // volatile bool superduper_enabled = true; | ||
86 | 49 | ||
87 | // const uint16_t empty_combo[] = {COMBO_END}; | 50 | enum process_combo_event { |
88 | 51 | CB_SUPERDUPER, | |
89 | // void set_superduper_key_combos(void); | 52 | }; |
90 | // void clear_superduper_key_combos(void); | ||
91 | 53 | ||
92 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | 54 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
93 | /* Qwerty | 55 | /* Qwerty |
@@ -115,7 +77,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
115 | // left hand | 77 | // left hand |
116 | KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO), | 78 | KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO), |
117 | KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, LT(_SYMB, KC_NO), | 79 | KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, LT(_SYMB, KC_NO), |
118 | HPR_ESC, KC_A, LT(_SUPER, KC_S), LT(_DUPER, KC_D), KC_F, KC_G, | 80 | HPR_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, |
119 | SFT_PO, LT(_MOUSE, KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), | 81 | SFT_PO, LT(_MOUSE, KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), |
120 | LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER, | 82 | LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER, |
121 | KC_ENT, KC_LGUI, | 83 | KC_ENT, KC_LGUI, |
@@ -156,7 +118,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
156 | // left hand | 118 | // left hand |
157 | KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO), | 119 | KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO), |
158 | KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, LT(_SYMB, KC_NO), | 120 | KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, LT(_SYMB, KC_NO), |
159 | HPR_ESC, KC_A, LT(_SUPER,KC_R), LT(_DUPER,KC_S), KC_T, KC_D, | 121 | HPR_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, |
160 | SFT_PO, LT(_MOUSE, KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), | 122 | SFT_PO, LT(_MOUSE, KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), |
161 | LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER, | 123 | LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER, |
162 | KC_ENT, KC_LGUI, | 124 | KC_ENT, KC_LGUI, |
@@ -177,7 +139,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
177 | // left hand | 139 | // left hand |
178 | KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO), | 140 | KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, LT(_MDIA, KC_NO), |
179 | KC_TAB, CM_Q, CM_W, CM_E, CM_R, CM_T, LT(_SYMB, KC_NO), | 141 | KC_TAB, CM_Q, CM_W, CM_E, CM_R, CM_T, LT(_SYMB, KC_NO), |
180 | HPR_ESC, CM_A, LT(_SUPER,CM_S), LT(_DUPER,CM_D), CM_F, CM_G, | 142 | HPR_ESC, CM_A, CM_S, CM_D, CM_F, CM_G, |
181 | SFT_PO, LT(_MOUSE, CM_Z), CM_X, CM_C, CM_V, CM_B, ALL_T(KC_NO), | 143 | SFT_PO, LT(_MOUSE, CM_Z), CM_X, CM_C, CM_V, CM_B, ALL_T(KC_NO), |
182 | LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER, | 144 | LT(_RAISE, KC_LBRC),KC_LCTL, KC_LALT, GUI_UNDS, LOWER, |
183 | KC_ENT, KC_LGUI, | 145 | KC_ENT, KC_LGUI, |
@@ -357,47 +319,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
357 | _______, | 319 | _______, |
358 | _______,_______, KC_LSFT | 320 | _______,_______, KC_LSFT |
359 | ), | 321 | ), |
360 | // Intermediate keymaps for SuperDuper (Combo keys does not work on Infinity yet) | ||
361 | [_SUPER] = LAYOUT_ergodox( | ||
362 | // left hand | ||
363 | _______, _______, _______, _______, _______, _______, _______, | ||
364 | _______, _______, _______, _______, _______, _______, _______, | ||
365 | _______, _______, _______, DUPER, _______, _______, | ||
366 | _______, _______, _______, _______, _______, _______, _______, | ||
367 | _______, _______, _______, _______, _______, | ||
368 | _______, _______, | ||
369 | _______, | ||
370 | _______,_______,_______, | ||
371 | // right hand | ||
372 | _______, _______, _______, _______, _______, _______, _______, | ||
373 | _______, _______, _______, _______, _______, _______, _______, | ||
374 | _______, _______, _______, _______, _______, _______, | ||
375 | _______, _______, _______, _______, _______, _______, _______, | ||
376 | _______, _______, _______, _______, _______, | ||
377 | _______, _______, | ||
378 | _______, | ||
379 | _______,_______, _______ | ||
380 | ), | ||
381 | [_DUPER] = LAYOUT_ergodox( | ||
382 | // left hand | ||
383 | _______, _______, _______, _______, _______, _______, _______, | ||
384 | _______, _______, _______, _______, _______, _______, _______, | ||
385 | _______, _______, SUPER, _______, _______, _______, | ||
386 | _______, _______, _______, _______, _______, _______, _______, | ||
387 | _______, _______, _______, _______, _______, | ||
388 | _______, _______, | ||
389 | _______, | ||
390 | _______,_______,_______, | ||
391 | // right hand | ||
392 | _______, _______, _______, _______, _______, _______, _______, | ||
393 | _______, _______, _______, _______, _______, _______, _______, | ||
394 | _______, _______, _______, _______, _______, _______, | ||
395 | _______, _______, _______, _______, _______, _______, _______, | ||
396 | _______, _______, _______, _______, _______, | ||
397 | _______, _______, | ||
398 | _______, | ||
399 | _______,_______, _______ | ||
400 | ), | ||
401 | 322 | ||
402 | /* Mouse | 323 | /* Mouse |
403 | * | 324 | * |
@@ -452,7 +373,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
452 | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| | 373 | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| |
453 | * | | | | | | | | | |SDTogg| | | | | | | 374 | * | | | | | | | | | |SDTogg| | | | | | |
454 | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' | 375 | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' |
455 | * | | | | | | | | | | | | | 376 | * | | | | | | | | | | | BACKLIT| |
456 | * `----------------------------------' `----------------------------------' | 377 | * `----------------------------------' `----------------------------------' |
457 | * ,-------------. ,-------------. | 378 | * ,-------------. ,-------------. |
458 | * | | | | | | | 379 | * | | | | | | |
@@ -477,7 +398,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
477 | _______, _______, _______, _______, _______, _______, KC_DEL, | 398 | _______, _______, _______, _______, _______, _______, KC_DEL, |
478 | AG_SWAP, QWERTY, COLEMAK, QWOC, PLOVER, _______, | 399 | AG_SWAP, QWERTY, COLEMAK, QWOC, PLOVER, _______, |
479 | _______, SDTOGG, _______, _______, _______, _______, _______, | 400 | _______, SDTOGG, _______, _______, _______, _______, _______, |
480 | _______, _______, _______, _______, _______, | 401 | _______, _______, _______, _______, BACKLIT, |
481 | _______, _______, | 402 | _______, _______, |
482 | _______, | 403 | _______, |
483 | _______,_______, _______ | 404 | _______,_______, _______ |
@@ -569,146 +490,123 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
569 | ) | 490 | ) |
570 | }; | 491 | }; |
571 | 492 | ||
572 | void persistant_default_layer_set(uint16_t default_layer) { | ||
573 | eeconfig_update_default_layer(default_layer); | ||
574 | default_layer_set(default_layer); | ||
575 | } | ||
576 | |||
577 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | 493 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
578 | switch (keycode) { | 494 | switch (keycode) { |
579 | case QWERTY: | 495 | case QWERTY: |
580 | if (record->event.pressed) { | 496 | if (record->event.pressed) { |
581 | persistant_default_layer_set(1UL<<_QWERTY); | 497 | set_single_persistent_default_layer(_QWERTY); |
582 | 498 | ||
583 | // key_combos[CB_SUPERDUPER].keys = superduper_combos[_QWERTY]; | 499 | set_superduper_key_combo_layer(_QWERTY); |
584 | // eeprom_update_byte(EECONFIG_SUPERDUPER_INDEX, _QWERTY); | 500 | } |
585 | } | 501 | return false; |
586 | return false; | 502 | |
587 | break; | 503 | case COLEMAK: |
588 | case COLEMAK: | 504 | if (record->event.pressed) { |
589 | if (record->event.pressed) { | 505 | set_single_persistent_default_layer(_COLEMAK); |
590 | persistant_default_layer_set(1UL<<_COLEMAK); | 506 | |
591 | 507 | set_superduper_key_combo_layer(_COLEMAK); | |
592 | // key_combos[CB_SUPERDUPER].keys = superduper_combos[_COLEMAK]; | 508 | } |
593 | // eeprom_update_byte(EECONFIG_SUPERDUPER_INDEX, _COLEMAK); | 509 | return false; |
594 | } | 510 | |
595 | return false; | 511 | case QWOC: |
596 | break; | 512 | if (record->event.pressed) { |
597 | case QWOC: | 513 | set_single_persistent_default_layer(_QWOC); |
598 | if (record->event.pressed) { | 514 | |
599 | persistant_default_layer_set(1UL<<_QWOC); | 515 | set_superduper_key_combo_layer(_QWOC); |
600 | 516 | } | |
601 | // key_combos[CB_SUPERDUPER].keys = superduper_combos[_QWOC]; | 517 | return false; |
602 | // eeprom_update_byte(EECONFIG_SUPERDUPER_INDEX, _QWOC); | 518 | |
603 | } | 519 | case LOWER: |
604 | return false; | 520 | if (record->event.pressed) { |
605 | break; | 521 | layer_on(_LOWER); |
606 | case LOWER: | 522 | update_tri_layer(_LOWER, _RAISE, _ADJUST); |
607 | if (record->event.pressed) { | 523 | } else { |
608 | layer_on(_LOWER); | 524 | layer_off(_LOWER); |
609 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | 525 | update_tri_layer(_LOWER, _RAISE, _ADJUST); |
610 | } else { | 526 | } |
611 | layer_off(_LOWER); | 527 | return false; |
612 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | 528 | |
613 | } | 529 | case RAISE: |
614 | return false; | 530 | if (record->event.pressed) { |
615 | break; | 531 | layer_on(_RAISE); |
616 | case RAISE: | 532 | update_tri_layer(_LOWER, _RAISE, _ADJUST); |
617 | if (record->event.pressed) { | 533 | } else { |
618 | layer_on(_RAISE); | 534 | layer_off(_RAISE); |
619 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | 535 | update_tri_layer(_LOWER, _RAISE, _ADJUST); |
620 | } else { | 536 | } |
621 | layer_off(_RAISE); | 537 | return false; |
622 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | 538 | |
623 | } | 539 | case BACKLIT: |
624 | return false; | 540 | if (record->event.pressed) { |
625 | break; | 541 | register_code(KC_RSFT); |
626 | case SUPER: | 542 | #ifdef BACKLIGHT_ENABLE |
627 | if (record->event.pressed) { | 543 | backlight_step(); |
628 | layer_on(_SUPER); | 544 | #endif |
629 | update_tri_layer(_SUPER, _DUPER, _SUPERDUPER); | 545 | } else { |
630 | } else { | 546 | unregister_code(KC_RSFT); |
631 | layer_off(_SUPER); | 547 | } |
632 | update_tri_layer(_SUPER, _DUPER, _SUPERDUPER); | 548 | return false; |
633 | } | 549 | |
634 | return false; | 550 | case PLOVER: |
635 | break; | 551 | if (record->event.pressed) { |
636 | case DUPER: | 552 | layer_off(_RAISE); |
637 | if (record->event.pressed) { | 553 | layer_off(_LOWER); |
638 | layer_on(_DUPER); | 554 | layer_off(_ADJUST); |
639 | update_tri_layer(_SUPER, _DUPER, _SUPERDUPER); | 555 | layer_on(_PLOVER); |
640 | } else { | 556 | if (!eeconfig_is_enabled()) { |
641 | layer_off(_DUPER); | 557 | eeconfig_init(); |
642 | update_tri_layer(_SUPER, _DUPER, _SUPERDUPER); | 558 | } |
643 | } | 559 | keymap_config.raw = eeconfig_read_keymap(); |
644 | return false; | 560 | keymap_config.nkro = 1; |
645 | break; | 561 | eeconfig_update_keymap(keymap_config.raw); |
646 | case BACKLIT: | 562 | } |
647 | if (record->event.pressed) { | 563 | return false; |
648 | register_code(KC_RSFT); | 564 | |
649 | #ifdef BACKLIGHT_ENABLE | 565 | case EXT_PLV: |
650 | backlight_step(); | 566 | if (record->event.pressed) { |
651 | #endif | 567 | layer_off(_PLOVER); |
652 | } else { | 568 | } |
653 | unregister_code(KC_RSFT); | 569 | return false; |
654 | } | 570 | |
655 | return false; | 571 | case SDTOGG: |
656 | break; | 572 | if (record->event.pressed) { |
657 | case PLOVER: | 573 | toggle_superduper_mode(); |
658 | if (record->event.pressed) { | 574 | } |
659 | layer_off(_RAISE); | 575 | return false; |
660 | layer_off(_LOWER); | 576 | |
661 | layer_off(_ADJUST); | 577 | case VRSN: |
662 | layer_on(_PLOVER); | 578 | if (record->event.pressed) { |
663 | if (!eeconfig_is_enabled()) { | 579 | SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); |
664 | eeconfig_init(); | 580 | } |
665 | } | 581 | return false; |
666 | keymap_config.raw = eeconfig_read_keymap(); | 582 | |
667 | keymap_config.nkro = 1; | 583 | case RGB_SLD: |
668 | eeconfig_update_keymap(keymap_config.raw); | 584 | if (record->event.pressed) { |
669 | } | 585 | #ifdef RGBLIGHT_ENABLE |
670 | return false; | 586 | rgblight_mode(1); |
671 | break; | 587 | #endif |
672 | case EXT_PLV: | 588 | } |
673 | if (record->event.pressed) { | 589 | return false; |
674 | layer_off(_PLOVER); | 590 | |
675 | } | 591 | // Macros |
676 | return false; | 592 | |
677 | break; | 593 | // 1. Hold for LGUI, tap for Underscore |
678 | case SDTOGG: | 594 | case GUI_UNDS: |
679 | if (record->event.pressed) { | 595 | perform_space_cadet(record, KC_LGUI, KC_LSFT, KC_MINS); |
680 | // superduper_enabled = !superduper_enabled; | 596 | return false; |
681 | 597 | ||
682 | // if (superduper_enabled) { | 598 | // 2. Hold for LSHIFT, tap for Parens open |
683 | // set_superduper_key_combos(); | 599 | case LSFT_LPRN: |
684 | // } else { | 600 | perform_space_cadet(record, KC_LSFT, KC_LSFT, KC_9); |
685 | // clear_superduper_key_combos(); | 601 | return false; |
686 | // } | 602 | |
687 | } | 603 | // 3. Hold for RSHIFT, tap for Parens close |
688 | return false; | 604 | case RSFT_RPRN: |
689 | break; | 605 | perform_space_cadet(record, KC_RSFT, KC_RSFT, KC_0); |
690 | case EPRM: | 606 | return false; |
691 | if (record->event.pressed) { | 607 | |
692 | eeconfig_init(); | 608 | } |
693 | } | 609 | return true; |
694 | return false; | ||
695 | break; | ||
696 | case VRSN: | ||
697 | if (record->event.pressed) { | ||
698 | SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); | ||
699 | } | ||
700 | return false; | ||
701 | break; | ||
702 | case RGB_SLD: | ||
703 | if (record->event.pressed) { | ||
704 | #ifdef RGBLIGHT_ENABLE | ||
705 | rgblight_mode(1); | ||
706 | #endif | ||
707 | } | ||
708 | return false; | ||
709 | break; | ||
710 | } | ||
711 | return true; | ||
712 | } | 610 | } |
713 | 611 | ||
714 | void matrix_init_user(void) { | 612 | void matrix_init_user(void) { |
@@ -716,25 +614,9 @@ void matrix_init_user(void) { | |||
716 | } | 614 | } |
717 | 615 | ||
718 | void matrix_setup(void) { | 616 | void matrix_setup(void) { |
719 | // set_superduper_key_combos(); | 617 | set_superduper_key_combos(); |
720 | } | 618 | } |
721 | 619 | ||
722 | // void set_superduper_key_combos(void) { | ||
723 | // uint8_t layer = eeprom_read_byte(EECONFIG_SUPERDUPER_INDEX); | ||
724 | |||
725 | // switch (layer) { | ||
726 | // case _QWERTY: | ||
727 | // case _COLEMAK: | ||
728 | // case _QWOC: | ||
729 | // key_combos[CB_SUPERDUPER].keys = superduper_combos[layer]; | ||
730 | // break; | ||
731 | // } | ||
732 | // } | ||
733 | |||
734 | // void clear_superduper_key_combos(void) { | ||
735 | // key_combos[CB_SUPERDUPER].keys = empty_combo; | ||
736 | // } | ||
737 | |||
738 | void matrix_scan_user(void) { | 620 | void matrix_scan_user(void) { |
739 | // uint8_t layer = biton32(layer_state); | 621 | // uint8_t layer = biton32(layer_state); |
740 | 622 | ||
@@ -758,91 +640,17 @@ void matrix_scan_user(void) { | |||
758 | 640 | ||
759 | // Combos | 641 | // Combos |
760 | 642 | ||
761 | // void process_combo_event(uint8_t combo_index, bool pressed) { | 643 | void process_combo_event(uint8_t combo_index, bool pressed) { |
762 | // if (pressed) { | 644 | if (pressed) { |
763 | // switch(combo_index) { | 645 | switch(combo_index) { |
764 | // case CB_SUPERDUPER: | 646 | case CB_SUPERDUPER: |
765 | // layer_on(_SUPERDUPER); | 647 | layer_on(_SUPERDUPER); |
766 | // ergodox_board_led_on(); | 648 | ergodox_board_led_on(); |
767 | // break; | 649 | break; |
768 | // } | ||
769 | // } else { | ||
770 | // layer_off(_SUPERDUPER); | ||
771 | // ergodox_board_led_off(); | ||
772 | // unregister_mods(MOD_BIT(KC_LGUI) | MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT)); // Sometimes mods are held, unregister them | ||
773 | // } | ||
774 | // } | ||
775 | |||
776 | // Macros | ||
777 | |||
778 | const uint16_t PROGMEM fn_actions[] = { | ||
779 | [M_GUI_UNDS] = ACTION_MACRO_TAP(M_GUI_UNDS), | ||
780 | [M_SFT_PO] = ACTION_MACRO_TAP(M_SFT_PO), | ||
781 | [M_SFT_PC] = ACTION_MACRO_TAP(M_SFT_PC), | ||
782 | }; | ||
783 | |||
784 | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | ||
785 | { | ||
786 | bool tap_not_interrupted = record->tap.count > 0 && !record->tap.interrupted; | ||
787 | |||
788 | switch(id) { | ||
789 | // Hold for LGUI, tap for Underscore | ||
790 | case M_GUI_UNDS: | ||
791 | if (record->event.pressed) { | ||
792 | m_gui_unds_timer = timer_read(); | ||
793 | |||
794 | if (!tap_not_interrupted) { | ||
795 | register_mods(MOD_BIT(KC_LGUI)); | ||
796 | } | 650 | } |
797 | } else { | 651 | } else { |
798 | if (tap_not_interrupted && timer_elapsed(m_gui_unds_timer) < TAPPING_TERM) { | 652 | layer_off(_SUPERDUPER); |
799 | 653 | ergodox_board_led_off(); | |
800 | add_weak_mods(MOD_BIT(KC_LSFT)); | 654 | unregister_mods(MOD_BIT(KC_LGUI) | MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT)); // Sometimes mods are held, unregister them |
801 | send_keyboard_report(); | 655 | } |
802 | register_code(KC_MINS); | 656 | } |
803 | unregister_code(KC_MINS); | ||
804 | del_weak_mods(MOD_BIT(KC_LSFT)); | ||
805 | send_keyboard_report(); | ||
806 | record->tap.count = 0; // ad hoc: cancel tap | ||
807 | } else { | ||
808 | unregister_mods(MOD_BIT(KC_LGUI)); | ||
809 | } | ||
810 | } | ||
811 | break; | ||
812 | // Hold for LSHIFT, tap for Parens open | ||
813 | case M_SFT_PO: | ||
814 | if (record->event.pressed) { | ||
815 | m_sft_po_timer = timer_read(); | ||
816 | |||
817 | if (!tap_not_interrupted) { | ||
818 | register_mods(MOD_BIT(KC_LSFT)); | ||
819 | } | ||
820 | } else { | ||
821 | if (tap_not_interrupted && timer_elapsed(m_sft_po_timer) < TAPPING_TERM) { | ||
822 | record->tap.count = 0; | ||
823 | return MACRO(D(RSFT), T(9), U(RSFT), END); | ||
824 | } else { | ||
825 | unregister_mods(MOD_BIT(KC_LSFT)); | ||
826 | } | ||
827 | } | ||
828 | break; | ||
829 | // Hold for RSHIFT, tap for Parens close | ||
830 | case M_SFT_PC: | ||
831 | if (record->event.pressed) { | ||
832 | m_sft_pc_timer = timer_read(); | ||
833 | |||
834 | if (!tap_not_interrupted) { | ||
835 | register_mods(MOD_BIT(KC_RSFT)); | ||
836 | } | ||
837 | } else { | ||
838 | if (tap_not_interrupted && timer_elapsed(m_sft_pc_timer) < TAPPING_TERM) { | ||
839 | record->tap.count = 0; | ||
840 | return MACRO(D(LSFT), T(0), U(LSFT), END); | ||
841 | } else { | ||
842 | unregister_mods(MOD_BIT(KC_RSFT)); | ||
843 | } | ||
844 | } | ||
845 | break; | ||
846 | } | ||
847 | return MACRO_NONE; | ||
848 | }; | ||
diff --git a/keyboards/ergodox_infinity/keymaps/narze/readme.md b/keyboards/ergodox_infinity/keymaps/narze/readme.md index 03a72f1ac..f24fc05fe 100644 --- a/keyboards/ergodox_infinity/keymaps/narze/readme.md +++ b/keyboards/ergodox_infinity/keymaps/narze/readme.md | |||
@@ -25,21 +25,22 @@ Press `S+D` simultaneously and hold, then... | |||
25 | - It can be activated by holding `/` as well, but it's slower since `LT()` uses `TAPPING_TERM` of 200ms but `S+D` uses `COMBO_TERM` of only 20ms (Can be changed within config.h) | 25 | - It can be activated by holding `/` as well, but it's slower since `LT()` uses `TAPPING_TERM` of 200ms but `S+D` uses `COMBO_TERM` of only 20ms (Can be changed within config.h) |
26 | 26 | ||
27 | ## Build instructions | 27 | ## Build instructions |
28 | - `cd /path/to/qmk_firmware` | 28 | If your environment is ready to build with `make`, don't use docker since it takes 5m+ to compile. |
29 | Use the instructions in Ergodox Infinity's readme. | ||
29 | 30 | ||
30 | #### Left side | 31 | #### Left side (Docker) |
31 | ``` | 32 | ``` |
32 | docker run -e keymap=narze -e subproject=infinity -e keyboard=ergodox --rm -v $('pwd'):/qmk:rw edasque/qmk_firmware | 33 | cd /path/to/qmk_firmware |
34 | util/docker_build.sh ergodox_infinity:narze | ||
33 | avr-objcopy -Iihex -Obinary .build/ergodox_infinity_narze.hex .build/ergodox_infinity_narze_left.bin | 35 | avr-objcopy -Iihex -Obinary .build/ergodox_infinity_narze.hex .build/ergodox_infinity_narze_left.bin |
34 | dfu-util --device 1c11:b007 -D .build/ergodox_infinity_narze_left.bin | 36 | dfu-util --device 1c11:b007 -D .build/ergodox_infinity_narze_left.bin |
35 | ``` | 37 | ``` |
36 | 38 | ||
37 | #### Right side | 39 | #### Right side (Docker) |
40 | You have to override `usb_args` in order to pass `MASTER=right` to docker using provided build script. | ||
38 | ``` | 41 | ``` |
39 | docker run -e keymap=narze -e subproject=infinity -e keyboard=ergodox -e MASTER=right --rm -v $('pwd'):/qmk:rw edasque/qmk_firmware | 42 | cd /path/to/qmk_firmware |
43 | usb_args="-e MASTER=right" util/docker_build.sh ergodox_infinity:narze | ||
40 | avr-objcopy -Iihex -Obinary .build/ergodox_infinity_narze.hex .build/ergodox_infinity_narze_right.bin | 44 | avr-objcopy -Iihex -Obinary .build/ergodox_infinity_narze.hex .build/ergodox_infinity_narze_right.bin |
41 | dfu-util --device 1c11:b007 -D .build/ergodox_infinity_narze_right.bin | 45 | dfu-util --device 1c11:b007 -D .build/ergodox_infinity_narze_right.bin |
42 | ``` | 46 | ``` |
43 | |||
44 | ## TODO | ||
45 | - [ ] Make SuperDuper mode fully-compatible in Windows by swapping GUI with Ctrl | ||
diff --git a/keyboards/ergodox_infinity/keymaps/narze/rules.mk b/keyboards/ergodox_infinity/keymaps/narze/rules.mk index bd89bb9d9..4bfa4fde2 100644 --- a/keyboards/ergodox_infinity/keymaps/narze/rules.mk +++ b/keyboards/ergodox_infinity/keymaps/narze/rules.mk | |||
@@ -15,10 +15,9 @@ MIDI_ENABLE = no # MIDI controls | |||
15 | AUDIO_ENABLE = no # Audio output on port C6 | 15 | AUDIO_ENABLE = no # Audio output on port C6 |
16 | UNICODE_ENABLE = no # Unicode | 16 | UNICODE_ENABLE = no # Unicode |
17 | BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID | 17 | BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID |
18 | RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. | 18 | RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. |
19 | 19 | ||
20 | # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE | 20 | # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE |
21 | SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend | 21 | SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend |
22 | 22 | ||
23 | # Combos not working yet | 23 | COMBO_ENABLE = yes |
24 | COMBO_ENABLE = no | ||
diff --git a/keyboards/planck/keymaps/narze/config.h b/keyboards/planck/keymaps/narze/config.h index 19d784b2b..9c5876a13 100644 --- a/keyboards/planck/keymaps/narze/config.h +++ b/keyboards/planck/keymaps/narze/config.h | |||
@@ -1,7 +1,4 @@ | |||
1 | #ifndef CONFIG_USER_H | 1 | #pragma once |
2 | #define CONFIG_USER_H | ||
3 | |||
4 | #include "../../config.h" | ||
5 | 2 | ||
6 | /* | 3 | /* |
7 | * MIDI options | 4 | * MIDI options |
@@ -26,7 +23,8 @@ | |||
26 | /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ | 23 | /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ |
27 | //#define MIDI_TONE_KEYCODE_OCTAVES 2 | 24 | //#define MIDI_TONE_KEYCODE_OCTAVES 2 |
28 | 25 | ||
29 | #define TAPPING_TERM 200 | 26 | #undef TAPPING_TERM |
27 | #define TAPPING_TERM 100 | ||
30 | 28 | ||
31 | #define COMBO_TERM 20 | 29 | #define COMBO_TERM 20 |
32 | #define COMBO_COUNT 1 | 30 | #define COMBO_COUNT 1 |
@@ -38,4 +36,11 @@ | |||
38 | 36 | ||
39 | #define MOUSEKEY_DELAY 100 | 37 | #define MOUSEKEY_DELAY 100 |
40 | 38 | ||
39 | #ifdef AUDIO_ENABLE | ||
40 | #define STARTUP_SONG SONG(PLANCK_SOUND) | ||
41 | |||
42 | #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ | ||
43 | SONG(COLEMAK_SOUND), \ | ||
44 | SONG(DVORAK_SOUND) \ | ||
45 | } | ||
41 | #endif | 46 | #endif |
diff --git a/keyboards/planck/keymaps/narze/keymap.c b/keyboards/planck/keymaps/narze/keymap.c index 8f6cb0626..24740f92d 100644 --- a/keyboards/planck/keymaps/narze/keymap.c +++ b/keyboards/planck/keymaps/narze/keymap.c | |||
@@ -1,89 +1,49 @@ | |||
1 | // This is the canonical layout file for the Quantum project. If you want to add another keyboard, | 1 | #include QMK_KEYBOARD_H |
2 | // this is the style you want to emulate. | 2 | #include "narze.h" |
3 | |||
4 | #pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example" | ||
5 | #include "planck.h" | ||
6 | #include "action_layer.h" | ||
7 | #ifdef AUDIO_ENABLE | 3 | #ifdef AUDIO_ENABLE |
8 | #include "audio.h" | 4 | #include "audio.h" |
9 | #endif | 5 | #endif |
10 | #include "eeconfig.h" | ||
11 | #include "keymap_colemak.h" | 6 | #include "keymap_colemak.h" |
12 | 7 | ||
13 | extern keymap_config_t keymap_config; | 8 | extern keymap_config_t keymap_config; |
14 | 9 | ||
15 | // Each layer gets a name for readability, which is then used in the keymap matrix below. | ||
16 | // The underscores don't mean anything - you can have a layer called STUFF or any other name. | ||
17 | // Layer names don't all need to be of the same length, obviously, and you can also skip them | ||
18 | // entirely and just use numbers. | ||
19 | |||
20 | enum planck_layers { | 10 | enum planck_layers { |
21 | _QWERTY, | 11 | _QWERTY, |
22 | _COLEMAK, | 12 | _COLEMAK, |
23 | _QWOC, | 13 | _QWOC, |
24 | _LOWER, | 14 | _LOWER, |
25 | _RAISE, | 15 | _RAISE, |
26 | _PLOVER, | 16 | _PLOVER, |
27 | _SUPERDUPER, | 17 | _SUPERDUPER, |
28 | _MOUSE, | 18 | _MOUSE, |
29 | _ADJUST | 19 | _ADJUST |
30 | }; | 20 | }; |
31 | 21 | ||
32 | enum planck_keycodes { | 22 | enum planck_keycodes { |
33 | QWERTY = SAFE_RANGE, | 23 | QWERTY = SAFE_RANGE, |
34 | COLEMAK, | 24 | COLEMAK, |
35 | QWOC, | 25 | QWOC, |
36 | PLOVER, | 26 | PLOVER, |
37 | SUPERDUPER, | 27 | SUPERDUPER, |
38 | MOUSE, | 28 | MOUSE, |
39 | LOWER, | 29 | LOWER, |
40 | RAISE, | 30 | RAISE, |
41 | BACKLIT, | 31 | BACKLIT, |
42 | EXT_PLV, | 32 | EXT_PLV, |
43 | SDTOGG, // Toggle SuperDuper | 33 | SDTOGG, // Toggle SuperDuper |
44 | }; | 34 | GUI_UNDS, |
45 | 35 | LSFT_LPRN, | |
46 | enum functions { | ||
47 | M_GUI_UNDS, // Simulate GUI_T(KC_UNDS) | ||
48 | M_SFT_PO, // SFT_T(KC_LPRN) | ||
49 | }; | 36 | }; |
50 | 37 | ||
51 | // Timer for custom mod tap | ||
52 | static uint16_t m_gui_unds_timer; | ||
53 | static uint16_t m_sft_po_timer; | ||
54 | |||
55 | // Narze : Custom Macros | 38 | // Narze : Custom Macros |
56 | #define HPR_ESC ALL_T(KC_ESC) | 39 | #define HPR_ESC ALL_T(KC_ESC) |
57 | #define SFT_ENT SFT_T(KC_ENT) | 40 | #define SFT_ENT SFT_T(KC_ENT) |
58 | #define SFT_PO F(M_SFT_PO) | ||
59 | #define GUI_MINS GUI_T(KC_MINS) | 41 | #define GUI_MINS GUI_T(KC_MINS) |
60 | #define GUI_UNDS F(M_GUI_UNDS) | ||
61 | |||
62 | // Combo : SuperDuper layer from S+D (R+S in Colemak) | ||
63 | #define SUPERDUPER_COMBO_COUNT 3 | ||
64 | #define EECONFIG_SUPERDUPER_INDEX (uint8_t *) 19 | ||
65 | 42 | ||
66 | enum process_combo_event { | 43 | enum process_combo_event { |
67 | CB_SUPERDUPER, | 44 | CB_SUPERDUPER, |
68 | }; | 45 | }; |
69 | 46 | ||
70 | const uint16_t PROGMEM superduper_combos[SUPERDUPER_COMBO_COUNT][3] = { | ||
71 | [_QWERTY] = {KC_S, KC_D, COMBO_END}, | ||
72 | [_COLEMAK] = {KC_R, KC_S, COMBO_END}, | ||
73 | [_QWOC] = {CM_S, CM_D, COMBO_END}, | ||
74 | }; | ||
75 | |||
76 | combo_t key_combos[COMBO_COUNT] = { | ||
77 | [CB_SUPERDUPER] = COMBO_ACTION(superduper_combos[_QWERTY]), | ||
78 | }; | ||
79 | |||
80 | volatile bool superduper_enabled = true; | ||
81 | |||
82 | const uint16_t empty_combo[] = {COMBO_END}; | ||
83 | |||
84 | void set_superduper_key_combos(void); | ||
85 | void clear_superduper_key_combos(void); | ||
86 | |||
87 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | 47 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
88 | 48 | ||
89 | /* Qwerty | 49 | /* Qwerty |
@@ -97,12 +57,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
97 | * | Rse/[| Ctrl | Alt | GUI/_|Lower | Space |Raise | GUI/-| Alt | Ctrl | Low/]| | 57 | * | Rse/[| Ctrl | Alt | GUI/_|Lower | Space |Raise | GUI/-| Alt | Ctrl | Low/]| |
98 | * `-----------------------------------------------------------------------------------' | 58 | * `-----------------------------------------------------------------------------------' |
99 | */ | 59 | */ |
100 | [_QWERTY] = { | 60 | [_QWERTY] = LAYOUT_planck_grid( |
101 | {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, | 61 | KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, |
102 | {HPR_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, | 62 | HPR_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, |
103 | {SFT_PO, LT(_MOUSE, KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_ENT}, | 63 | LSFT_LPRN, LT(_MOUSE, KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_ENT, |
104 | {LT(_RAISE, KC_LBRC), KC_LCTL, KC_LALT, GUI_UNDS, LOWER, KC_SPC, KC_SPC, RAISE, GUI_MINS, KC_RALT, KC_RCTL, LT(_LOWER, KC_RBRC)} | 64 | LT(_RAISE, KC_LBRC), KC_LCTL, KC_LALT, GUI_UNDS, LOWER, KC_SPC, KC_SPC, RAISE, GUI_MINS, KC_RALT, KC_RCTL, LT(_LOWER, KC_RBRC) |
105 | }, | 65 | ), |
106 | 66 | ||
107 | /* Colemak | 67 | /* Colemak |
108 | * ,-----------------------------------------------------------------------------------. | 68 | * ,-----------------------------------------------------------------------------------. |
@@ -115,20 +75,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
115 | * | Brite| Ctrl | Alt | GUI/_|Lower | Space |Raise | GUI/-| Alt | Ctrl | Low/]| | 75 | * | Brite| Ctrl | Alt | GUI/_|Lower | Space |Raise | GUI/-| Alt | Ctrl | Low/]| |
116 | * `-----------------------------------------------------------------------------------' | 76 | * `-----------------------------------------------------------------------------------' |
117 | */ | 77 | */ |
118 | [_COLEMAK] = { | 78 | [_COLEMAK] = LAYOUT_planck_grid( |
119 | {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, | 79 | KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, |
120 | {HPR_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, | 80 | HPR_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, |
121 | {SFT_PO, LT(_MOUSE, KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_ENT}, | 81 | LSFT_LPRN, LT(_MOUSE, KC_Z), KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, LT(_SUPERDUPER, KC_SLSH), SFT_ENT, |
122 | {LT(_RAISE, KC_LBRC), KC_LCTL, KC_LALT, GUI_UNDS, LOWER, KC_SPC, KC_SPC, RAISE, GUI_MINS, KC_RALT, KC_RCTL, LT(_LOWER, KC_RBRC)} | 82 | LT(_RAISE, KC_LBRC), KC_LCTL, KC_LALT, GUI_UNDS, LOWER, KC_SPC, KC_SPC, RAISE, GUI_MINS, KC_RALT, KC_RCTL, LT(_LOWER, KC_RBRC) |
123 | }, | 83 | ), |
124 | 84 | ||
125 | /* Qwerty on software Colemak : Useful for gaming with qwerty keymaps! */ | 85 | /* Qwerty on software Colemak : Useful for gaming with qwerty keymaps! */ |
126 | [_QWOC] = { | 86 | [_QWOC] = LAYOUT_planck_grid( |
127 | {KC_TAB, CM_Q, CM_W, CM_E, CM_R, CM_T, CM_Y, CM_U, CM_I, CM_O, CM_P, KC_BSPC}, | 87 | KC_TAB, CM_Q, CM_W, CM_E, CM_R, CM_T, CM_Y, CM_U, CM_I, CM_O, CM_P, KC_BSPC, |
128 | {HPR_ESC, CM_A, CM_S, CM_D, CM_F, CM_G, CM_H, CM_J, CM_K, CM_L, CM_SCLN, KC_QUOT}, | 88 | HPR_ESC, CM_A, CM_S, CM_D, CM_F, CM_G, CM_H, CM_J, CM_K, CM_L, CM_SCLN, KC_QUOT, |
129 | {SFT_PO, LT(_MOUSE, CM_Z), CM_X, CM_C, CM_V, CM_B, CM_N, CM_M, CM_COMM, CM_DOT, LT(_SUPERDUPER, CM_SLSH), SFT_ENT}, | 89 | LSFT_LPRN, LT(_MOUSE, CM_Z), CM_X, CM_C, CM_V, CM_B, CM_N, CM_M, CM_COMM, CM_DOT, LT(_SUPERDUPER, CM_SLSH), SFT_ENT, |
130 | {LT(_RAISE, KC_LBRC), KC_LCTL, KC_LALT, GUI_UNDS, LOWER, KC_SPC, KC_SPC, RAISE, GUI_MINS, KC_RALT, KC_RCTL, LT(_LOWER, KC_RBRC)} | 90 | LT(_RAISE, KC_LBRC), KC_LCTL, KC_LALT, GUI_UNDS, LOWER, KC_SPC, KC_SPC, RAISE, GUI_MINS, KC_RALT, KC_RCTL, LT(_LOWER, KC_RBRC) |
131 | }, | 91 | ), |
132 | 92 | ||
133 | /* Lower | 93 | /* Lower |
134 | * ,-----------------------------------------------------------------------------------. | 94 | * ,-----------------------------------------------------------------------------------. |
@@ -136,17 +96,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
136 | * |------+------+------+------+------+-------------+------+------+------+------+------| | 96 | * |------+------+------+------+------+-------------+------+------+------+------+------| |
137 | * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | | 97 | * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | |
138 | * |------+------+------+------+------+------|------+------+------+------+------+------| | 98 | * |------+------+------+------+------+------|------+------+------+------+------+------| |
139 | * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Sft/Ent| | 99 | * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ | | | |Sft/Ent| |
140 | * |------+------+------+------+------+------+------+------+------+------+------+------| | 100 | * |------+------+------+------+------+------+------+------+------+------+------+------| |
141 | * | | | | | | | | Next | Vol- | Vol+ | Play | | 101 | * | | | | | | | | Next | Vol- | Vol+ | Play | |
142 | * `-----------------------------------------------------------------------------------' | 102 | * `-----------------------------------------------------------------------------------' |
143 | */ | 103 | */ |
144 | [_LOWER] = { | 104 | [_LOWER] = LAYOUT_planck_grid( |
145 | {KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC}, | 105 | KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, |
146 | {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, | 106 | KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, |
147 | {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______}, | 107 | _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),_______,_______, _______, _______, |
148 | {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} | 108 | _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY |
149 | }, | 109 | ), |
150 | 110 | ||
151 | /* Raise | 111 | /* Raise |
152 | * ,-----------------------------------------------------------------------------------. | 112 | * ,-----------------------------------------------------------------------------------. |
@@ -154,17 +114,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
154 | * |------+------+------+------+------+-------------+------+------+------+------+------| | 114 | * |------+------+------+------+------+-------------+------+------+------+------+------| |
155 | * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | | 115 | * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | |
156 | * |------+------+------+------+------+------|------+------+------+------+------+------| | 116 | * |------+------+------+------+------+------|------+------+------+------+------+------| |
157 | * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Sft/Ent| | 117 | * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # | | | |Sft/Ent| |
158 | * |------+------+------+------+------+------+------+------+------+------+------+------| | 118 | * |------+------+------+------+------+------+------+------+------+------+------+------| |
159 | * | | | | | | | | Next | Vol- | Vol+ | Play | | 119 | * | | | | | | | | Next | Vol- | Vol+ | Play | |
160 | * `-----------------------------------------------------------------------------------' | 120 | * `-----------------------------------------------------------------------------------' |
161 | */ | 121 | */ |
162 | [_RAISE] = { | 122 | [_RAISE] = LAYOUT_planck_grid( |
163 | {KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, | 123 | KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, |
164 | {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, | 124 | KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, |
165 | {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______}, | 125 | _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, _______, _______, _______, _______, |
166 | {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} | 126 | _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY |
167 | }, | 127 | ), |
168 | 128 | ||
169 | /* Plover layer (http://opensteno.org) | 129 | /* Plover layer (http://opensteno.org) |
170 | * ,-----------------------------------------------------------------------------------. | 130 | * ,-----------------------------------------------------------------------------------. |
@@ -178,12 +138,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
178 | * `-----------------------------------------------------------------------------------' | 138 | * `-----------------------------------------------------------------------------------' |
179 | */ | 139 | */ |
180 | 140 | ||
181 | [_PLOVER] = { | 141 | [_PLOVER] = LAYOUT_planck_grid( |
182 | {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 }, | 142 | KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 , |
183 | {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC}, | 143 | XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, |
184 | {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, | 144 | XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, |
185 | {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX} | 145 | EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX |
186 | }, | 146 | ), |
187 | 147 | ||
188 | /* SuperDuper : https://gist.github.com/narze/861e2167784842d38771 | 148 | /* SuperDuper : https://gist.github.com/narze/861e2167784842d38771 |
189 | * /-----------------------------------------------------------------------------------\ | 149 | * /-----------------------------------------------------------------------------------\ |
@@ -196,12 +156,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
196 | * | | | | | | Shift | | | | | | | 156 | * | | | | | | Shift | | | | | | |
197 | * \-----------------------------------------------------------------------------------/ | 157 | * \-----------------------------------------------------------------------------------/ |
198 | */ | 158 | */ |
199 | [_SUPERDUPER] = { | 159 | [_SUPERDUPER] = LAYOUT_planck_grid( |
200 | {_______, _______, _______, _______, _______, _______, _______, _______, S(LGUI(KC_LBRC)), S(LGUI(KC_RBRC)), _______, _______}, | 160 | _______, _______, _______, _______, _______, _______, _______, _______, S(LGUI(KC_LBRC)), S(LGUI(KC_RBRC)), _______, _______, |
201 | {_______, KC_LALT, _______, _______, KC_BSPC, KC_LGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_DEL, _______}, | 161 | _______, KC_LALT, _______, _______, KC_BSPC, KC_LGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_DEL, _______, |
202 | {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, | 162 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, |
203 | {_______, _______, _______, _______, _______, KC_LSFT, KC_LSFT, _______, _______, _______, _______, _______} | 163 | _______, _______, _______, _______, _______, KC_LSFT, KC_LSFT, _______, _______, _______, _______, _______ |
204 | }, | 164 | ), |
205 | 165 | ||
206 | /* Mouse | 166 | /* Mouse |
207 | * /-----------------------------------------------------------------------------------\ | 167 | * /-----------------------------------------------------------------------------------\ |
@@ -214,12 +174,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
214 | * | | | | | M2 | LeftClick | M2 | | | | | | 174 | * | | | | | M2 | LeftClick | M2 | | | | | |
215 | * \-----------------------------------------------------------------------------------/ | 175 | * \-----------------------------------------------------------------------------------/ |
216 | */ | 176 | */ |
217 | [_MOUSE] = { | 177 | [_MOUSE] = LAYOUT_planck_grid( |
218 | {_______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, _______, _______, KC_WH_U, KC_WH_D, _______, _______}, | 178 | _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, _______, _______, KC_WH_U, KC_WH_D, _______, _______, |
219 | {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______}, | 179 | _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______, |
220 | {_______, _______, _______, _______, _______, KC_BTN3, KC_BTN3, _______, _______, _______, _______, _______}, | 180 | _______, _______, _______, _______, _______, KC_BTN3, KC_BTN3, _______, _______, _______, _______, _______, |
221 | {_______, _______, _______, _______, KC_BTN2, KC_BTN1, KC_BTN1, KC_BTN2, _______, _______, _______, _______} | 181 | _______, _______, _______, _______, KC_BTN2, KC_BTN1, KC_BTN1, KC_BTN2, _______, _______, _______, _______ |
222 | }, | 182 | ), |
223 | 183 | ||
224 | /* Adjust (Lower + Raise) | 184 | /* Adjust (Lower + Raise) |
225 | * ,-----------------------------------------------------------------------------------. | 185 | * ,-----------------------------------------------------------------------------------. |
@@ -232,290 +192,161 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
232 | * | | | | | | | | | | | | | 192 | * | | | | | | | | | | | | |
233 | * `-----------------------------------------------------------------------------------' | 193 | * `-----------------------------------------------------------------------------------' |
234 | */ | 194 | */ |
235 | [_ADJUST] = { | 195 | [_ADJUST] = LAYOUT_planck_grid( |
236 | {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL}, | 196 | _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, |
237 | {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, QWOC, PLOVER, _______}, | 197 | _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, QWOC, PLOVER, _______, |
238 | {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, SDTOGG, _______, _______, _______, _______}, | 198 | _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, SDTOGG, _______, _______, _______, _______, |
239 | {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} | 199 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BACKLIT |
240 | } | 200 | ) |
241 | 201 | ||
242 | }; | 202 | }; |
243 | 203 | ||
244 | #ifdef AUDIO_ENABLE | 204 | #ifdef AUDIO_ENABLE |
245 | float tone_startup[][2] = SONG(STARTUP_SOUND); | 205 | float tone_plover[][2] = SONG(PLOVER_SOUND); |
246 | float tone_qwerty[][2] = SONG(QWERTY_SOUND); | 206 | float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); |
247 | float tone_qwoc[][2] = SONG(DVORAK_SOUND); | 207 | float tone_coin[][2] = SONG(VIOLIN_SOUND); |
248 | float tone_colemak[][2] = SONG(COLEMAK_SOUND); | 208 | float tone_goodbye[][2] = SONG(GOODBYE_SOUND); |
249 | float tone_plover[][2] = SONG(PLOVER_SOUND); | ||
250 | float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND); | ||
251 | float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); | ||
252 | float tone_coin[][2] = SONG(COIN_SOUND); | ||
253 | float tone_sonic_ring[][2] = SONG(SONIC_RING); | ||
254 | |||
255 | float tone_goodbye[][2] = SONG(GOODBYE_SOUND); | ||
256 | float tone_superduper[][2] = SONG(SUPER_DUPER_SOUND); | ||
257 | #endif | 209 | #endif |
258 | 210 | ||
259 | void persistant_default_layer_set(uint16_t default_layer) { | ||
260 | eeconfig_update_default_layer(default_layer); | ||
261 | default_layer_set(default_layer); | ||
262 | } | ||
263 | |||
264 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | 211 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
265 | switch (keycode) { | 212 | switch (keycode) { |
266 | case QWERTY: | 213 | case QWERTY: |
267 | if (record->event.pressed) { | 214 | if (record->event.pressed) { |
268 | #ifdef AUDIO_ENABLE | 215 | set_single_persistent_default_layer(_QWERTY); |
269 | PLAY_NOTE_ARRAY(tone_qwerty, false, 0); | 216 | |
270 | #endif | 217 | set_superduper_key_combo_layer(_QWERTY); |
271 | persistant_default_layer_set(1UL<<_QWERTY); | 218 | } |
272 | 219 | return false; | |
273 | key_combos[CB_SUPERDUPER].keys = superduper_combos[_QWERTY]; | 220 | |
274 | eeprom_update_byte(EECONFIG_SUPERDUPER_INDEX, _QWERTY); | 221 | case COLEMAK: |
275 | } | 222 | if (record->event.pressed) { |
276 | return false; | 223 | set_single_persistent_default_layer(_COLEMAK); |
277 | break; | 224 | |
278 | case COLEMAK: | 225 | set_superduper_key_combo_layer(_COLEMAK); |
279 | if (record->event.pressed) { | 226 | } |
280 | #ifdef AUDIO_ENABLE | 227 | return false; |
281 | PLAY_NOTE_ARRAY(tone_colemak, false, 0); | 228 | |
282 | #endif | 229 | case QWOC: |
283 | persistant_default_layer_set(1UL<<_COLEMAK); | 230 | if (record->event.pressed) { |
284 | 231 | set_single_persistent_default_layer(_QWOC); | |
285 | key_combos[CB_SUPERDUPER].keys = superduper_combos[_COLEMAK]; | 232 | |
286 | eeprom_update_byte(EECONFIG_SUPERDUPER_INDEX, _COLEMAK); | 233 | set_superduper_key_combo_layer(_QWOC); |
287 | } | 234 | } |
288 | return false; | 235 | return false; |
289 | break; | 236 | |
290 | case QWOC: | 237 | case LOWER: |
291 | if (record->event.pressed) { | 238 | if (record->event.pressed) { |
292 | #ifdef AUDIO_ENABLE | 239 | layer_on(_LOWER); |
293 | PLAY_NOTE_ARRAY(tone_qwoc, false, 0); | 240 | update_tri_layer(_LOWER, _RAISE, _ADJUST); |
294 | #endif | 241 | } else { |
295 | persistant_default_layer_set(1UL<<_QWOC); | 242 | layer_off(_LOWER); |
296 | 243 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | |
297 | key_combos[CB_SUPERDUPER].keys = superduper_combos[_QWOC]; | 244 | } |
298 | eeprom_update_byte(EECONFIG_SUPERDUPER_INDEX, _QWOC); | 245 | return false; |
299 | } | 246 | |
300 | return false; | 247 | case RAISE: |
301 | break; | 248 | if (record->event.pressed) { |
302 | case LOWER: | 249 | layer_on(_RAISE); |
303 | if (record->event.pressed) { | 250 | update_tri_layer(_LOWER, _RAISE, _ADJUST); |
304 | layer_on(_LOWER); | 251 | } else { |
305 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | 252 | layer_off(_RAISE); |
306 | } else { | 253 | update_tri_layer(_LOWER, _RAISE, _ADJUST); |
307 | layer_off(_LOWER); | 254 | } |
308 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | 255 | return false; |
309 | } | 256 | |
310 | return false; | 257 | case BACKLIT: |
311 | break; | 258 | if (record->event.pressed) { |
312 | case RAISE: | 259 | register_code(KC_RSFT); |
313 | if (record->event.pressed) { | 260 | #ifdef BACKLIGHT_ENABLE |
314 | layer_on(_RAISE); | 261 | backlight_step(); |
315 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | 262 | #endif |
316 | } else { | 263 | } else { |
317 | layer_off(_RAISE); | 264 | unregister_code(KC_RSFT); |
318 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | 265 | } |
319 | } | 266 | return false; |
320 | return false; | 267 | |
321 | break; | 268 | case PLOVER: |
322 | case BACKLIT: | 269 | if (record->event.pressed) { |
323 | if (record->event.pressed) { | 270 | #ifdef AUDIO_ENABLE |
324 | register_code(KC_RSFT); | 271 | stop_all_notes(); |
325 | #ifdef BACKLIGHT_ENABLE | 272 | PLAY_SONG(tone_plover); |
326 | backlight_step(); | 273 | #endif |
327 | #endif | 274 | layer_off(_RAISE); |
328 | } else { | 275 | layer_off(_LOWER); |
329 | unregister_code(KC_RSFT); | 276 | layer_off(_ADJUST); |
330 | } | 277 | layer_on(_PLOVER); |
331 | return false; | 278 | if (!eeconfig_is_enabled()) { |
332 | break; | 279 | eeconfig_init(); |
333 | case PLOVER: | 280 | } |
334 | if (record->event.pressed) { | 281 | keymap_config.raw = eeconfig_read_keymap(); |
335 | #ifdef AUDIO_ENABLE | 282 | keymap_config.nkro = 1; |
336 | stop_all_notes(); | 283 | eeconfig_update_keymap(keymap_config.raw); |
337 | PLAY_NOTE_ARRAY(tone_plover, false, 0); | 284 | } |
338 | #endif | 285 | return false; |
339 | layer_off(_RAISE); | 286 | |
340 | layer_off(_LOWER); | 287 | case EXT_PLV: |
341 | layer_off(_ADJUST); | 288 | if (record->event.pressed) { |
342 | layer_on(_PLOVER); | 289 | #ifdef AUDIO_ENABLE |
343 | if (!eeconfig_is_enabled()) { | 290 | PLAY_SONG(tone_plover_gb); |
344 | eeconfig_init(); | 291 | #endif |
345 | } | 292 | layer_off(_PLOVER); |
346 | keymap_config.raw = eeconfig_read_keymap(); | 293 | } |
347 | keymap_config.nkro = 1; | 294 | return false; |
348 | eeconfig_update_keymap(keymap_config.raw); | 295 | |
349 | } | 296 | case SDTOGG: |
350 | return false; | 297 | if (record->event.pressed) { |
351 | break; | 298 | bool enabled = toggle_superduper_mode(); |
352 | case EXT_PLV: | 299 | |
353 | if (record->event.pressed) { | 300 | #ifdef AUDIO_ENABLE |
354 | #ifdef AUDIO_ENABLE | 301 | if (enabled) { |
355 | PLAY_NOTE_ARRAY(tone_plover_gb, false, 0); | 302 | PLAY_SONG(tone_coin); |
356 | #endif | 303 | } else { |
357 | layer_off(_PLOVER); | 304 | PLAY_SONG(tone_goodbye); |
358 | } | 305 | } |
359 | return false; | 306 | #endif |
360 | break; | 307 | } |
361 | case SDTOGG: | 308 | return false; |
362 | if (record->event.pressed) { | 309 | |
363 | superduper_enabled = !superduper_enabled; | 310 | // Macros |
364 | 311 | ||
365 | if (superduper_enabled) { | 312 | // 1. Hold for LGUI, tap for Underscore |
366 | set_superduper_key_combos(); | 313 | case GUI_UNDS: |
367 | 314 | perform_space_cadet(record, KC_LGUI, KC_LSFT, KC_MINS); | |
368 | #ifdef AUDIO_ENABLE | 315 | return false; |
369 | PLAY_NOTE_ARRAY(tone_sonic_ring, false, 0); | 316 | |
370 | #endif | 317 | // 2. Hold for LSHIFT, tap for Parens open |
371 | } else { | 318 | case LSFT_LPRN: |
372 | clear_superduper_key_combos(); | 319 | perform_space_cadet(record, KC_LSFT, KC_LSFT, KC_9); |
373 | 320 | return false; | |
374 | #ifdef AUDIO_ENABLE | 321 | |
375 | PLAY_NOTE_ARRAY(tone_coin, false, 0); | 322 | default: |
376 | #endif | 323 | return true; |
377 | } | 324 | } |
378 | } | 325 | return true; |
379 | return false; | ||
380 | break; | ||
381 | } | ||
382 | return true; | ||
383 | } | 326 | } |
384 | 327 | ||
385 | void matrix_init_user(void) { | 328 | void matrix_init_user(void) { |
386 | #ifdef AUDIO_ENABLE | 329 | #ifdef AUDIO_ENABLE |
387 | startup_user(); | 330 | startup_user(); |
388 | #endif | 331 | #endif |
389 | } | 332 | } |
390 | 333 | ||
391 | void matrix_setup(void) { | 334 | void matrix_setup(void) { |
392 | set_superduper_key_combos(); | 335 | set_superduper_key_combos(); |
393 | } | ||
394 | |||
395 | void set_superduper_key_combos(void) { | ||
396 | uint8_t layer = eeprom_read_byte(EECONFIG_SUPERDUPER_INDEX); | ||
397 | |||
398 | switch (layer) { | ||
399 | case _QWERTY: | ||
400 | case _COLEMAK: | ||
401 | case _QWOC: | ||
402 | key_combos[CB_SUPERDUPER].keys = superduper_combos[layer]; | ||
403 | break; | ||
404 | } | ||
405 | } | ||
406 | |||
407 | void clear_superduper_key_combos(void) { | ||
408 | key_combos[CB_SUPERDUPER].keys = empty_combo; | ||
409 | } | 336 | } |
410 | 337 | ||
411 | void matrix_scan_user(void) { | 338 | void matrix_scan_user(void) { |
412 | } | 339 | } |
413 | 340 | ||
414 | #ifdef AUDIO_ENABLE | ||
415 | |||
416 | void startup_user() | ||
417 | { | ||
418 | _delay_ms(20); // gets rid of tick | ||
419 | PLAY_NOTE_ARRAY(tone_startup, false, 0); | ||
420 | } | ||
421 | |||
422 | void shutdown_user() | ||
423 | { | ||
424 | PLAY_NOTE_ARRAY(tone_goodbye, false, 0); | ||
425 | _delay_ms(150); | ||
426 | stop_all_notes(); | ||
427 | } | ||
428 | |||
429 | void music_on_user(void) | ||
430 | { | ||
431 | music_scale_user(); | ||
432 | } | ||
433 | |||
434 | void music_scale_user(void) | ||
435 | { | ||
436 | PLAY_NOTE_ARRAY(music_scale, false, 0); | ||
437 | } | ||
438 | |||
439 | #endif | ||
440 | |||
441 | // Combos | ||
442 | |||
443 | void process_combo_event(uint8_t combo_index, bool pressed) { | 341 | void process_combo_event(uint8_t combo_index, bool pressed) { |
444 | if (pressed) { | 342 | if (pressed) { |
445 | switch(combo_index) { | 343 | switch(combo_index) { |
446 | case CB_SUPERDUPER: | 344 | case CB_SUPERDUPER: |
447 | layer_on(_SUPERDUPER); | 345 | layer_on(_SUPERDUPER); |
448 | 346 | break; | |
449 | #ifdef AUDIO_ENABLE | 347 | } |
450 | PLAY_NOTE_ARRAY(tone_superduper, false, 0); | 348 | } else { |
451 | #endif | 349 | layer_off(_SUPERDUPER); |
452 | break; | 350 | unregister_mods(MOD_BIT(KC_LGUI) | MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT)); // Sometimes mods are held, unregister them |
453 | } | 351 | } |
454 | } else { | ||
455 | layer_off(_SUPERDUPER); | ||
456 | unregister_mods(MOD_BIT(KC_LGUI) | MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT)); // Sometimes mods are held, unregister them | ||
457 | } | ||
458 | } | 352 | } |
459 | |||
460 | // Macros | ||
461 | |||
462 | const uint16_t PROGMEM fn_actions[] = { | ||
463 | [M_GUI_UNDS] = ACTION_MACRO_TAP(M_GUI_UNDS), | ||
464 | [M_SFT_PO] = ACTION_MACRO_TAP(M_SFT_PO), | ||
465 | }; | ||
466 | |||
467 | const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) | ||
468 | { | ||
469 | bool tap_not_interrupted = record->tap.count > 0 && !record->tap.interrupted; | ||
470 | |||
471 | switch(id) { | ||
472 | // Hold for LGUI, tap for Underscore | ||
473 | case M_GUI_UNDS: | ||
474 | if (record->event.pressed) { | ||
475 | m_gui_unds_timer = timer_read(); | ||
476 | |||
477 | if (!tap_not_interrupted) { | ||
478 | register_mods(MOD_BIT(KC_LGUI)); | ||
479 | } | ||
480 | } else { | ||
481 | if (tap_not_interrupted && timer_elapsed(m_gui_unds_timer) < TAPPING_TERM) { | ||
482 | #ifdef AUDIO_ENABLE | ||
483 | PLAY_NOTE_ARRAY(tone_superduper, false, 0); | ||
484 | #endif | ||
485 | |||
486 | add_weak_mods(MOD_BIT(KC_LSFT)); | ||
487 | send_keyboard_report(); | ||
488 | register_code(KC_MINS); | ||
489 | unregister_code(KC_MINS); | ||
490 | del_weak_mods(MOD_BIT(KC_LSFT)); | ||
491 | send_keyboard_report(); | ||
492 | record->tap.count = 0; // ad hoc: cancel tap | ||
493 | } else { | ||
494 | unregister_mods(MOD_BIT(KC_LGUI)); | ||
495 | } | ||
496 | } | ||
497 | break; | ||
498 | // Hold for LSHIFT, tap for Parens open | ||
499 | case M_SFT_PO: | ||
500 | if (record->event.pressed) { | ||
501 | m_sft_po_timer = timer_read(); | ||
502 | |||
503 | if (!tap_not_interrupted) { | ||
504 | register_mods(MOD_BIT(KC_LSFT)); | ||
505 | } | ||
506 | } else { | ||
507 | if (tap_not_interrupted && timer_elapsed(m_sft_po_timer) < TAPPING_TERM) { | ||
508 | #ifdef AUDIO_ENABLE | ||
509 | PLAY_NOTE_ARRAY(tone_superduper, false, 0); | ||
510 | #endif | ||
511 | |||
512 | record->tap.count = 0; | ||
513 | return MACRO(D(RSFT), T(9), U(RSFT), END); | ||
514 | } else { | ||
515 | unregister_mods(MOD_BIT(KC_LSFT)); | ||
516 | } | ||
517 | } | ||
518 | break; | ||
519 | } | ||
520 | return MACRO_NONE; | ||
521 | }; | ||
diff --git a/keyboards/planck/keymaps/narze/readme.md b/keyboards/planck/keymaps/narze/readme.md index 6824251e8..737171bca 100644 --- a/keyboards/planck/keymaps/narze/readme.md +++ b/keyboards/planck/keymaps/narze/readme.md | |||
@@ -22,10 +22,11 @@ Press `S+D` simultaneously and hold, then... | |||
22 | 22 | ||
23 | ## Build instructions | 23 | ## Build instructions |
24 | - `cd /path/to/qmk_firmware` | 24 | - `cd /path/to/qmk_firmware` |
25 | - `docker run -e keymap=narze -e subproject=rev4 -e keyboard=planck --rm -v $('pwd'):/qmk:rw edasque/qmk_firmware` | 25 | - Ensure latest libraries are loaded `make git-submodule` |
26 | - `dfu-programmer atmega32u4 erase && dfu-programmer atmega32u4 flash .build/planck_rev4_narze.hex` | 26 | - Build with docker |
27 | 27 | - Planck Rev. 4 : `util/docker_build.sh planck/rev4:narze` | |
28 | ## TODO | 28 | - Planck Light : `util/docker_build.sh planck/light:narze` |
29 | - [] Make SuperDuper mode fully-compatible in Windows by swapping GUI with Ctrl | 29 | - Flash hex file |
30 | 30 | - Using dfu-programmer `dfu-programmer atmega32u4 erase --force && dfu-programmer atmega32u4 flash .build/planck_rev4_narze.hex` | |
31 | 31 | - For Planck Light change the target microcontroller `dfu-programmer at90usb1286 erase --force && dfu-programmer at90usb1286 flash .build/planck_light_narze.hex` | |
32 | - Use [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) | ||
diff --git a/keyboards/planck/keymaps/narze/rules.mk b/keyboards/planck/keymaps/narze/rules.mk index 286a2ffdc..9b56dc18f 100644 --- a/keyboards/planck/keymaps/narze/rules.mk +++ b/keyboards/planck/keymaps/narze/rules.mk | |||
@@ -1,23 +1,25 @@ | |||
1 | 1 | ||
2 | 2 | ||
3 | # Build Options | ||
4 | # change to "no" to disable the options, or define them in the Makefile in | ||
5 | # the appropriate keymap folder that will get included automatically | ||
6 | # | ||
7 | BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) | 3 | BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) |
8 | MOUSEKEY_ENABLE = yes # Mouse keys(+4700) | ||
9 | EXTRAKEY_ENABLE = yes # Audio control and System control(+450) | 4 | EXTRAKEY_ENABLE = yes # Audio control and System control(+450) |
10 | CONSOLE_ENABLE = no # Console for debug(+400) | 5 | CONSOLE_ENABLE = no # Console for debug(+400) |
11 | COMMAND_ENABLE = yes # Commands for debug and configuration | 6 | COMMAND_ENABLE = yes # Commands for debug and configuration |
12 | NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work | 7 | NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work |
13 | BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality | 8 | BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality |
14 | MIDI_ENABLE = no # MIDI controls | ||
15 | AUDIO_ENABLE = no # Audio output on port C6 | ||
16 | UNICODE_ENABLE = no # Unicode | 9 | UNICODE_ENABLE = no # Unicode |
17 | BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID | 10 | BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID |
18 | RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. | 11 | RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. |
12 | AUDIO_ENABLE = yes | ||
19 | 13 | ||
20 | # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE | 14 | # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE |
21 | SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend | 15 | SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend |
22 | 16 | ||
23 | COMBO_ENABLE = yes | 17 | COMBO_ENABLE = yes |
18 | |||
19 | ifeq ($(strip $(KEYBOARD)), planck/rev4) | ||
20 | MOUSEKEY_ENABLE = no # Mouse keys(+4700) | ||
21 | MIDI_ENABLE = no | ||
22 | else | ||
23 | MOUSEKEY_ENABLE = yes | ||
24 | MIDI_ENABLE = yes | ||
25 | endif | ||
diff --git a/users/narze/narze.c b/users/narze/narze.c new file mode 100644 index 000000000..6ec303449 --- /dev/null +++ b/users/narze/narze.c | |||
@@ -0,0 +1 @@ | |||
#include "narze.h" | |||
diff --git a/users/narze/narze.h b/users/narze/narze.h new file mode 100644 index 000000000..036539a9c --- /dev/null +++ b/users/narze/narze.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #pragma once | ||
2 | |||
3 | #include "quantum.h" | ||
4 | #include "eeconfig.h" | ||
5 | #include "keymap_colemak.h" | ||
6 | |||
7 | #ifdef COMBO_ENABLE | ||
8 | # include "superduper.h" | ||
9 | #endif | ||
diff --git a/users/narze/readme.md b/users/narze/readme.md new file mode 100644 index 000000000..124b84e6b --- /dev/null +++ b/users/narze/readme.md | |||
@@ -0,0 +1,18 @@ | |||
1 | # TODO | ||
2 | - [ ] Make SuperDuper mode fully-compatible in Windows by swapping GUI with Ctrl | ||
3 | |||
4 | # LICENSE | ||
5 | Copyright 2019 Manassarn Manoonchai manassarn@gmail.com @narze | ||
6 | |||
7 | This program is free software: you can redistribute it and/or modify | ||
8 | it under the terms of the GNU General Public License as published by | ||
9 | the Free Software Foundation, either version 2 of the License, or | ||
10 | (at your option) any later version. | ||
11 | |||
12 | This program is distributed in the hope that it will be useful, | ||
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | GNU General Public License for more details. | ||
16 | |||
17 | You should have received a copy of the GNU General Public License | ||
18 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
diff --git a/users/narze/rules.mk b/users/narze/rules.mk new file mode 100644 index 000000000..565a4a7a6 --- /dev/null +++ b/users/narze/rules.mk | |||
@@ -0,0 +1,5 @@ | |||
1 | SRC += narze.c | ||
2 | |||
3 | ifeq ($(strip $(COMBO_ENABLE)), yes) | ||
4 | SRC += superduper.c | ||
5 | endif | ||
diff --git a/users/narze/superduper.c b/users/narze/superduper.c new file mode 100644 index 000000000..b497ce2e6 --- /dev/null +++ b/users/narze/superduper.c | |||
@@ -0,0 +1,66 @@ | |||
1 | #include "superduper.h" | ||
2 | #include "eeconfig.h" | ||
3 | #include "eeprom.h" | ||
4 | #include "keymap_colemak.h" | ||
5 | |||
6 | // SuperDuper | ||
7 | |||
8 | #define SUPERDUPER_COMBO_COUNT 3 | ||
9 | #define EECONFIG_SUPERDUPER_INDEX (uint8_t *) 19 | ||
10 | |||
11 | enum process_combo_event { | ||
12 | CB_SUPERDUPER, | ||
13 | }; | ||
14 | |||
15 | enum supported_layers { | ||
16 | _QWERTY, | ||
17 | _COLEMAK, | ||
18 | _QWOC | ||
19 | }; | ||
20 | |||
21 | const uint16_t PROGMEM superduper_combos[SUPERDUPER_COMBO_COUNT][3] = { | ||
22 | [_QWERTY] = {KC_S, KC_D, COMBO_END}, | ||
23 | [_COLEMAK] = {KC_R, KC_S, COMBO_END}, | ||
24 | [_QWOC] = {CM_S, CM_D, COMBO_END}, | ||
25 | }; | ||
26 | |||
27 | combo_t key_combos[COMBO_COUNT] = { | ||
28 | [CB_SUPERDUPER] = COMBO_ACTION(superduper_combos[_QWERTY]), | ||
29 | }; | ||
30 | |||
31 | volatile bool superduper_enabled = true; | ||
32 | |||
33 | const uint16_t PROGMEM empty_combo[] = {COMBO_END}; | ||
34 | |||
35 | bool toggle_superduper_mode(void) { | ||
36 | superduper_enabled = !superduper_enabled; | ||
37 | |||
38 | if (superduper_enabled) { | ||
39 | set_superduper_key_combos(); | ||
40 | } else { | ||
41 | clear_superduper_key_combos(); | ||
42 | } | ||
43 | |||
44 | return superduper_enabled; | ||
45 | } | ||
46 | |||
47 | void set_superduper_key_combo_layer(uint16_t layer) { | ||
48 | key_combos[CB_SUPERDUPER].keys = superduper_combos[layer]; | ||
49 | eeprom_update_byte(EECONFIG_SUPERDUPER_INDEX, layer); | ||
50 | } | ||
51 | |||
52 | void set_superduper_key_combos(void) { | ||
53 | uint8_t layer = eeprom_read_byte(EECONFIG_SUPERDUPER_INDEX); | ||
54 | |||
55 | switch (layer) { | ||
56 | case _QWERTY: | ||
57 | case _COLEMAK: | ||
58 | case _QWOC: | ||
59 | key_combos[CB_SUPERDUPER].keys = superduper_combos[layer]; | ||
60 | break; | ||
61 | } | ||
62 | } | ||
63 | |||
64 | void clear_superduper_key_combos(void) { | ||
65 | key_combos[CB_SUPERDUPER].keys = empty_combo; | ||
66 | } | ||
diff --git a/users/narze/superduper.h b/users/narze/superduper.h new file mode 100644 index 000000000..f8df2e1af --- /dev/null +++ b/users/narze/superduper.h | |||
@@ -0,0 +1,7 @@ | |||
1 | #pragma once | ||
2 | #include "narze.h" | ||
3 | |||
4 | bool toggle_superduper_mode(void); | ||
5 | void set_superduper_key_combo_layer(uint16_t layer); | ||
6 | void set_superduper_key_combos(void); | ||
7 | void clear_superduper_key_combos(void); | ||