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); | ||
