diff options
| -rw-r--r-- | build_keyboard.mk | 5 | ||||
| -rw-r--r-- | keyboards/handwired/promethium/keymaps/priyadi/config.h | 2 | ||||
| -rw-r--r-- | keyboards/handwired/promethium/keymaps/priyadi/keymap.c | 217 | ||||
| -rw-r--r-- | keyboards/handwired/promethium/promethium.h | 5 | ||||
| -rw-r--r-- | keyboards/planck/keymaps/priyadi/Makefile | 3 | ||||
| -rw-r--r-- | keyboards/planck/keymaps/priyadi/keymap.c | 534 | ||||
| -rw-r--r-- | quantum/fauxclicky.c | 68 | ||||
| -rw-r--r-- | quantum/fauxclicky.h | 99 | ||||
| -rw-r--r-- | quantum/quantum.c | 24 | ||||
| -rw-r--r-- | quantum/quantum_keycodes.h | 7 | ||||
| -rw-r--r-- | quantum/template/rules.mk | 1 | ||||
| -rw-r--r-- | tmk_core/common/action.c | 13 | ||||
| -rw-r--r-- | tmk_core/common/keyboard.c | 6 |
13 files changed, 715 insertions, 269 deletions
diff --git a/build_keyboard.mk b/build_keyboard.mk index 2c64e93a2..c8e82cf0e 100644 --- a/build_keyboard.mk +++ b/build_keyboard.mk | |||
| @@ -161,6 +161,11 @@ ifeq ($(strip $(AUDIO_ENABLE)), yes) | |||
| 161 | SRC += $(QUANTUM_DIR)/audio/luts.c | 161 | SRC += $(QUANTUM_DIR)/audio/luts.c |
| 162 | endif | 162 | endif |
| 163 | 163 | ||
| 164 | ifeq ($(strip $(FAUXCLICKY_ENABLE)), yes) | ||
| 165 | OPT_DEFS += -DFAUXCLICKY_ENABLE | ||
| 166 | SRC += $(QUANTUM_DIR)/fauxclicky.c | ||
| 167 | endif | ||
| 168 | |||
| 164 | ifeq ($(strip $(UCIS_ENABLE)), yes) | 169 | ifeq ($(strip $(UCIS_ENABLE)), yes) |
| 165 | OPT_DEFS += -DUCIS_ENABLE | 170 | OPT_DEFS += -DUCIS_ENABLE |
| 166 | UNICODE_ENABLE = yes | 171 | UNICODE_ENABLE = yes |
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/config.h b/keyboards/handwired/promethium/keymaps/priyadi/config.h index 53059ca7d..6c9d2195e 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/config.h +++ b/keyboards/handwired/promethium/keymaps/priyadi/config.h | |||
| @@ -14,6 +14,8 @@ | |||
| 14 | #define RGB_DI_PIN B5 | 14 | #define RGB_DI_PIN B5 |
| 15 | #define RGBSPS_NUM 57 | 15 | #define RGBSPS_NUM 57 |
| 16 | 16 | ||
| 17 | #define UNICODE_TYPE_DELAY 0 | ||
| 18 | |||
| 17 | #define LAYOUT_DVORAK | 19 | #define LAYOUT_DVORAK |
| 18 | #define LAYOUT_COLEMAK | 20 | #define LAYOUT_COLEMAK |
| 19 | #define LAYOUT_NORMAN | 21 | #define LAYOUT_NORMAN |
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c index 1ad34612e..9f07a7d08 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c +++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c | |||
| @@ -41,6 +41,7 @@ enum glow_modes { | |||
| 41 | }; | 41 | }; |
| 42 | uint8_t glow_mode = GLOW_MIN; | 42 | uint8_t glow_mode = GLOW_MIN; |
| 43 | 43 | ||
| 44 | void turn_off_capslock(void); | ||
| 44 | extern keymap_config_t keymap_config; | 45 | extern keymap_config_t keymap_config; |
| 45 | 46 | ||
| 46 | enum layers { | 47 | enum layers { |
| @@ -49,14 +50,15 @@ enum layers { | |||
| 49 | _COLEMAK, | 50 | _COLEMAK, |
| 50 | _WORKMAN, | 51 | _WORKMAN, |
| 51 | _NORMAN, | 52 | _NORMAN, |
| 52 | 53 | _DEFAULT_LAYER_MAX = _NORMAN, | |
| 53 | _PUNC, | ||
| 54 | _NUM, | ||
| 55 | _FUNC, | ||
| 56 | 54 | ||
| 57 | _GREEKU, | 55 | _GREEKU, |
| 58 | _GREEKL, | 56 | _GREEKL, |
| 59 | 57 | ||
| 58 | _NUM, | ||
| 59 | _FUN, | ||
| 60 | _PUNC, | ||
| 61 | |||
| 60 | _EMOJI, | 62 | _EMOJI, |
| 61 | _GUI, | 63 | _GUI, |
| 62 | _SYS, | 64 | _SYS, |
| @@ -74,9 +76,9 @@ enum planck_keycodes { | |||
| 74 | NORMAN, | 76 | NORMAN, |
| 75 | 77 | ||
| 76 | // layer switchers | 78 | // layer switchers |
| 77 | PUNC, | 79 | // PUNC, |
| 78 | NUM, | 80 | // NUM, |
| 79 | FUNC, | 81 | // FUN, |
| 80 | EMOJI, | 82 | EMOJI, |
| 81 | GUI, | 83 | GUI, |
| 82 | GREEK, | 84 | GREEK, |
| @@ -90,9 +92,16 @@ enum planck_keycodes { | |||
| 90 | LSPACE, | 92 | LSPACE, |
| 91 | RSPACE, | 93 | RSPACE, |
| 92 | GLOW, | 94 | GLOW, |
| 95 | FOR0, | ||
| 96 | |||
| 97 | // stub | ||
| 93 | AUDIO | 98 | AUDIO |
| 94 | }; | 99 | }; |
| 95 | 100 | ||
| 101 | #define NUM MO(_NUM) | ||
| 102 | #define FUN MO(_FUN) | ||
| 103 | #define FUN0 LT(_FUN, KC_0) | ||
| 104 | |||
| 96 | // unicode map | 105 | // unicode map |
| 97 | 106 | ||
| 98 | enum unicode_name { | 107 | enum unicode_name { |
| @@ -365,14 +374,14 @@ const uint8_t PROGMEM LED_MODS[] = { | |||
| 365 | const uint8_t PROGMEM LED_FN[] = { | 374 | const uint8_t PROGMEM LED_FN[] = { |
| 366 | LED_PUNC, | 375 | LED_PUNC, |
| 367 | LED_NUM, | 376 | LED_NUM, |
| 368 | LED_FUNC, | 377 | LED_FUN, |
| 369 | LED_EMOJI | 378 | LED_EMOJI |
| 370 | }; | 379 | }; |
| 371 | 380 | ||
| 372 | const uint8_t PROGMEM LED_INDICATORS[] = { | 381 | const uint8_t PROGMEM LED_INDICATORS[] = { |
| 373 | LED_IND_EMOJI, | 382 | LED_IND_EMOJI, |
| 374 | LED_IND_NUM, | 383 | LED_IND_NUM, |
| 375 | LED_IND_FUNC, | 384 | LED_IND_FUN, |
| 376 | LED_IND_BATTERY, | 385 | LED_IND_BATTERY, |
| 377 | LED_IND_USB, | 386 | LED_IND_USB, |
| 378 | LED_IND_BLUETOOTH, | 387 | LED_IND_BLUETOOTH, |
| @@ -431,7 +440,7 @@ void led_reset(void) { | |||
| 431 | void led_set_layer_indicator(void) { | 440 | void led_set_layer_indicator(void) { |
| 432 | static uint8_t oldlayer = 255; | 441 | static uint8_t oldlayer = 255; |
| 433 | 442 | ||
| 434 | rgbsps_set(LED_IND_FUNC, 0, 0, 0); | 443 | rgbsps_set(LED_IND_FUN, 0, 0, 0); |
| 435 | // rgbsps_set(LED_IND_NUM, 0, 0, 0); | 444 | // rgbsps_set(LED_IND_NUM, 0, 0, 0); |
| 436 | rgbsps_set(LED_IND_EMOJI, 0, 0, 0); | 445 | rgbsps_set(LED_IND_EMOJI, 0, 0, 0); |
| 437 | 446 | ||
| @@ -444,14 +453,14 @@ void led_set_layer_indicator(void) { | |||
| 444 | 453 | ||
| 445 | oldlayer = layer; | 454 | oldlayer = layer; |
| 446 | 455 | ||
| 447 | if (layer <= _NORMAN) { | 456 | if (layer <= _DEFAULT_LAYER_MAX) { |
| 448 | rgbsps_send(); | 457 | rgbsps_send(); |
| 449 | return; | 458 | return; |
| 450 | } | 459 | } |
| 451 | 460 | ||
| 452 | switch(layer) { | 461 | switch(layer) { |
| 453 | case _FUNC: | 462 | case _FUN: |
| 454 | rgbsps_set(LED_IND_FUNC, 15, 0, 0); | 463 | rgbsps_set(LED_IND_FUN, 15, 0, 0); |
| 455 | break; | 464 | break; |
| 456 | // case _NUM: | 465 | // case _NUM: |
| 457 | // rgbsps_set(LED_IND_NUM, 0, 0, 15); | 466 | // rgbsps_set(LED_IND_NUM, 0, 0, 15); |
| @@ -460,8 +469,8 @@ void led_set_layer_indicator(void) { | |||
| 460 | rgbsps_set(LED_IND_EMOJI, 15, 15, 0); | 469 | rgbsps_set(LED_IND_EMOJI, 15, 15, 0); |
| 461 | break; | 470 | break; |
| 462 | default: | 471 | default: |
| 463 | rgbsps_set(LED_IND_FUNC, 3, 3, 3); | 472 | rgbsps_set(LED_IND_FUN, 3, 3, 3); |
| 464 | rgbsps_set(LED_IND_NUM, 3, 3, 3); | 473 | // rgbsps_set(LED_IND_NUM, 3, 3, 3); |
| 465 | rgbsps_set(LED_IND_EMOJI, 3, 3, 3); | 474 | rgbsps_set(LED_IND_EMOJI, 3, 3, 3); |
| 466 | } | 475 | } |
| 467 | 476 | ||
| @@ -516,7 +525,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 516 | KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, | 525 | KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, |
| 517 | KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT , | 526 | KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT , |
| 518 | KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, | 527 | KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, |
| 519 | KC_LCTL, KC_LALT, KC_LGUI, PUNC, NUM, LSPACE, RSPACE, FUNC, GREEK, KC_RGUI, KC_RALT, KC_RCTL | 528 | KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, NUM, LSPACE, RSPACE, FUN, GREEK, KC_RGUI, KC_RALT, KC_RCTL |
| 520 | ), | 529 | ), |
| 521 | 530 | ||
| 522 | /* Dvorak | 531 | /* Dvorak |
| @@ -614,8 +623,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 614 | * `-----------------------------------------------------------------------------------' | 623 | * `-----------------------------------------------------------------------------------' |
| 615 | */ | 624 | */ |
| 616 | [_PUNC] = KEYMAP( | 625 | [_PUNC] = KEYMAP( |
| 617 | KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV , | 626 | KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, |
| 618 | XXXXXXX, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, XXXXXXX, KC_LPRN, KC_RPRN, KC_LABK, KC_RABK, XXXXXXX, | 627 | KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, XXXXXXX, KC_LPRN, KC_RPRN, KC_LABK, KC_RABK, _______, |
| 619 | KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, XXXXXXX, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_COLN, | 628 | KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, XXXXXXX, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_COLN, |
| 620 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ | 629 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ |
| 621 | ), | 630 | ), |
| @@ -632,10 +641,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 632 | * `-----------------------------------------------------------------------------------' | 641 | * `-----------------------------------------------------------------------------------' |
| 633 | */ | 642 | */ |
| 634 | [_NUM] = KEYMAP( | 643 | [_NUM] = KEYMAP( |
| 635 | KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, S(KC_A), KC_7, KC_8, KC_9, S(KC_D), KC_GRV, | 644 | KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, S(KC_A), KC_7, KC_8, KC_9, S(KC_D), _______, |
| 636 | XXXXXXX, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, S(KC_B), KC_4, KC_5, KC_6, S(KC_E), _______, | 645 | KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, S(KC_B), KC_4, KC_5, KC_6, S(KC_E), _______, |
| 637 | KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, S(KC_C), KC_1, KC_2, KC_3, S(KC_F), KC_COLN, | 646 | KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, S(KC_C), KC_1, KC_2, KC_3, S(KC_F), KC_COLN, |
| 638 | _______, _______, _______, _______, _______, _______, _______, KC_0, KC_COMM, KC_DOT, KC_X, _______ | 647 | _______, _______, _______, _______, _______, _______, _______, FUN0 , KC_COMM, KC_DOT, KC_X, _______ |
| 639 | ), | 648 | ), |
| 640 | 649 | ||
| 641 | /* Func | 650 | /* Func |
| @@ -649,11 +658,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 649 | * | | | | | | | | | | | | | 658 | * | | | | | | | | | | | | |
| 650 | * `-----------------------------------------------------------------------------------' | 659 | * `-----------------------------------------------------------------------------------' |
| 651 | */ | 660 | */ |
| 652 | [_FUNC] = KEYMAP( | 661 | [_FUN] = KEYMAP( |
| 653 | XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL, | 662 | XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL, |
| 654 | XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS, | 663 | XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, KC_PSCR, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS, |
| 655 | _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______, | 664 | _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______, |
| 656 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ | 665 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ |
| 657 | ), | 666 | ), |
| 658 | 667 | ||
| 659 | /* Uppercase Greek | 668 | /* Uppercase Greek |
| @@ -668,9 +677,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 668 | * `-----------------------------------------------------------------------------------' | 677 | * `-----------------------------------------------------------------------------------' |
| 669 | */ | 678 | */ |
| 670 | [_GREEKU] = KEYMAP( | 679 | [_GREEKU] = KEYMAP( |
| 671 | _______, _______, _______,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______, | 680 | _______, XXXXXXX, XXXXXXX,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______, |
| 672 | _______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), _______, _______, | 681 | _______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), KC_QUOT, _______, |
| 673 | _______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), _______, _______, _______, _______, | 682 | _______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), KC_COMM, KC_DOT, KC_SLSH, _______, |
| 674 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ | 683 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ |
| 675 | ), | 684 | ), |
| 676 | 685 | ||
| @@ -686,9 +695,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 686 | * `-----------------------------------------------------------------------------------' | 695 | * `-----------------------------------------------------------------------------------' |
| 687 | */ | 696 | */ |
| 688 | [_GREEKL] = KEYMAP( | 697 | [_GREEKL] = KEYMAP( |
| 689 | _______, _______,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______, | 698 | _______, XXXXXXX,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______, |
| 690 | _______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), _______, _______, | 699 | _______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), KC_QUOT, _______, |
| 691 | _______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), _______, _______, _______, _______, | 700 | _______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), KC_COMM, KC_DOT, KC_SLSH, _______, |
| 692 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ | 701 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ |
| 693 | ), | 702 | ), |
| 694 | 703 | ||
| @@ -716,16 +725,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 716 | * |------+------+------+------+------+-------------+------+------+------+------+------| | 725 | * |------+------+------+------+------+-------------+------+------+------+------+------| |
| 717 | * | | | Vol- | Mute | Vol+ | | | Prev | | Next | | | | 726 | * | | | Vol- | Mute | Vol+ | | | Prev | | Next | | | |
| 718 | * |------+------+------+------+------+------+------+------+------+------+------+------| | 727 | * |------+------+------+------+------+------+------+------+------+------+------+------| |
| 719 | * | | | Prev | Play | Next | | | | | | | | | 728 | * | | | Prev | Play | Next | BTab | Tab | | | | | | |
| 720 | * |------+------+------+------+------+------+------+------+------+------+------+------| | 729 | * |------+------+------+------+------+------+------+------+------+------+------+------| |
| 721 | * | | | | | | | | | | | | | | 730 | * | | | | | | | | | | | | | |
| 722 | * `-----------------------------------------------------------------------------------' | 731 | * `-----------------------------------------------------------------------------------' |
| 723 | */ | 732 | */ |
| 724 | [_GUI] = KEYMAP( | 733 | [_GUI] = KEYMAP( |
| 725 | XXXXXXX, G(KC_1), G(KC_2), G(KC_3), G(KC_4), G(KC_5), G(KC_6), G(KC_7), G(KC_8), G(KC_9), G(KC_0), XXXXXXX, | 734 | XXXXXXX, G(KC_1), G(KC_2), G(KC_3), G(KC_4), G(KC_5), G(KC_6), G(KC_7), G(KC_8), G(KC_9), G(KC_0), XXXXXXX, |
| 726 | XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX, KC_WWWB, XXXXXXX, KC_WWWF, XXXXXXX, XXXXXXX, | 735 | KC_ESC, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU,S(KC_TAB),KC_TAB, KC_WWWB, XXXXXXX, KC_WWWF, XXXXXXX, XXXXXXX, |
| 727 | XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, KC_SPC, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | 736 | XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, KC_SPC, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, |
| 728 | XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX | 737 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX |
| 729 | ), | 738 | ), |
| 730 | 739 | ||
| 731 | /* Sys | 740 | /* Sys |
| @@ -753,9 +762,53 @@ void persistant_default_layer_set(uint16_t default_layer) { | |||
| 753 | default_layer_set(default_layer); | 762 | default_layer_set(default_layer); |
| 754 | } | 763 | } |
| 755 | 764 | ||
| 765 | #ifdef DOUBLESPACE_LAYER_ENABLE | ||
| 766 | void process_doublespace(bool pressed, bool *isactive, bool *otheractive, bool *isemitted) { | ||
| 767 | if (pressed) { | ||
| 768 | *isactive = true; | ||
| 769 | if (*otheractive) { | ||
| 770 | layer_on(_SPACE); | ||
| 771 | register_code(KC_LALT); // sends alt and enter layer | ||
| 772 | space_layer_entered = true; | ||
| 773 | } | ||
| 774 | } else { | ||
| 775 | *isactive = false; | ||
| 776 | if (space_layer_entered) { | ||
| 777 | unregister_code(KC_LALT); // release alt and exit layer | ||
| 778 | layer_off(_SPACE); | ||
| 779 | if (!*otheractive) { | ||
| 780 | space_layer_entered = false; | ||
| 781 | } | ||
| 782 | } else { | ||
| 783 | if (!*isemitted) { | ||
| 784 | register_code(KC_SPC); | ||
| 785 | unregister_code(KC_SPC); | ||
| 786 | } | ||
| 787 | *isemitted = false; | ||
| 788 | } | ||
| 789 | } | ||
| 790 | } | ||
| 791 | #endif | ||
| 792 | |||
| 793 | uint32_t layer_state_set_kb(uint32_t state) | ||
| 794 | { | ||
| 795 | // turn on punc layer if both fun & num are on | ||
| 796 | if ((state & ((1UL<<_NUM) | (1UL<<_FUN))) == ((1UL<<_NUM) | (1UL<<_FUN))) { | ||
| 797 | state |= (1UL<<_PUNC); | ||
| 798 | } else { | ||
| 799 | state &= ~(1UL<<_PUNC); | ||
| 800 | } | ||
| 801 | return state; | ||
| 802 | } | ||
| 803 | |||
| 756 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | 804 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
| 757 | bool lshift = keyboard_report->mods & MOD_BIT(KC_LSFT); | 805 | static bool lshift = false; |
| 758 | bool rshift = keyboard_report->mods & MOD_BIT(KC_RSFT); | 806 | static bool rshift = false; |
| 807 | static uint8_t layer = 0; | ||
| 808 | |||
| 809 | lshift = keyboard_report->mods & MOD_BIT(KC_LSFT); | ||
| 810 | rshift = keyboard_report->mods & MOD_BIT(KC_RSFT); | ||
| 811 | layer = biton32(layer_state); | ||
| 759 | 812 | ||
| 760 | #ifdef DOUBLESPACE_LAYER_ENABLE | 813 | #ifdef DOUBLESPACE_LAYER_ENABLE |
| 761 | // double-space: send space immediately if any other key depressed before space is released | 814 | // double-space: send space immediately if any other key depressed before space is released |
| @@ -779,6 +832,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 779 | rspace_emitted = true; | 832 | rspace_emitted = true; |
| 780 | } | 833 | } |
| 781 | } | 834 | } |
| 835 | |||
| 836 | if (layer == _SPACE && keycode != S(KC_TAB) && keycode != KC_TAB && keycode != KC_ESC && keycode != XXXXXXX) { | ||
| 837 | if (record->event.pressed) { | ||
| 838 | unregister_code(KC_LALT); | ||
| 839 | } else { | ||
| 840 | register_code(KC_LALT); | ||
| 841 | } | ||
| 842 | } | ||
| 782 | #endif | 843 | #endif |
| 783 | 844 | ||
| 784 | switch (keycode) { | 845 | switch (keycode) { |
| @@ -786,51 +847,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 786 | #ifdef DOUBLESPACE_LAYER_ENABLE | 847 | #ifdef DOUBLESPACE_LAYER_ENABLE |
| 787 | // double-space enter space layer | 848 | // double-space enter space layer |
| 788 | case LSPACE: | 849 | case LSPACE: |
| 789 | if (record->event.pressed) { | 850 | process_doublespace(record->event.pressed, &lspace_active, &rspace_active, &lspace_emitted); |
| 790 | lspace_active = true; | ||
| 791 | if (rspace_active) { | ||
| 792 | layer_on(_SPACE); | ||
| 793 | space_layer_entered = true; | ||
| 794 | } | ||
| 795 | } else { | ||
| 796 | lspace_active = false; | ||
| 797 | if (space_layer_entered) { | ||
| 798 | layer_off(_SPACE); | ||
| 799 | if (!rspace_active) { | ||
| 800 | space_layer_entered = false; | ||
| 801 | } | ||
| 802 | } else { | ||
| 803 | if (!lspace_emitted) { | ||
| 804 | register_code(KC_SPC); | ||
| 805 | unregister_code(KC_SPC); | ||
| 806 | } | ||
| 807 | lspace_emitted = false; | ||
| 808 | } | ||
| 809 | } | ||
| 810 | return false; | 851 | return false; |
| 811 | break; | 852 | break; |
| 812 | case RSPACE: | 853 | case RSPACE: |
| 813 | if (record->event.pressed) { | 854 | process_doublespace(record->event.pressed, &rspace_active, &lspace_active, &rspace_emitted); |
| 814 | rspace_active = true; | ||
| 815 | if (lspace_active) { | ||
| 816 | layer_on(_SPACE); | ||
| 817 | space_layer_entered = true; | ||
| 818 | } | ||
| 819 | } else { | ||
| 820 | rspace_active = false; | ||
| 821 | if (space_layer_entered) { | ||
| 822 | layer_off(_SPACE); | ||
| 823 | if (!lspace_active) { | ||
| 824 | space_layer_entered = false; | ||
| 825 | } | ||
| 826 | } else { | ||
| 827 | if (!rspace_emitted) { | ||
| 828 | register_code(KC_SPC); | ||
| 829 | unregister_code(KC_SPC); | ||
| 830 | } | ||
| 831 | rspace_emitted = false; | ||
| 832 | } | ||
| 833 | } | ||
| 834 | return false; | 855 | return false; |
| 835 | break; | 856 | break; |
| 836 | #endif | 857 | #endif |
| @@ -840,7 +861,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 840 | case KC_LSFT: | 861 | case KC_LSFT: |
| 841 | case KC_RSFT: | 862 | case KC_RSFT: |
| 842 | ; | 863 | ; |
| 843 | uint8_t layer = biton32(layer_state); | ||
| 844 | if (layer == _GREEKU || layer == _GREEKL) { | 864 | if (layer == _GREEKU || layer == _GREEKL) { |
| 845 | if (record->event.pressed) { | 865 | if (record->event.pressed) { |
| 846 | layer_on(_GREEKU); | 866 | layer_on(_GREEKU); |
| @@ -949,17 +969,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 949 | #endif | 969 | #endif |
| 950 | 970 | ||
| 951 | // layer switcher | 971 | // layer switcher |
| 952 | case PUNC: | 972 | // |
| 953 | if (record->event.pressed) { | ||
| 954 | layer_on(_PUNC); | ||
| 955 | update_tri_layer(_PUNC, _GREEKL, _EMOJI); | ||
| 956 | } else { | ||
| 957 | layer_off(_PUNC); | ||
| 958 | update_tri_layer(_PUNC, _GREEKL, _EMOJI); | ||
| 959 | } | ||
| 960 | return false; | ||
| 961 | break; | ||
| 962 | |||
| 963 | case GREEK: | 973 | case GREEK: |
| 964 | if (record->event.pressed) { | 974 | if (record->event.pressed) { |
| 965 | if (lshift || rshift) { | 975 | if (lshift || rshift) { |
| @@ -968,31 +978,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 968 | } else { | 978 | } else { |
| 969 | layer_on(_GREEKL); | 979 | layer_on(_GREEKL); |
| 970 | layer_off(_GREEKU); | 980 | layer_off(_GREEKU); |
| 971 | update_tri_layer(_PUNC, _GREEKL, _EMOJI); | ||
| 972 | } | 981 | } |
| 973 | } else { | 982 | } else { |
| 974 | layer_off(_GREEKU); | 983 | layer_off(_GREEKU); |
| 975 | layer_off(_GREEKL); | 984 | layer_off(_GREEKL); |
| 976 | update_tri_layer(_PUNC, _GREEKL, _EMOJI); | ||
| 977 | } | ||
| 978 | return false; | ||
| 979 | break; | ||
| 980 | |||
| 981 | case NUM: | ||
| 982 | if (record->event.pressed) { | ||
| 983 | turn_off_capslock(); | ||
| 984 | layer_on(_NUM); | ||
| 985 | } else { | ||
| 986 | layer_off(_NUM); | ||
| 987 | } | ||
| 988 | return false; | ||
| 989 | break; | ||
| 990 | |||
| 991 | case FUNC: | ||
| 992 | if (record->event.pressed) { | ||
| 993 | layer_on(_FUNC); | ||
| 994 | } else { | ||
| 995 | layer_off(_FUNC); | ||
| 996 | } | 985 | } |
| 997 | return false; | 986 | return false; |
| 998 | break; | 987 | break; |
| @@ -1072,7 +1061,7 @@ void battery_poll(uint8_t level) { | |||
| 1072 | void led_set_user(uint8_t usb_led) { | 1061 | void led_set_user(uint8_t usb_led) { |
| 1073 | bool new_capslock = usb_led & (1<<USB_LED_CAPS_LOCK); | 1062 | bool new_capslock = usb_led & (1<<USB_LED_CAPS_LOCK); |
| 1074 | if (new_capslock ^ capslock) { // capslock state is different | 1063 | if (new_capslock ^ capslock) { // capslock state is different |
| 1075 | if (capslock = new_capslock) { | 1064 | if ((capslock = new_capslock)) { |
| 1076 | rgbsps_set(LED_IND_NUM, 15, 0, 0); | 1065 | rgbsps_set(LED_IND_NUM, 15, 0, 0); |
| 1077 | } else { | 1066 | } else { |
| 1078 | rgbsps_set(LED_IND_NUM, 0, 0, 0); | 1067 | rgbsps_set(LED_IND_NUM, 0, 0, 0); |
diff --git a/keyboards/handwired/promethium/promethium.h b/keyboards/handwired/promethium/promethium.h index da37e5c56..caad5258e 100644 --- a/keyboards/handwired/promethium/promethium.h +++ b/keyboards/handwired/promethium/promethium.h | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | #include "quantum.h" | 4 | #include "quantum.h" |
| 5 | 5 | ||
| 6 | #define PS2_INIT_DELAY 2000 | 6 | #define PS2_INIT_DELAY 2000 |
| 7 | #define UNICODE_TYPE_DELAY 0 | ||
| 8 | #define BATTERY_PIN 9 | 7 | #define BATTERY_PIN 9 |
| 9 | #define BATTERY_POLL 30000 | 8 | #define BATTERY_POLL 30000 |
| 10 | #define MAX_VOLTAGE 4.2 | 9 | #define MAX_VOLTAGE 4.2 |
| @@ -34,7 +33,7 @@ enum led_sequence { | |||
| 34 | LED_IND_USB, | 33 | LED_IND_USB, |
| 35 | LED_IND_BATTERY, | 34 | LED_IND_BATTERY, |
| 36 | 35 | ||
| 37 | LED_IND_FUNC, | 36 | LED_IND_FUN, |
| 38 | LED_IND_NUM, | 37 | LED_IND_NUM, |
| 39 | LED_IND_EMOJI, | 38 | LED_IND_EMOJI, |
| 40 | 39 | ||
| @@ -61,7 +60,7 @@ enum led_sequence { | |||
| 61 | LED_U, | 60 | LED_U, |
| 62 | LED_J, | 61 | LED_J, |
| 63 | LED_M, | 62 | LED_M, |
| 64 | LED_FUNC, | 63 | LED_FUN, |
| 65 | 64 | ||
| 66 | LED_RSPC, | 65 | LED_RSPC, |
| 67 | LED_N, | 66 | LED_N, |
diff --git a/keyboards/planck/keymaps/priyadi/Makefile b/keyboards/planck/keymaps/priyadi/Makefile index 336608b8c..27c2638e2 100644 --- a/keyboards/planck/keymaps/priyadi/Makefile +++ b/keyboards/planck/keymaps/priyadi/Makefile | |||
| @@ -10,12 +10,13 @@ COMMAND_ENABLE = no # Commands for debug and configuration | |||
| 10 | NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work | 10 | NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work |
| 11 | BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality | 11 | BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality |
| 12 | MIDI_ENABLE = no # MIDI controls | 12 | MIDI_ENABLE = no # MIDI controls |
| 13 | AUDIO_ENABLE = yes # Audio output on port C6 | 13 | AUDIO_ENABLE = no # Audio output on port C6 |
| 14 | UNICODE_ENABLE = no # Unicode | 14 | UNICODE_ENABLE = no # Unicode |
| 15 | UNICODEMAP_ENABLE = yes # Unicode map | 15 | UNICODEMAP_ENABLE = yes # Unicode map |
| 16 | BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID | 16 | BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID |
| 17 | RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. | 17 | RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. |
| 18 | API_SYSEX_ENABLE = no | 18 | API_SYSEX_ENABLE = no |
| 19 | FAUXCLICKY_ENABLE = yes | ||
| 19 | 20 | ||
| 20 | # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE | 21 | # 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 | 22 | SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend |
diff --git a/keyboards/planck/keymaps/priyadi/keymap.c b/keyboards/planck/keymaps/priyadi/keymap.c index 2e979221a..20bfa3958 100644 --- a/keyboards/planck/keymaps/priyadi/keymap.c +++ b/keyboards/planck/keymaps/priyadi/keymap.c | |||
| @@ -10,29 +10,81 @@ | |||
| 10 | #include "eeconfig.h" | 10 | #include "eeconfig.h" |
| 11 | #include "process_unicode.h" | 11 | #include "process_unicode.h" |
| 12 | #include "quantum.h" | 12 | #include "quantum.h" |
| 13 | |||
| 14 | // #define TOLELOT_ENABLE | 13 | // #define TOLELOT_ENABLE |
| 14 | #define DOUBLESPACE_LAYER_ENABLE | ||
| 15 | #define LAYOUT_DVORAK | ||
| 16 | #define LAYOUT_COLEMAK | ||
| 17 | #define LAYOUT_WORKMAN | ||
| 18 | #define LAYOUT_NORMAN | ||
| 19 | |||
| 20 | // so i can copy & paste stuff from my other planck-like keyboards | ||
| 21 | #define KEYMAP( \ | ||
| 22 | k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \ | ||
| 23 | k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \ | ||
| 24 | k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \ | ||
| 25 | k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c \ | ||
| 26 | ) \ | ||
| 27 | { \ | ||
| 28 | {k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c}, \ | ||
| 29 | {k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c}, \ | ||
| 30 | {k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c}, \ | ||
| 31 | {k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c} \ | ||
| 32 | } | ||
| 15 | 33 | ||
| 34 | // Fillers to make layering clearer | ||
| 35 | #define _______ KC_TRNS | ||
| 36 | #define XXXXXXX KC_NO | ||
| 37 | #define G(x) LGUI(x) | ||
| 38 | #define KC_WWWB KC_WWW_BACK | ||
| 39 | #define KC_WWWF KC_WWW_FORWARD | ||
| 40 | |||
| 41 | // hybrid right-alt & scroll lock (mapped to Compose in OS) | ||
| 42 | #undef KC_RALT | ||
| 43 | #define KC_RALT MT(MOD_RALT, KC_SLCK) | ||
| 44 | |||
| 45 | bool capslock = false; | ||
| 46 | |||
| 47 | #ifdef DOUBLESPACE_LAYER_ENABLE | ||
| 48 | bool lspace_active = false; | ||
| 49 | bool rspace_active = false; | ||
| 50 | bool lspace_emitted = false; | ||
| 51 | bool rspace_emitted = false; | ||
| 52 | bool space_layer_entered = false; | ||
| 53 | #endif | ||
| 54 | |||
| 55 | void turn_off_capslock(void); | ||
| 16 | extern keymap_config_t keymap_config; | 56 | extern keymap_config_t keymap_config; |
| 17 | 57 | ||
| 18 | enum layers { | 58 | enum layers { |
| 19 | _QWERTY, | 59 | _QWERTY, |
| 60 | _DVORAK, | ||
| 20 | _COLEMAK, | 61 | _COLEMAK, |
| 21 | _WORKMAN, | 62 | _WORKMAN, |
| 22 | _PUNC, | 63 | _NORMAN, |
| 64 | _DEFAULT_LAYER_MAX = _NORMAN, | ||
| 65 | |||
| 66 | _GREEKU, | ||
| 67 | _GREEKL, | ||
| 68 | |||
| 23 | _NUM, | 69 | _NUM, |
| 24 | _FUNC, | 70 | _FUNC, |
| 71 | _PUNC, | ||
| 72 | |||
| 25 | _EMOJI, | 73 | _EMOJI, |
| 26 | _GREEKU, | ||
| 27 | _GREEKL, | ||
| 28 | _GUI, | 74 | _GUI, |
| 75 | _SYS, | ||
| 29 | }; | 76 | }; |
| 30 | 77 | ||
| 78 | // double-space layer | ||
| 79 | #define _SPACE _GUI | ||
| 80 | |||
| 31 | enum planck_keycodes { | 81 | enum planck_keycodes { |
| 32 | // layouts | 82 | // layouts |
| 33 | QWERTY = SAFE_RANGE, | 83 | QWERTY = SAFE_RANGE, |
| 84 | DVORAK, | ||
| 34 | COLEMAK, | 85 | COLEMAK, |
| 35 | WORKMAN, | 86 | WORKMAN, |
| 87 | NORMAN, | ||
| 36 | 88 | ||
| 37 | // layer switchers | 89 | // layer switchers |
| 38 | PUNC, | 90 | PUNC, |
| @@ -46,12 +98,15 @@ enum planck_keycodes { | |||
| 46 | LINUX, | 98 | LINUX, |
| 47 | WIN, | 99 | WIN, |
| 48 | OSX, | 100 | OSX, |
| 49 | }; | ||
| 50 | 101 | ||
| 51 | // Fillers to make layering clearer | 102 | // others |
| 103 | LSPACE, | ||
| 104 | RSPACE, | ||
| 105 | GLOW, | ||
| 52 | 106 | ||
| 53 | #define _______ KC_TRNS | 107 | // stubs |
| 54 | #define XXXXXXX KC_NO | 108 | OUT_BLE |
| 109 | }; | ||
| 55 | 110 | ||
| 56 | // unicode map | 111 | // unicode map |
| 57 | 112 | ||
| @@ -259,17 +314,9 @@ const uint32_t PROGMEM unicode_map[] = { | |||
| 259 | [FSIGM] = 0x03C2, | 314 | [FSIGM] = 0x03C2, |
| 260 | }; | 315 | }; |
| 261 | 316 | ||
| 262 | |||
| 263 | // hybrid shift - = | ||
| 264 | // #undef KC_LSFT | ||
| 265 | // #define KC_LSFT MT(MOD_LSFT, KC_MINS) | ||
| 266 | // #undef KC_RSFT | ||
| 267 | // #define KC_RSFT MT(MOD_LSFT, KC_EQL) | ||
| 268 | |||
| 269 | |||
| 270 | // hybrid right-gui & scroll lock (mapped to Compose in OS) | 317 | // hybrid right-gui & scroll lock (mapped to Compose in OS) |
| 271 | #undef KC_RCTL | 318 | #undef KC_RALT |
| 272 | #define KC_RCTL MT(MOD_LCTL, KC_SLCK) | 319 | #define KC_RALT MT(MOD_RALT, KC_SLCK) |
| 273 | 320 | ||
| 274 | // keymaps | 321 | // keymaps |
| 275 | 322 | ||
| @@ -279,127 +326,138 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 279 | * ,-----------------------------------------------------------------------------------. | 326 | * ,-----------------------------------------------------------------------------------. |
| 280 | * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | | 327 | * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | |
| 281 | * |------+------+------+------+------+-------------+------+------+------+------+------| | 328 | * |------+------+------+------+------+-------------+------+------+------+------+------| |
| 282 | * | Esc | A | S | D | F | G | H | J | K | L | ; |Enter | | 329 | * | Esc | A | S | D | F | G | H | J | K | L | ' |Enter | |
| 283 | * |------+------+------+------+------+------|------+------+------+------+------+------| | 330 | * |------+------+------+------+------+------|------+------+------+------+------+------| |
| 284 | * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift | | 331 | * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift | |
| 285 | * |------+------+------+------+------+------+------+------+------+------+------+------| | 332 | * |------+------+------+------+------+------+------+------+------+------+------+------| |
| 286 | * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |Greek |AltGr | Ctrl | | 333 | * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl | |
| 287 | * `-----------------------------------------------------------------------------------' | 334 | * `-----------------------------------------------------------------------------------' |
| 288 | */ | 335 | */ |
| 289 | [_QWERTY] = { | 336 | [_QWERTY] = KEYMAP( |
| 290 | {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, | 337 | KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, |
| 291 | {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT }, | 338 | KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT , |
| 292 | {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT}, | 339 | KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, |
| 293 | {KC_LCTL, KC_LALT, KC_LGUI, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, GREEK, KC_RALT, KC_RCTL} | 340 | KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, NUM, LSPACE, RSPACE, FUNC, GREEK, KC_RGUI, KC_RALT, KC_RCTL |
| 294 | }, | 341 | ), |
| 295 | 342 | ||
| 296 | /* Colemak | 343 | /* Dvorak |
| 297 | * ,-----------------------------------------------------------------------------------. | 344 | * ,-----------------------------------------------------------------------------------. |
| 298 | * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | | 345 | * | Tab | ' | , | . | P | Y | F | G | C | R | L | Bksp | |
| 299 | * |------+------+------+------+------+-------------+------+------+------+------+------| | 346 | * |------+------+------+------+------+-------------+------+------+------+------+------| |
| 300 | * | Esc | A | R | S | T | D | H | N | E | I | O |Enter | | 347 | * | Esc | A | O | E | U | I | D | H | T | N | S |Enter | |
| 301 | * |------+------+------+------+------+------|------+------+------+------+------+------| | 348 | * |------+------+------+------+------+------|------+------+------+------+------+------| |
| 302 | * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | | 349 | * | Shift| / | Q | J | K | X | B | M | W | V | Z |Shift | |
| 303 | * |------+------+------+------+------+------+------+------+------+------+------+------| | 350 | * |------+------+------+------+------+------+------+------+------+------+------+------| |
| 304 | * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl | | 351 | * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl | |
| 305 | * `-----------------------------------------------------------------------------------' | 352 | * `-----------------------------------------------------------------------------------' |
| 306 | */ | 353 | */ |
| 307 | [_COLEMAK] = { | 354 | #ifdef LAYOUT_DVORAK |
| 308 | {_______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, _______}, | 355 | [_DVORAK] = KEYMAP( |
| 309 | {_______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, _______}, | 356 | _______, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, _______, |
| 310 | {_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______}, | 357 | _______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, _______, |
| 311 | {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} | 358 | _______, KC_SLSH, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, _______, |
| 312 | }, | 359 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ |
| 360 | ), | ||
| 361 | #endif | ||
| 313 | 362 | ||
| 314 | /* Workman | 363 | /* Colemak |
| 315 | * ,-----------------------------------------------------------------------------------. | 364 | * ,-----------------------------------------------------------------------------------. |
| 316 | * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp | | 365 | * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp | |
| 317 | * |------+------+------+------+------+-------------+------+------+------+------+------| | 366 | * |------+------+------+------+------+-------------+------+------+------+------+------| |
| 318 | * | Esc | A | S | H | T | G | Y | N | E | O | I |Enter | | 367 | * | Esc | A | R | S | T | D | H | N | E | I | O |Enter | |
| 319 | * |------+------+------+------+------+------|------+------+------+------+------+------| | 368 | * |------+------+------+------+------+------|------+------+------+------+------+------| |
| 320 | * | Shift| Z | X | M | C | V | K | K | , | . | / |Shift | | 369 | * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift | |
| 321 | * |------+------+------+------+------+------+------+------+------+------+------+------| | 370 | * |------+------+------+------+------+------+------+------+------+------+------+------| |
| 322 | * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl | | 371 | * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl | |
| 323 | * `-----------------------------------------------------------------------------------' | 372 | * `-----------------------------------------------------------------------------------' |
| 324 | */ | 373 | */ |
| 325 | [_WORKMAN] = { | ||
| 326 | {_______, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_QUOT, _______}, | ||
| 327 | {_______, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, _______}, | ||
| 328 | {_______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, _______}, | ||
| 329 | {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} | ||
| 330 | }, | ||
| 331 | 374 | ||
| 332 | /* Uppercase Greek | 375 | #ifdef LAYOUT_COLEMAK |
| 376 | [_COLEMAK] = KEYMAP( | ||
| 377 | _______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, _______, | ||
| 378 | _______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, _______, | ||
| 379 | _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, | ||
| 380 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ | ||
| 381 | ), | ||
| 382 | #endif | ||
| 383 | |||
| 384 | /* Norman | ||
| 333 | * ,-----------------------------------------------------------------------------------. | 385 | * ,-----------------------------------------------------------------------------------. |
| 334 | * | | | | | | | | | | | | | | 386 | * | Tab | Q | W | D | F | K | J | U | R | L | ; | Bksp | |
| 335 | * |------+------+------+------+------+-------------+------+------+------+------+------| | 387 | * |------+------+------+------+------+-------------+------+------+------+------+------| |
| 336 | * | | | | | | | | | | | | | | 388 | * | Esc | A | S | E | T | G | Y | N | I | O | H |Enter | |
| 337 | * |------+------+------+------+------+------+------+------+------+------+------+------| | 389 | * |------+------+------+------+------+------|------+------+------+------+------+------| |
| 338 | * | | | | | | | | | | | | | | 390 | * | Shift| Z | X | C | V | B | P | M | , | . | / |Shift | |
| 339 | * |------+------+------+------+------+------+------+------+------+------+------+------| | 391 | * |------+------+------+------+------+------+------+------+------+------+------+------| |
| 340 | * | | | | | | | | | | | | | | 392 | * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl | |
| 341 | * `-----------------------------------------------------------------------------------' | 393 | * `-----------------------------------------------------------------------------------' |
| 342 | */ | 394 | */ |
| 343 | [_GREEKU] = { | ||
| 344 | {_______, _______, _______,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______}, | ||
| 345 | {_______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), _______, _______}, | ||
| 346 | {_______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), _______, _______, _______, _______}, | ||
| 347 | {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} | ||
| 348 | }, | ||
| 349 | 395 | ||
| 350 | /* Lowercase Greek | 396 | #ifdef LAYOUT_NORMAN |
| 397 | [_NORMAN] = KEYMAP( | ||
| 398 | _______, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_QUOT, _______, | ||
| 399 | _______, KC_A, KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H, _______, | ||
| 400 | _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, | ||
| 401 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ | ||
| 402 | ), | ||
| 403 | #endif | ||
| 404 | |||
| 405 | /* Workman | ||
| 351 | * ,-----------------------------------------------------------------------------------. | 406 | * ,-----------------------------------------------------------------------------------. |
| 352 | * | | | | | | | | | | | | | | 407 | * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp | |
| 353 | * |------+------+------+------+------+-------------+------+------+------+------+------| | 408 | * |------+------+------+------+------+-------------+------+------+------+------+------| |
| 354 | * | | | | | | | | | | | | | | 409 | * | Esc | A | S | H | T | G | Y | N | E | O | I |Enter | |
| 355 | * |------+------+------+------+------+------+------+------+------+------+------+------| | 410 | * |------+------+------+------+------+------|------+------+------+------+------+------| |
| 356 | * | | | | | | | | | | | | | | 411 | * | Shift| Z | X | M | C | V | K | K | , | . | / |Shift | |
| 357 | * |------+------+------+------+------+------+------+------+------+------+------+------| | 412 | * |------+------+------+------+------+------+------+------+------+------+------+------| |
| 358 | * | | | | | | | | | | | | | | 413 | * | Ctrl | Alt | GUI | Punc | Num | Space | Func |Greek | GUI |AltGr | Ctrl | |
| 359 | * `-----------------------------------------------------------------------------------' | 414 | * `-----------------------------------------------------------------------------------' |
| 360 | */ | 415 | */ |
| 361 | [_GREEKL] = { | 416 | |
| 362 | {_______, _______,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______}, | 417 | #ifdef LAYOUT_WORKMAN |
| 363 | {_______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), _______, _______}, | 418 | [_WORKMAN] = KEYMAP( |
| 364 | {_______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), _______, _______, _______, _______}, | 419 | _______, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_QUOT, _______, |
| 365 | {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} | 420 | _______, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, _______, |
| 366 | }, | 421 | _______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, _______, |
| 422 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ | ||
| 423 | ), | ||
| 424 | #endif | ||
| 367 | 425 | ||
| 368 | /* Punc | 426 | /* Punc |
| 369 | * ,-----------------------------------------------------------------------------------. | 427 | * ,-----------------------------------------------------------------------------------. |
| 370 | * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` | | 428 | * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` | |
| 371 | * |------+------+------+------+------+-------------+------+------+------+------+------| | 429 | * |------+------+------+------+------+-------------+------+------+------+------+------| |
| 372 | * | | | \ | - | = | < | > | ( | ) | ' | | | | 430 | * | | * | \ | - | = | / | | ( | ) | < | > | | |
| 373 | * |------+------+------+------+------+------|------+------+------+------+------+------| | 431 | * |------+------+------+------+------+------|------+------+------+------+------+------| |
| 374 | * | | | | | _ | + | { | } | [ | ] | " | | | | 432 | * | & | ^ | | | _ | + | ? | | [ | ] | { | } | : | |
| 375 | * |------+------+------+------+------+------+------+------+------+------+------+------| | 433 | * |------+------+------+------+------+------+------+------+------+------+------+------| |
| 376 | * | | | | | | | | | | | | | 434 | * | | | | | | | | | | | | |
| 377 | * `-----------------------------------------------------------------------------------' | 435 | * `-----------------------------------------------------------------------------------' |
| 378 | */ | 436 | */ |
| 379 | [_PUNC] = { | 437 | [_PUNC] = KEYMAP( |
| 380 | {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV }, | 438 | KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, |
| 381 | {XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX}, | 439 | KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, XXXXXXX, KC_LPRN, KC_RPRN, KC_LABK, KC_RABK, _______, |
| 382 | {XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX}, | 440 | KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, XXXXXXX, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_COLN, |
| 383 | {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} | 441 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ |
| 384 | }, | 442 | ), |
| 385 | 443 | ||
| 386 | /* Num | 444 | /* Num |
| 387 | * ,-----------------------------------------------------------------------------------. | 445 | * ,-----------------------------------------------------------------------------------. |
| 388 | * | ^ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | | 446 | * | ~ | ! | @ | # | $ | % | A | 7 | 8 | 9 | D | ` | |
| 389 | * |------+------+------+------+------+-------------+------+------+------+------+------| | 447 | * |------+------+------+------+------+-------------+------+------+------+------+------| |
| 390 | * | Esc | @ | A | B | C | ( | ) | 4 | 5 | 6 | : |Enter | | 448 | * | | * | \ | - | = | / | B | 4 | 5 | 6 | E | | |
| 391 | * |------+------+------+------+------+------|------+------+------+------+------+------| | 449 | * |------+------+------+------+------+------|------+------+------+------+------+------| |
| 392 | * | & | # | D | E | F | [ | ] | 1 | 2 | 3 | / | * | | 450 | * | & | ^ | | | _ | + | ? | C | 1 | 2 | 3 | F | : | |
| 393 | * |------+------+------+------+------+------+------+------+------+------+------+------| | 451 | * |------+------+------+------+------+------+------+------+------+------+------+------| |
| 394 | * | | | | x | | | 0 | , | . | + | - | | 452 | * | | | | | | | x | 0 | , | . | | | |
| 395 | * `-----------------------------------------------------------------------------------' | 453 | * `-----------------------------------------------------------------------------------' |
| 396 | */ | 454 | */ |
| 397 | [_NUM] = { | 455 | [_NUM] = KEYMAP( |
| 398 | {KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, | 456 | KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, S(KC_A), KC_7, KC_8, KC_9, S(KC_D), _______, |
| 399 | { KC_ESC, KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LPRN, KC_RPRN, KC_4, KC_5, KC_6, KC_COLN, KC_ENT}, | 457 | KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, S(KC_B), KC_4, KC_5, KC_6, S(KC_E), _______, |
| 400 | {KC_AMPR, KC_HASH, S(KC_D), S(KC_E), S(KC_F), KC_LBRC, KC_RBRC, KC_1, KC_2, KC_3, KC_SLSH, KC_ASTR}, | 458 | KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, S(KC_C), KC_1, KC_2, KC_3, S(KC_F), KC_COLN, |
| 401 | {_______, _______, _______, KC_X, _______, KC_SPC, KC_SPC, KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_MINS} | 459 | _______, _______, _______, _______, _______, _______, _______, LT(_PUNC, KC_0), KC_COMM, KC_DOT, KC_X, _______ |
| 402 | }, | 460 | ), |
| 403 | 461 | ||
| 404 | /* Func | 462 | /* Func |
| 405 | * ,-----------------------------------------------------------------------------------. | 463 | * ,-----------------------------------------------------------------------------------. |
| @@ -412,12 +470,48 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 412 | * | | | | | | | | | | | | | 470 | * | | | | | | | | | | | | |
| 413 | * `-----------------------------------------------------------------------------------' | 471 | * `-----------------------------------------------------------------------------------' |
| 414 | */ | 472 | */ |
| 415 | [_FUNC] = { | 473 | [_FUNC] = KEYMAP( |
| 416 | {XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL}, | 474 | XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL, |
| 417 | {XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS}, | 475 | XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, KC_PSCR, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS, |
| 418 | {_______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______}, | 476 | _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______, |
| 419 | {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______} | 477 | _______, _______, _______, _______, PUNC, _______, _______, _______, _______, _______, _______, _______ |
| 420 | }, | 478 | ), |
| 479 | |||
| 480 | /* Uppercase Greek | ||
| 481 | * ,-----------------------------------------------------------------------------------. | ||
| 482 | * | | | | | | | | | | | | | | ||
| 483 | * |------+------+------+------+------+-------------+------+------+------+------+------| | ||
| 484 | * | | | | | | | | | | | | | | ||
| 485 | * |------+------+------+------+------+------+------+------+------+------+------+------| | ||
| 486 | * | | | | | | | | | | | | | | ||
| 487 | * |------+------+------+------+------+------+------+------+------+------+------+------| | ||
| 488 | * | | | | | | | | | | | | | | ||
| 489 | * `-----------------------------------------------------------------------------------' | ||
| 490 | */ | ||
| 491 | [_GREEKU] = KEYMAP( | ||
| 492 | _______, XXXXXXX, XXXXXXX,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______, | ||
| 493 | _______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), KC_QUOT, _______, | ||
| 494 | _______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), KC_COMM, KC_DOT, KC_SLSH, _______, | ||
| 495 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ | ||
| 496 | ), | ||
| 497 | |||
| 498 | /* Lowercase Greek | ||
| 499 | * ,-----------------------------------------------------------------------------------. | ||
| 500 | * | | | | | | | | | | | | | | ||
| 501 | * |------+------+------+------+------+-------------+------+------+------+------+------| | ||
| 502 | * | | | | | | | | | | | | | | ||
| 503 | * |------+------+------+------+------+------+------+------+------+------+------+------| | ||
| 504 | * | | | | | | | | | | | | | | ||
| 505 | * |------+------+------+------+------+------+------+------+------+------+------+------| | ||
| 506 | * | | | | | | | | | | | | | | ||
| 507 | * `-----------------------------------------------------------------------------------' | ||
| 508 | */ | ||
| 509 | [_GREEKL] = KEYMAP( | ||
| 510 | _______, XXXXXXX,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______, | ||
| 511 | _______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), KC_QUOT, _______, | ||
| 512 | _______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), KC_COMM, KC_DOT, KC_SLSH, _______, | ||
| 513 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ | ||
| 514 | ), | ||
| 421 | 515 | ||
| 422 | /* Emoji | 516 | /* Emoji |
| 423 | * ,-----------------------------------------------------------------------------------. | 517 | * ,-----------------------------------------------------------------------------------. |
| @@ -430,30 +524,48 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 430 | * | | | | | | | | | | | | | | 524 | * | | | | | | | | | | | | | |
| 431 | * `-----------------------------------------------------------------------------------' | 525 | * `-----------------------------------------------------------------------------------' |
| 432 | */ | 526 | */ |
| 433 | [_EMOJI] = { | 527 | [_EMOJI] = KEYMAP( |
| 434 | {X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW)}, | 528 | X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW), |
| 435 | {X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS)}, | 529 | X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS), |
| 436 | {X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH)}, | 530 | X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH), |
| 437 | { X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK)} | 531 | X(POO), X(EYES), _______,X(HUNRD), X(SKULL),X(HORNS), X(HALO), X(FEAR),X(YUMMY),_______,X(DISAP),X(NOEVK) |
| 438 | }, | 532 | ), |
| 439 | 533 | ||
| 440 | /* GUI | 534 | /* GUI |
| 441 | * ,-----------------------------------------------------------------------------------. | 535 | * ,-----------------------------------------------------------------------------------. |
| 442 | * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | | | 536 | * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | | |
| 443 | * |------+------+------+------+------+-------------+------+------+------+------+------| | 537 | * |------+------+------+------+------+-------------+------+------+------+------+------| |
| 444 | * |Linux | | Vol- | Mute | Vol+ | | | D- | | D+ | |Qwerty| | 538 | * | | | Vol- | Mute | Vol+ | | | Prev | | Next | | | |
| 445 | * |------+------+------+------+------+------+------+------+------+------+------+------| | 539 | * |------+------+------+------+------+------+------+------+------+------+------+------| |
| 446 | * | Win | | Prev | Play | Next | | | | | | |Colmak| | 540 | * | | | Prev | Play | Next | BTab | Tab | | | | | | |
| 447 | * |------+------+------+------+------+------+------+------+------+------+------+------| | 541 | * |------+------+------+------+------+------+------+------+------+------+------+------| |
| 448 | * | OSX | | | | | BL- | BL+ | | | | |Workmn| | 542 | * | | | | | | | | | | | | | |
| 449 | * `-----------------------------------------------------------------------------------' | 543 | * `-----------------------------------------------------------------------------------' |
| 450 | */ | 544 | */ |
| 451 | [_GUI] = { | 545 | [_GUI] = KEYMAP( |
| 452 | {_______, LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5),LGUI(KC_6),LGUI(KC_7),LGUI(KC_8),LGUI(KC_9),LGUI(KC_0), _______}, | 546 | XXXXXXX, G(KC_1), G(KC_2), G(KC_3), G(KC_4), G(KC_5), G(KC_6), G(KC_7), G(KC_8), G(KC_9), G(KC_0), XXXXXXX, |
| 453 | { LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,_______, QWERTY}, | 547 | XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, S(KC_TAB),KC_TAB, KC_WWWB, XXXXXXX, KC_WWWF, XXXXXXX, XXXXXXX, |
| 454 | { WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, COLEMAK}, | 548 | XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, KC_SPC, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, |
| 455 | { OSX, _______, _______, _______, _______, BL_DEC, BL_INC, _______, _______, _______, _______, WORKMAN} | 549 | XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX |
| 456 | }, | 550 | ), |
| 551 | |||
| 552 | /* Sys | ||
| 553 | * ,-----------------------------------------------------------------------------------. | ||
| 554 | * | |Qwerty| Win | |Reset | | | USB | | | | | | ||
| 555 | * |------+------+------+------+------+-------------+------+------+------+------+------| | ||
| 556 | * | |Audio | |Dvorak| | Glow | | |WorkMn|Linux | | | | ||
| 557 | * |------+------+------+------+------+------+------+------+------+------+------+------| | ||
| 558 | * | | | |Colmak| | BLE |Norman|MacOS | | | | | | ||
| 559 | * |------+------+------+------+------+------+------+------+------+------+------+------| | ||
| 560 | * | | | | | | | | | | | | | | ||
| 561 | * `-----------------------------------------------------------------------------------' | ||
| 562 | */ | ||
| 563 | [_SYS] = KEYMAP( | ||
| 564 | XXXXXXX, QWERTY, WIN, XXXXXXX, RESET, XXXXXXX, XXXXXXX, OUT_USB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||
| 565 | XXXXXXX, FC_TOG, XXXXXXX, DVORAK, XXXXXXX, GLOW, XXXXXXX, XXXXXXX, WORKMAN, LINUX, XXXXXXX, XXXXXXX, | ||
| 566 | XXXXXXX, XXXXXXX, XXXXXXX, COLEMAK, XXXXXXX, OUT_BLE, NORMAN, OSX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, | ||
| 567 | _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______ | ||
| 568 | ), | ||
| 457 | 569 | ||
| 458 | }; | 570 | }; |
| 459 | 571 | ||
| @@ -476,6 +588,34 @@ void persistant_default_layer_set(uint16_t default_layer) { | |||
| 476 | default_layer_set(default_layer); | 588 | default_layer_set(default_layer); |
| 477 | } | 589 | } |
| 478 | 590 | ||
| 591 | #ifdef DOUBLESPACE_LAYER_ENABLE | ||
| 592 | void process_doublespace(bool pressed, bool *isactive, bool *otheractive, bool *isemitted) { | ||
| 593 | if (pressed) { | ||
| 594 | *isactive = true; | ||
| 595 | if (*otheractive) { | ||
| 596 | layer_on(_SPACE); | ||
| 597 | register_code(KC_LALT); // sends alt and enter layer | ||
| 598 | space_layer_entered = true; | ||
| 599 | } | ||
| 600 | } else { | ||
| 601 | *isactive = false; | ||
| 602 | if (space_layer_entered) { | ||
| 603 | unregister_code(KC_LALT); // release alt and exit layer | ||
| 604 | layer_off(_SPACE); | ||
| 605 | if (!*otheractive) { | ||
| 606 | space_layer_entered = false; | ||
| 607 | } | ||
| 608 | } else { | ||
| 609 | if (!*isemitted) { | ||
| 610 | register_code(KC_SPC); | ||
| 611 | unregister_code(KC_SPC); | ||
| 612 | } | ||
| 613 | *isemitted = false; | ||
| 614 | } | ||
| 615 | } | ||
| 616 | } | ||
| 617 | #endif | ||
| 618 | |||
| 479 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | 619 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
| 480 | // faux clicky | 620 | // faux clicky |
| 481 | // if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0); | 621 | // if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0); |
| @@ -493,27 +633,57 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 493 | #endif | 633 | #endif |
| 494 | #endif | 634 | #endif |
| 495 | 635 | ||
| 496 | bool lshifted = keyboard_report->mods & MOD_BIT(KC_LSFT); | 636 | bool lshift = keyboard_report->mods & MOD_BIT(KC_LSFT); |
| 497 | bool rshifted = keyboard_report->mods & MOD_BIT(KC_RSFT); | 637 | bool rshift = keyboard_report->mods & MOD_BIT(KC_RSFT); |
| 638 | |||
| 639 | #ifdef DOUBLESPACE_LAYER_ENABLE | ||
| 640 | // double-space: send space immediately if any other key depressed before space is released | ||
| 641 | if ((lspace_active ^ rspace_active) | ||
| 642 | && keycode != LSPACE | ||
| 643 | && keycode != RSPACE | ||
| 644 | && record->event.pressed) | ||
| 645 | { | ||
| 646 | if (lspace_active) { | ||
| 647 | if (!lspace_emitted) { | ||
| 648 | register_code(KC_SPC); | ||
| 649 | unregister_code(KC_SPC); | ||
| 650 | } | ||
| 651 | lspace_emitted = true; | ||
| 652 | } | ||
| 653 | if (rspace_active) { | ||
| 654 | if (!rspace_emitted) { | ||
| 655 | register_code(KC_SPC); | ||
| 656 | unregister_code(KC_SPC); | ||
| 657 | } | ||
| 658 | rspace_emitted = true; | ||
| 659 | } | ||
| 660 | } | ||
| 661 | |||
| 662 | if (layer == _SPACE && keycode != S(KC_TAB) && keycode != KC_TAB && keycode != KC_ESC && keycode != XXXXXXX) { | ||
| 663 | if (record->event.pressed) { | ||
| 664 | unregister_code(KC_LALT); | ||
| 665 | } else { | ||
| 666 | register_code(KC_LALT); | ||
| 667 | } | ||
| 668 | } | ||
| 669 | #endif | ||
| 498 | 670 | ||
| 499 | switch (keycode) { | 671 | switch (keycode) { |
| 500 | // Greek layer handling | 672 | |
| 501 | case GREEK: | 673 | #ifdef DOUBLESPACE_LAYER_ENABLE |
| 502 | if (record->event.pressed) { | 674 | // double-space enter space layer |
| 503 | if (lshifted || rshifted) { | 675 | case LSPACE: |
| 504 | layer_on(_GREEKU); | 676 | process_doublespace(record->event.pressed, &lspace_active, &rspace_active, &lspace_emitted); |
| 505 | layer_off(_GREEKL); | ||
| 506 | } else { | ||
| 507 | layer_on(_GREEKL); | ||
| 508 | layer_off(_GREEKU); | ||
| 509 | } | ||
| 510 | } else { | ||
| 511 | layer_off(_GREEKU); | ||
| 512 | layer_off(_GREEKL); | ||
| 513 | } | ||
| 514 | return false; | 677 | return false; |
| 515 | break; | 678 | break; |
| 679 | case RSPACE: | ||
| 680 | process_doublespace(record->event.pressed, &rspace_active, &lspace_active, &rspace_emitted); | ||
| 681 | return false; | ||
| 682 | break; | ||
| 683 | #endif | ||
| 516 | 684 | ||
| 685 | // handle greek layer shift | ||
| 686 | // handle both shift = capslock | ||
| 517 | case KC_LSFT: | 687 | case KC_LSFT: |
| 518 | case KC_RSFT: | 688 | case KC_RSFT: |
| 519 | ; | 689 | ; |
| @@ -523,11 +693,34 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 523 | layer_on(_GREEKU); | 693 | layer_on(_GREEKU); |
| 524 | layer_off(_GREEKL); | 694 | layer_off(_GREEKL); |
| 525 | } else { | 695 | } else { |
| 526 | if (lshifted ^ rshifted) { // if only one shift is pressed | 696 | if (lshift ^ rshift) { // if only one shift was pressed |
| 527 | layer_on(_GREEKL); | 697 | layer_on(_GREEKL); |
| 528 | layer_off(_GREEKU); | 698 | layer_off(_GREEKU); |
| 529 | } | 699 | } |
| 530 | } | 700 | } |
| 701 | } else { | ||
| 702 | if (record->event.pressed) { | ||
| 703 | if (lshift ^ rshift) { // if only one shift was pressed | ||
| 704 | register_code(KC_CAPS); | ||
| 705 | unregister_code(KC_CAPS); | ||
| 706 | } | ||
| 707 | } | ||
| 708 | } | ||
| 709 | return true; | ||
| 710 | break; | ||
| 711 | |||
| 712 | // press both ctrls to activate SYS layer | ||
| 713 | case KC_LCTL: | ||
| 714 | case KC_RCTL: | ||
| 715 | ; | ||
| 716 | bool lctrl = keyboard_report->mods & MOD_BIT(KC_LCTL); | ||
| 717 | bool rctrl = keyboard_report->mods & MOD_BIT(KC_RCTL); | ||
| 718 | if (record->event.pressed) { | ||
| 719 | if (lctrl ^ rctrl) { // if only one ctrl was pressed | ||
| 720 | layer_on(_SYS); | ||
| 721 | } | ||
| 722 | } else { | ||
| 723 | layer_off(_SYS); | ||
| 531 | } | 724 | } |
| 532 | return true; | 725 | return true; |
| 533 | break; | 726 | break; |
| @@ -535,13 +728,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 535 | // QWERTZ style comma and dot: semicolon and colon when shifted | 728 | // QWERTZ style comma and dot: semicolon and colon when shifted |
| 536 | case KC_COMM: | 729 | case KC_COMM: |
| 537 | if (record->event.pressed) { | 730 | if (record->event.pressed) { |
| 538 | if (lshifted || rshifted) { | 731 | if (lshift || rshift) { |
| 539 | if (lshifted) unregister_code(KC_LSFT); | 732 | if (lshift) unregister_code(KC_LSFT); |
| 540 | if (rshifted) unregister_code(KC_RSFT); | 733 | if (rshift) unregister_code(KC_RSFT); |
| 541 | register_code(KC_SCLN); | 734 | register_code(KC_SCLN); |
| 542 | unregister_code(KC_SCLN); | 735 | unregister_code(KC_SCLN); |
| 543 | if (lshifted) register_code(KC_LSFT); | 736 | if (lshift) register_code(KC_LSFT); |
| 544 | if (rshifted) register_code(KC_RSFT); | 737 | if (rshift) register_code(KC_RSFT); |
| 545 | } else { | 738 | } else { |
| 546 | register_code(KC_COMM); | 739 | register_code(KC_COMM); |
| 547 | unregister_code(KC_COMM); | 740 | unregister_code(KC_COMM); |
| @@ -565,53 +758,73 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 565 | // layout switcher | 758 | // layout switcher |
| 566 | case QWERTY: | 759 | case QWERTY: |
| 567 | if (record->event.pressed) { | 760 | if (record->event.pressed) { |
| 568 | #ifdef AUDIO_ENABLE | ||
| 569 | PLAY_NOTE_ARRAY(tone_qwerty, false, 0); | ||
| 570 | #endif | ||
| 571 | persistant_default_layer_set(1UL<<_QWERTY); | 761 | persistant_default_layer_set(1UL<<_QWERTY); |
| 572 | } | 762 | } |
| 573 | return false; | 763 | return false; |
| 574 | break; | 764 | break; |
| 765 | #ifdef LAYOUT_DVORAK | ||
| 766 | case DVORAK: | ||
| 767 | if (record->event.pressed) { | ||
| 768 | persistant_default_layer_set(1UL<<_DVORAK); | ||
| 769 | } | ||
| 770 | return false; | ||
| 771 | break; | ||
| 772 | #endif | ||
| 773 | #ifdef LAYOUT_COLEMAK | ||
| 575 | case COLEMAK: | 774 | case COLEMAK: |
| 576 | if (record->event.pressed) { | 775 | if (record->event.pressed) { |
| 577 | #ifdef AUDIO_ENABLE | ||
| 578 | PLAY_NOTE_ARRAY(tone_colemak, false, 0); | ||
| 579 | #endif | ||
| 580 | persistant_default_layer_set(1UL<<_COLEMAK); | 776 | persistant_default_layer_set(1UL<<_COLEMAK); |
| 581 | } | 777 | } |
| 582 | return false; | 778 | return false; |
| 583 | break; | 779 | break; |
| 780 | #endif | ||
| 781 | #ifdef LAYOUT_WORKMAN | ||
| 584 | case WORKMAN: | 782 | case WORKMAN: |
| 585 | if (record->event.pressed) { | 783 | if (record->event.pressed) { |
| 586 | #ifdef AUDIO_ENABLE | ||
| 587 | PLAY_NOTE_ARRAY(tone_workman, false, 0); | ||
| 588 | #endif | ||
| 589 | persistant_default_layer_set(1UL<<_WORKMAN); | 784 | persistant_default_layer_set(1UL<<_WORKMAN); |
| 590 | } | 785 | } |
| 591 | return false; | 786 | return false; |
| 592 | break; | 787 | break; |
| 788 | #endif | ||
| 789 | #ifdef LAYOUT_NORMAN | ||
| 790 | case NORMAN: | ||
| 791 | if (record->event.pressed) { | ||
| 792 | persistant_default_layer_set(1UL<<_NORMAN); | ||
| 793 | } | ||
| 794 | return false; | ||
| 795 | break; | ||
| 796 | #endif | ||
| 593 | 797 | ||
| 594 | // layer switchers | 798 | // layer switchers |
| 595 | case PUNC: | 799 | case PUNC: |
| 596 | if (record->event.pressed) { | 800 | if (record->event.pressed) { |
| 597 | layer_on(_PUNC); | 801 | layer_on(_PUNC); |
| 598 | update_tri_layer(_PUNC, _EMOJI, _GUI); | 802 | update_tri_layer(_PUNC, _GREEKL, _EMOJI); |
| 599 | } else { | 803 | } else { |
| 600 | layer_off(_PUNC); | 804 | layer_off(_PUNC); |
| 601 | update_tri_layer(_PUNC, _EMOJI, _GUI); | 805 | update_tri_layer(_PUNC, _GREEKL, _EMOJI); |
| 602 | } | 806 | } |
| 603 | return false; | 807 | return false; |
| 604 | break; | 808 | break; |
| 605 | case EMOJI: | 809 | |
| 810 | case GREEK: | ||
| 606 | if (record->event.pressed) { | 811 | if (record->event.pressed) { |
| 607 | layer_on(_EMOJI); | 812 | if (lshift || rshift) { |
| 608 | update_tri_layer(_PUNC, _EMOJI, _GUI); | 813 | layer_on(_GREEKU); |
| 814 | layer_off(_GREEKL); | ||
| 815 | } else { | ||
| 816 | layer_on(_GREEKL); | ||
| 817 | layer_off(_GREEKU); | ||
| 818 | update_tri_layer(_PUNC, _GREEKL, _EMOJI); | ||
| 819 | } | ||
| 609 | } else { | 820 | } else { |
| 610 | layer_off(_EMOJI); | 821 | layer_off(_GREEKU); |
| 611 | update_tri_layer(_PUNC, _EMOJI, _GUI); | 822 | layer_off(_GREEKL); |
| 823 | update_tri_layer(_PUNC, _GREEKL, _EMOJI); | ||
| 612 | } | 824 | } |
| 613 | return false; | 825 | return false; |
| 614 | break; | 826 | break; |
| 827 | |||
| 615 | case NUM: | 828 | case NUM: |
| 616 | if (record->event.pressed) { | 829 | if (record->event.pressed) { |
| 617 | layer_on(_NUM); | 830 | layer_on(_NUM); |
| @@ -651,6 +864,12 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 651 | #endif | 864 | #endif |
| 652 | return false; | 865 | return false; |
| 653 | break; | 866 | break; |
| 867 | |||
| 868 | // faux clicky toggle, TBD | ||
| 869 | case FC_TOG: | ||
| 870 | return true; | ||
| 871 | break; | ||
| 872 | |||
| 654 | } | 873 | } |
| 655 | return true; | 874 | return true; |
| 656 | } | 875 | } |
| @@ -677,4 +896,17 @@ void shutdown_user() | |||
| 677 | stop_all_notes(); | 896 | stop_all_notes(); |
| 678 | } | 897 | } |
| 679 | 898 | ||
| 680 | #endif \ No newline at end of file | 899 | #endif |
| 900 | |||
| 901 | void matrix_scan_user(void) { | ||
| 902 | } | ||
| 903 | |||
| 904 | void led_set_user(uint8_t usb_led) { | ||
| 905 | } | ||
| 906 | |||
| 907 | void turn_off_capslock() { | ||
| 908 | if (capslock) { | ||
| 909 | register_code(KC_CAPS); | ||
| 910 | unregister_code(KC_CAPS); | ||
| 911 | } | ||
| 912 | } | ||
diff --git a/quantum/fauxclicky.c b/quantum/fauxclicky.c new file mode 100644 index 000000000..13273e705 --- /dev/null +++ b/quantum/fauxclicky.c | |||
| @@ -0,0 +1,68 @@ | |||
| 1 | /* | ||
| 2 | Copyright 2017 Priyadi Iman Nurcahyo | ||
| 3 | |||
| 4 | This program is free software: you can redistribute it and/or modify | ||
| 5 | it under the terms of the GNU General Public License as published by | ||
| 6 | the Free Software Foundation, either version 2 of the License, or | ||
| 7 | (at your option) any later version. | ||
| 8 | This program is distributed in the hope that it will be useful, | ||
| 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 11 | GNU General Public License for more details. | ||
| 12 | You should have received a copy of the GNU General Public License | ||
| 13 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <avr/interrupt.h> | ||
| 17 | #include <avr/io.h> | ||
| 18 | #include <timer.h> | ||
| 19 | #include <fauxclicky.h> | ||
| 20 | #include <stdbool.h> | ||
| 21 | #include <musical_notes.h> | ||
| 22 | |||
| 23 | __attribute__ ((weak)) | ||
| 24 | float fauxclicky_pressed_note[2] = MUSICAL_NOTE(_F3, 2); | ||
| 25 | __attribute__ ((weak)) | ||
| 26 | float fauxclicky_released_note[2] = MUSICAL_NOTE(_A3, 2); | ||
| 27 | __attribute__ ((weak)) | ||
| 28 | float fauxclicky_beep_note[2] = MUSICAL_NOTE(_C3, 2); | ||
| 29 | |||
| 30 | bool fauxclicky_enabled = true; | ||
| 31 | uint16_t note_start = 0; | ||
| 32 | bool note_playing = false; | ||
| 33 | uint16_t note_period = 0; | ||
| 34 | |||
| 35 | void fauxclicky_init() | ||
| 36 | { | ||
| 37 | // Set port PC6 (OC3A and /OC4A) as output | ||
| 38 | DDRC |= _BV(PORTC6); | ||
| 39 | |||
| 40 | // TCCR3A / TCCR3B: Timer/Counter #3 Control Registers | ||
| 41 | TCCR3A = (0 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30); | ||
| 42 | TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30); | ||
| 43 | } | ||
| 44 | |||
| 45 | void fauxclicky_stop() | ||
| 46 | { | ||
| 47 | FAUXCLICKY_DISABLE_OUTPUT; | ||
| 48 | note_playing = false; | ||
| 49 | } | ||
| 50 | |||
| 51 | void fauxclicky_play(float note[2]) { | ||
| 52 | if (!fauxclicky_enabled) return; | ||
| 53 | if (note_playing) fauxclicky_stop(); | ||
| 54 | FAUXCLICKY_TIMER_PERIOD = (uint16_t)(((float)F_CPU) / (note[0] * FAUXCLICKY_CPU_PRESCALER)); | ||
| 55 | FAUXCLICKY_DUTY_CYCLE = (uint16_t)((((float)F_CPU) / (note[0] * FAUXCLICKY_CPU_PRESCALER)) / 2); | ||
| 56 | note_playing = true; | ||
| 57 | note_period = (note[1] / 16) * (60 / (float)FAUXCLICKY_TEMPO) * 100; // check this | ||
| 58 | note_start = timer_read(); | ||
| 59 | FAUXCLICKY_ENABLE_OUTPUT; | ||
| 60 | } | ||
| 61 | |||
| 62 | void fauxclicky_check() { | ||
| 63 | if (!note_playing) return; | ||
| 64 | |||
| 65 | if (timer_elapsed(note_start) > note_period) { | ||
| 66 | fauxclicky_stop(); | ||
| 67 | } | ||
| 68 | } | ||
diff --git a/quantum/fauxclicky.h b/quantum/fauxclicky.h new file mode 100644 index 000000000..109bd0d83 --- /dev/null +++ b/quantum/fauxclicky.h | |||
| @@ -0,0 +1,99 @@ | |||
| 1 | /* | ||
| 2 | Copyright 2017 Priyadi Iman Nurcahyo | ||
| 3 | |||
| 4 | This program is free software: you can redistribute it and/or modify | ||
| 5 | it under the terms of the GNU General Public License as published by | ||
| 6 | the Free Software Foundation, either version 2 of the License, or | ||
| 7 | (at your option) any later version. | ||
| 8 | This program is distributed in the hope that it will be useful, | ||
| 9 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 11 | GNU General Public License for more details. | ||
| 12 | You should have received a copy of the GNU General Public License | ||
| 13 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifdef AUDIO_ENABLE | ||
| 17 | #error "AUDIO_ENABLE and FAUXCLICKY_ENABLE cannot be both enabled" | ||
| 18 | #endif | ||
| 19 | |||
| 20 | #include "musical_notes.h" | ||
| 21 | #include "stdbool.h" | ||
| 22 | |||
| 23 | __attribute__ ((weak)) | ||
| 24 | float fauxclicky_pressed_note[2]; | ||
| 25 | __attribute__ ((weak)) | ||
| 26 | float fauxclicky_released_note[2]; | ||
| 27 | __attribute__ ((weak)) | ||
| 28 | float fauxclicky_beep_note[2]; | ||
| 29 | |||
| 30 | bool fauxclicky_enabled; | ||
| 31 | |||
| 32 | // | ||
| 33 | // tempo in BPM | ||
| 34 | // | ||
| 35 | |||
| 36 | #ifndef FAUXCLICKY_TEMPO | ||
| 37 | #define FAUXCLICKY_TEMPO TEMPO_DEFAULT | ||
| 38 | #endif | ||
| 39 | |||
| 40 | // beep on press | ||
| 41 | #define FAUXCLICKY_ACTION_PRESS fauxclicky_play(fauxclicky_pressed_note) | ||
| 42 | |||
| 43 | // beep on release | ||
| 44 | #define FAUXCLICKY_ACTION_RELEASE fauxclicky_play(fauxclicky_released_note) | ||
| 45 | |||
| 46 | // general purpose beep | ||
| 47 | #define FAUXCLICKY_BEEP fauxclicky_play(fauxclicky_beep_note) | ||
| 48 | |||
| 49 | // enable | ||
| 50 | #define FAUXCLICKY_ON fauxclicky_enabled = true | ||
| 51 | |||
| 52 | // disable | ||
| 53 | #define FAUXCLICKY_OFF do { \ | ||
| 54 | fauxclicky_enabled = false; \ | ||
| 55 | fauxclicky_stop(); \ | ||
| 56 | } while (0) | ||
| 57 | |||
| 58 | // toggle | ||
| 59 | #define FAUXCLICKY_TOGGLE do { \ | ||
| 60 | if (fauxclicky_enabled) { \ | ||
| 61 | FAUXCLICKY_OFF; \ | ||
| 62 | } else { \ | ||
| 63 | FAUXCLICKY_ON; \ | ||
| 64 | } \ | ||
| 65 | } while (0) | ||
| 66 | |||
| 67 | // | ||
| 68 | // pin configuration | ||
| 69 | // | ||
| 70 | |||
| 71 | #ifndef FAUXCLICKY_CPU_PRESCALER | ||
| 72 | #define FAUXCLICKY_CPU_PRESCALER 8 | ||
| 73 | #endif | ||
| 74 | |||
| 75 | #ifndef FAUXCLICKY_ENABLE_OUTPUT | ||
| 76 | #define FAUXCLICKY_ENABLE_OUTPUT TCCR3A |= _BV(COM3A1); | ||
| 77 | #endif | ||
| 78 | |||
| 79 | #ifndef FAUXCLICKY_DISABLE_OUTPUT | ||
| 80 | #define FAUXCLICKY_DISABLE_OUTPUT TCCR3A &= ~(_BV(COM3A1) | _BV(COM3A0)); | ||
| 81 | #endif | ||
| 82 | |||
| 83 | #ifndef FAUXCLICKY_TIMER_PERIOD | ||
| 84 | #define FAUXCLICKY_TIMER_PERIOD ICR3 | ||
| 85 | #endif | ||
| 86 | |||
| 87 | #ifndef FAUXCLICKY_DUTY_CYCLE | ||
| 88 | #define FAUXCLICKY_DUTY_CYCLE OCR3A | ||
| 89 | #endif | ||
| 90 | |||
| 91 | // | ||
| 92 | // definitions | ||
| 93 | // | ||
| 94 | |||
| 95 | void fauxclicky_init(void); | ||
| 96 | void fauxclicky_stop(void); | ||
| 97 | void fauxclicky_play(float note[2]); | ||
| 98 | void fauxclicky_check(void); | ||
| 99 | |||
diff --git a/quantum/quantum.c b/quantum/quantum.c index 45ea8cb73..2088c10c9 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c | |||
| @@ -7,6 +7,10 @@ | |||
| 7 | #define TAPPING_TERM 200 | 7 | #define TAPPING_TERM 200 |
| 8 | #endif | 8 | #endif |
| 9 | 9 | ||
| 10 | #ifdef FAUXCLICKY_ENABLE | ||
| 11 | #include "fauxclicky.h" | ||
| 12 | #endif | ||
| 13 | |||
| 10 | static void do_code16 (uint16_t code, void (*f) (uint8_t)) { | 14 | static void do_code16 (uint16_t code, void (*f) (uint8_t)) { |
| 11 | switch (code) { | 15 | switch (code) { |
| 12 | case QK_MODS ... QK_MODS_MAX: | 16 | case QK_MODS ... QK_MODS_MAX: |
| @@ -196,6 +200,26 @@ bool process_record_quantum(keyrecord_t *record) { | |||
| 196 | } | 200 | } |
| 197 | return false; | 201 | return false; |
| 198 | break; | 202 | break; |
| 203 | #ifdef FAUXCLICKY_ENABLE | ||
| 204 | case FC_TOG: | ||
| 205 | if (record->event.pressed) { | ||
| 206 | FAUXCLICKY_TOGGLE; | ||
| 207 | } | ||
| 208 | return false; | ||
| 209 | break; | ||
| 210 | case FC_ON: | ||
| 211 | if (record->event.pressed) { | ||
| 212 | FAUXCLICKY_ON; | ||
| 213 | } | ||
| 214 | return false; | ||
| 215 | break; | ||
| 216 | case FC_OFF: | ||
| 217 | if (record->event.pressed) { | ||
| 218 | FAUXCLICKY_OFF; | ||
| 219 | } | ||
| 220 | return false; | ||
| 221 | break; | ||
| 222 | #endif | ||
| 199 | #ifdef RGBLIGHT_ENABLE | 223 | #ifdef RGBLIGHT_ENABLE |
| 200 | case RGB_TOG: | 224 | case RGB_TOG: |
| 201 | if (record->event.pressed) { | 225 | if (record->event.pressed) { |
diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index ab2e79026..cc7a5013f 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h | |||
| @@ -86,6 +86,13 @@ enum quantum_keycodes { | |||
| 86 | AU_OFF, | 86 | AU_OFF, |
| 87 | AU_TOG, | 87 | AU_TOG, |
| 88 | 88 | ||
| 89 | #ifdef FAUXCLICKY_ENABLE | ||
| 90 | // Faux clicky | ||
| 91 | FC_ON, | ||
| 92 | FC_OFF, | ||
| 93 | FC_TOG, | ||
| 94 | #endif | ||
| 95 | |||
| 89 | // Music mode on/off/toggle | 96 | // Music mode on/off/toggle |
| 90 | MU_ON, | 97 | MU_ON, |
| 91 | MU_OFF, | 98 | MU_OFF, |
diff --git a/quantum/template/rules.mk b/quantum/template/rules.mk index 55898147d..bad3387bf 100644 --- a/quantum/template/rules.mk +++ b/quantum/template/rules.mk | |||
| @@ -65,3 +65,4 @@ MIDI_ENABLE ?= no # MIDI controls | |||
| 65 | UNICODE_ENABLE ?= no # Unicode | 65 | UNICODE_ENABLE ?= no # Unicode |
| 66 | BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID | 66 | BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID |
| 67 | AUDIO_ENABLE ?= no # Audio output on port C6 | 67 | AUDIO_ENABLE ?= no # Audio output on port C6 |
| 68 | FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches | ||
diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index f03670a7f..94de36918 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c | |||
| @@ -33,6 +33,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| 33 | #include "nodebug.h" | 33 | #include "nodebug.h" |
| 34 | #endif | 34 | #endif |
| 35 | 35 | ||
| 36 | #ifdef FAUXCLICKY_ENABLE | ||
| 37 | #include <fauxclicky.h> | ||
| 38 | #endif | ||
| 36 | 39 | ||
| 37 | void action_exec(keyevent_t event) | 40 | void action_exec(keyevent_t event) |
| 38 | { | 41 | { |
| @@ -41,6 +44,16 @@ void action_exec(keyevent_t event) | |||
| 41 | dprint("EVENT: "); debug_event(event); dprintln(); | 44 | dprint("EVENT: "); debug_event(event); dprintln(); |
| 42 | } | 45 | } |
| 43 | 46 | ||
| 47 | #ifdef FAUXCLICKY_ENABLE | ||
| 48 | if (IS_PRESSED(event)) { | ||
| 49 | FAUXCLICKY_ACTION_PRESS; | ||
| 50 | } | ||
| 51 | if (IS_RELEASED(event)) { | ||
| 52 | FAUXCLICKY_ACTION_RELEASE; | ||
| 53 | } | ||
| 54 | fauxclicky_check(); | ||
| 55 | #endif | ||
| 56 | |||
| 44 | #ifdef ONEHAND_ENABLE | 57 | #ifdef ONEHAND_ENABLE |
| 45 | if (!IS_NOEVENT(event)) { | 58 | if (!IS_NOEVENT(event)) { |
| 46 | process_hand_swap(&event); | 59 | process_hand_swap(&event); |
diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c index 3aa82231b..eac1f1dd8 100644 --- a/tmk_core/common/keyboard.c +++ b/tmk_core/common/keyboard.c | |||
| @@ -51,6 +51,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| 51 | #ifdef RGBLIGHT_ENABLE | 51 | #ifdef RGBLIGHT_ENABLE |
| 52 | # include "rgblight.h" | 52 | # include "rgblight.h" |
| 53 | #endif | 53 | #endif |
| 54 | #ifdef FAUXCLICKY_ENABLE | ||
| 55 | # include "fauxclicky.h" | ||
| 56 | #endif | ||
| 54 | #ifdef SERIAL_LINK_ENABLE | 57 | #ifdef SERIAL_LINK_ENABLE |
| 55 | # include "serial_link/system/serial_link.h" | 58 | # include "serial_link/system/serial_link.h" |
| 56 | #endif | 59 | #endif |
| @@ -108,6 +111,9 @@ void keyboard_init(void) { | |||
| 108 | #ifdef RGBLIGHT_ENABLE | 111 | #ifdef RGBLIGHT_ENABLE |
| 109 | rgblight_init(); | 112 | rgblight_init(); |
| 110 | #endif | 113 | #endif |
| 114 | #ifdef FAUXCLICKY_ENABLE | ||
| 115 | fauxclicky_init(); | ||
| 116 | #endif | ||
| 111 | #if defined(NKRO_ENABLE) && defined(FORCE_NKRO) | 117 | #if defined(NKRO_ENABLE) && defined(FORCE_NKRO) |
| 112 | keymap_config.nkro = 1; | 118 | keymap_config.nkro = 1; |
| 113 | #endif | 119 | #endif |
