diff options
| author | Priyadi Iman Nurcahyo <priyadi@priyadi.net> | 2017-02-15 05:01:03 +0700 |
|---|---|---|
| committer | Priyadi Iman Nurcahyo <priyadi@priyadi.net> | 2017-02-15 05:01:03 +0700 |
| commit | df311c7b40cb6e611a522331dca9836f6eef9dce (patch) | |
| tree | 8fff78f001ae40368a5ab8c6a997227c7423efea | |
| parent | 3758cfd95fe25d6928cf6650b8be3301335dada9 (diff) | |
| download | qmk_firmware-df311c7b40cb6e611a522331dca9836f6eef9dce.tar.gz qmk_firmware-df311c7b40cb6e611a522331dca9836f6eef9dce.zip | |
num, func, punc 3state layer done right
| -rw-r--r-- | keyboards/handwired/promethium/keymaps/priyadi/keymap.c | 99 | ||||
| -rw-r--r-- | keyboards/handwired/promethium/promethium.h | 4 |
2 files changed, 46 insertions, 57 deletions
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c index 08a425823..9f07a7d08 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c +++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c | |||
| @@ -56,7 +56,7 @@ enum layers { | |||
| 56 | _GREEKL, | 56 | _GREEKL, |
| 57 | 57 | ||
| 58 | _NUM, | 58 | _NUM, |
| 59 | _FUNC, | 59 | _FUN, |
| 60 | _PUNC, | 60 | _PUNC, |
| 61 | 61 | ||
| 62 | _EMOJI, | 62 | _EMOJI, |
| @@ -76,9 +76,9 @@ enum planck_keycodes { | |||
| 76 | NORMAN, | 76 | NORMAN, |
| 77 | 77 | ||
| 78 | // layer switchers | 78 | // layer switchers |
| 79 | PUNC, | 79 | // PUNC, |
| 80 | NUM, | 80 | // NUM, |
| 81 | FUNC, | 81 | // FUN, |
| 82 | EMOJI, | 82 | EMOJI, |
| 83 | GUI, | 83 | GUI, |
| 84 | GREEK, | 84 | GREEK, |
| @@ -92,11 +92,16 @@ enum planck_keycodes { | |||
| 92 | LSPACE, | 92 | LSPACE, |
| 93 | RSPACE, | 93 | RSPACE, |
| 94 | GLOW, | 94 | GLOW, |
| 95 | FOR0, | ||
| 95 | 96 | ||
| 96 | // stub | 97 | // stub |
| 97 | AUDIO | 98 | AUDIO |
| 98 | }; | 99 | }; |
| 99 | 100 | ||
| 101 | #define NUM MO(_NUM) | ||
| 102 | #define FUN MO(_FUN) | ||
| 103 | #define FUN0 LT(_FUN, KC_0) | ||
| 104 | |||
| 100 | // unicode map | 105 | // unicode map |
| 101 | 106 | ||
| 102 | enum unicode_name { | 107 | enum unicode_name { |
| @@ -369,14 +374,14 @@ const uint8_t PROGMEM LED_MODS[] = { | |||
| 369 | const uint8_t PROGMEM LED_FN[] = { | 374 | const uint8_t PROGMEM LED_FN[] = { |
| 370 | LED_PUNC, | 375 | LED_PUNC, |
| 371 | LED_NUM, | 376 | LED_NUM, |
| 372 | LED_FUNC, | 377 | LED_FUN, |
| 373 | LED_EMOJI | 378 | LED_EMOJI |
| 374 | }; | 379 | }; |
| 375 | 380 | ||
| 376 | const uint8_t PROGMEM LED_INDICATORS[] = { | 381 | const uint8_t PROGMEM LED_INDICATORS[] = { |
| 377 | LED_IND_EMOJI, | 382 | LED_IND_EMOJI, |
| 378 | LED_IND_NUM, | 383 | LED_IND_NUM, |
| 379 | LED_IND_FUNC, | 384 | LED_IND_FUN, |
| 380 | LED_IND_BATTERY, | 385 | LED_IND_BATTERY, |
| 381 | LED_IND_USB, | 386 | LED_IND_USB, |
| 382 | LED_IND_BLUETOOTH, | 387 | LED_IND_BLUETOOTH, |
| @@ -435,7 +440,7 @@ void led_reset(void) { | |||
| 435 | void led_set_layer_indicator(void) { | 440 | void led_set_layer_indicator(void) { |
| 436 | static uint8_t oldlayer = 255; | 441 | static uint8_t oldlayer = 255; |
| 437 | 442 | ||
| 438 | rgbsps_set(LED_IND_FUNC, 0, 0, 0); | 443 | rgbsps_set(LED_IND_FUN, 0, 0, 0); |
| 439 | // rgbsps_set(LED_IND_NUM, 0, 0, 0); | 444 | // rgbsps_set(LED_IND_NUM, 0, 0, 0); |
| 440 | rgbsps_set(LED_IND_EMOJI, 0, 0, 0); | 445 | rgbsps_set(LED_IND_EMOJI, 0, 0, 0); |
| 441 | 446 | ||
| @@ -454,8 +459,8 @@ void led_set_layer_indicator(void) { | |||
| 454 | } | 459 | } |
| 455 | 460 | ||
| 456 | switch(layer) { | 461 | switch(layer) { |
| 457 | case _FUNC: | 462 | case _FUN: |
| 458 | rgbsps_set(LED_IND_FUNC, 15, 0, 0); | 463 | rgbsps_set(LED_IND_FUN, 15, 0, 0); |
| 459 | break; | 464 | break; |
| 460 | // case _NUM: | 465 | // case _NUM: |
| 461 | // rgbsps_set(LED_IND_NUM, 0, 0, 15); | 466 | // rgbsps_set(LED_IND_NUM, 0, 0, 15); |
| @@ -464,7 +469,7 @@ void led_set_layer_indicator(void) { | |||
| 464 | rgbsps_set(LED_IND_EMOJI, 15, 15, 0); | 469 | rgbsps_set(LED_IND_EMOJI, 15, 15, 0); |
| 465 | break; | 470 | break; |
| 466 | default: | 471 | default: |
| 467 | rgbsps_set(LED_IND_FUNC, 3, 3, 3); | 472 | rgbsps_set(LED_IND_FUN, 3, 3, 3); |
| 468 | // rgbsps_set(LED_IND_NUM, 3, 3, 3); | 473 | // rgbsps_set(LED_IND_NUM, 3, 3, 3); |
| 469 | rgbsps_set(LED_IND_EMOJI, 3, 3, 3); | 474 | rgbsps_set(LED_IND_EMOJI, 3, 3, 3); |
| 470 | } | 475 | } |
| @@ -520,7 +525,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 520 | 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, |
| 521 | 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 , |
| 522 | 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, |
| 523 | KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, 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 |
| 524 | ), | 529 | ), |
| 525 | 530 | ||
| 526 | /* Dvorak | 531 | /* Dvorak |
| @@ -636,10 +641,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 636 | * `-----------------------------------------------------------------------------------' | 641 | * `-----------------------------------------------------------------------------------' |
| 637 | */ | 642 | */ |
| 638 | [_NUM] = KEYMAP( | 643 | [_NUM] = KEYMAP( |
| 639 | KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, S(KC_A), KC_7, KC_8, KC_9, S(KC_D), _______, | 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), _______, |
| 640 | KC_GRV, 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), _______, |
| 641 | 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, |
| 642 | _______, _______, _______, _______, _______, _______, _______, LT(_PUNC, KC_0), KC_COMM, KC_DOT, KC_X, _______ | 647 | _______, _______, _______, _______, _______, _______, _______, FUN0 , KC_COMM, KC_DOT, KC_X, _______ |
| 643 | ), | 648 | ), |
| 644 | 649 | ||
| 645 | /* Func | 650 | /* Func |
| @@ -653,11 +658,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 653 | * | | | | | | | | | | | | | 658 | * | | | | | | | | | | | | |
| 654 | * `-----------------------------------------------------------------------------------' | 659 | * `-----------------------------------------------------------------------------------' |
| 655 | */ | 660 | */ |
| 656 | [_FUNC] = KEYMAP( | 661 | [_FUN] = KEYMAP( |
| 657 | 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, |
| 658 | XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, KC_PSCR, 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, |
| 659 | _______, 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, _______, |
| 660 | _______, _______, _______, _______, PUNC, _______, _______, _______, _______, _______, _______, _______ | 665 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ |
| 661 | ), | 666 | ), |
| 662 | 667 | ||
| 663 | /* Uppercase Greek | 668 | /* Uppercase Greek |
| @@ -785,10 +790,25 @@ void process_doublespace(bool pressed, bool *isactive, bool *otheractive, bool * | |||
| 785 | } | 790 | } |
| 786 | #endif | 791 | #endif |
| 787 | 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 | |||
| 788 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | 804 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
| 789 | bool lshift = keyboard_report->mods & MOD_BIT(KC_LSFT); | 805 | static bool lshift = false; |
| 790 | bool rshift = keyboard_report->mods & MOD_BIT(KC_RSFT); | 806 | static bool rshift = false; |
| 791 | uint8_t layer = biton32(layer_state); | 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); | ||
| 792 | 812 | ||
| 793 | #ifdef DOUBLESPACE_LAYER_ENABLE | 813 | #ifdef DOUBLESPACE_LAYER_ENABLE |
| 794 | // 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 |
| @@ -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; |
diff --git a/keyboards/handwired/promethium/promethium.h b/keyboards/handwired/promethium/promethium.h index d6fea76ce..caad5258e 100644 --- a/keyboards/handwired/promethium/promethium.h +++ b/keyboards/handwired/promethium/promethium.h | |||
| @@ -33,7 +33,7 @@ enum led_sequence { | |||
| 33 | LED_IND_USB, | 33 | LED_IND_USB, |
| 34 | LED_IND_BATTERY, | 34 | LED_IND_BATTERY, |
| 35 | 35 | ||
| 36 | LED_IND_FUNC, | 36 | LED_IND_FUN, |
| 37 | LED_IND_NUM, | 37 | LED_IND_NUM, |
| 38 | LED_IND_EMOJI, | 38 | LED_IND_EMOJI, |
| 39 | 39 | ||
| @@ -60,7 +60,7 @@ enum led_sequence { | |||
| 60 | LED_U, | 60 | LED_U, |
| 61 | LED_J, | 61 | LED_J, |
| 62 | LED_M, | 62 | LED_M, |
| 63 | LED_FUNC, | 63 | LED_FUN, |
| 64 | 64 | ||
| 65 | LED_RSPC, | 65 | LED_RSPC, |
| 66 | LED_N, | 66 | LED_N, |
