diff options
| author | Priyadi Iman Nurcahyo <priyadi@priyadi.net> | 2017-02-11 21:54:10 +0700 |
|---|---|---|
| committer | Priyadi Iman Nurcahyo <priyadi@priyadi.net> | 2017-02-11 21:54:10 +0700 |
| commit | 513286cf9873564879ee2e50e0e432429ee53a1e (patch) | |
| tree | 3eb0cba61e134a008902ff2afacb5cbcaaf6f8e1 | |
| parent | 79de0cd11964e9205654498aa0027510e3c3535e (diff) | |
| download | qmk_firmware-513286cf9873564879ee2e50e0e432429ee53a1e.tar.gz qmk_firmware-513286cf9873564879ee2e50e0e432429ee53a1e.zip | |
LSpace + RSpace = switch layer
| -rw-r--r-- | keyboards/handwired/promethium/keymaps/priyadi/config.h | 2 | ||||
| -rw-r--r-- | keyboards/handwired/promethium/keymaps/priyadi/keymap.c | 91 |
2 files changed, 92 insertions, 1 deletions
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/config.h b/keyboards/handwired/promethium/keymaps/priyadi/config.h index 36baedd48..53059ca7d 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/config.h +++ b/keyboards/handwired/promethium/keymaps/priyadi/config.h | |||
| @@ -19,4 +19,6 @@ | |||
| 19 | #define LAYOUT_NORMAN | 19 | #define LAYOUT_NORMAN |
| 20 | #define LAYOUT_WORKMAN | 20 | #define LAYOUT_WORKMAN |
| 21 | 21 | ||
| 22 | #define DOUBLESPACE_LAYER_ENABLE | ||
| 23 | |||
| 22 | #endif | 24 | #endif |
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c index 2a21b4ba7..9fa038724 100644 --- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c +++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c | |||
| @@ -25,6 +25,13 @@ | |||
| 25 | #define KC_RALT MT(MOD_RALT, KC_SLCK) | 25 | #define KC_RALT MT(MOD_RALT, KC_SLCK) |
| 26 | 26 | ||
| 27 | bool capslock = false; | 27 | bool capslock = false; |
| 28 | #ifdef DOUBLESPACE_LAYER_ENABLE | ||
| 29 | bool lspace_active = false; | ||
| 30 | bool rspace_active = false; | ||
| 31 | bool lspace_emitted = false; | ||
| 32 | bool rspace_emitted = false; | ||
| 33 | bool space_layer_entered = false; | ||
| 34 | #endif | ||
| 28 | 35 | ||
| 29 | // glow | 36 | // glow |
| 30 | enum glow_modes { | 37 | enum glow_modes { |
| @@ -55,6 +62,9 @@ enum layers { | |||
| 55 | _SYS, | 62 | _SYS, |
| 56 | }; | 63 | }; |
| 57 | 64 | ||
| 65 | // double-space layer | ||
| 66 | #define _SPACE _GUI | ||
| 67 | |||
| 58 | enum planck_keycodes { | 68 | enum planck_keycodes { |
| 59 | // layouts | 69 | // layouts |
| 60 | QWERTY = SAFE_RANGE, | 70 | QWERTY = SAFE_RANGE, |
| @@ -77,6 +87,8 @@ enum planck_keycodes { | |||
| 77 | OSX, | 87 | OSX, |
| 78 | 88 | ||
| 79 | // others | 89 | // others |
| 90 | LSPACE, | ||
| 91 | RSPACE, | ||
| 80 | GLOW, | 92 | GLOW, |
| 81 | AUDIO | 93 | AUDIO |
| 82 | }; | 94 | }; |
| @@ -504,7 +516,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 504 | KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, | 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, |
| 505 | KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT , | 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 , |
| 506 | KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, | 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, |
| 507 | KC_LCTL, KC_LALT, KC_LGUI, PUNC, NUM, KC_SPC, KC_SPC, FUNC, GREEK, KC_RGUI, KC_RALT, KC_RCTL | 519 | KC_LCTL, KC_LALT, KC_LGUI, PUNC, NUM, LSPACE, RSPACE, FUNC, GREEK, KC_RGUI, KC_RALT, KC_RCTL |
| 508 | ), | 520 | ), |
| 509 | 521 | ||
| 510 | /* Dvorak | 522 | /* Dvorak |
| @@ -745,7 +757,84 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 745 | bool lshift = keyboard_report->mods & MOD_BIT(KC_LSFT); | 757 | bool lshift = keyboard_report->mods & MOD_BIT(KC_LSFT); |
| 746 | bool rshift = keyboard_report->mods & MOD_BIT(KC_RSFT); | 758 | bool rshift = keyboard_report->mods & MOD_BIT(KC_RSFT); |
| 747 | 759 | ||
| 760 | #ifdef DOUBLESPACE_LAYER_ENABLE | ||
| 761 | // double-space: send space immediately if any other key depressed before space is released | ||
| 762 | if ((lspace_active ^ rspace_active) | ||
| 763 | && keycode != LSPACE | ||
| 764 | && keycode != RSPACE | ||
| 765 | && record->event.pressed) | ||
| 766 | { | ||
| 767 | if (lspace_active) { | ||
| 768 | if (!lspace_emitted) { | ||
| 769 | register_code(KC_SPC); | ||
| 770 | unregister_code(KC_SPC); | ||
| 771 | } | ||
| 772 | lspace_emitted = true; | ||
| 773 | } | ||
| 774 | if (rspace_active) { | ||
| 775 | if (!rspace_emitted) { | ||
| 776 | register_code(KC_SPC); | ||
| 777 | unregister_code(KC_SPC); | ||
| 778 | } | ||
| 779 | rspace_emitted = true; | ||
| 780 | } | ||
| 781 | } | ||
| 782 | #endif | ||
| 783 | |||
| 748 | switch (keycode) { | 784 | switch (keycode) { |
| 785 | |||
| 786 | #ifdef DOUBLESPACE_LAYER_ENABLE | ||
| 787 | // double-space enter space layer | ||
| 788 | case LSPACE: | ||
| 789 | if (record->event.pressed) { | ||
| 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; | ||
| 811 | break; | ||
| 812 | case RSPACE: | ||
| 813 | if (record->event.pressed) { | ||
| 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; | ||
| 835 | break; | ||
| 836 | #endif | ||
| 837 | |||
| 749 | // handle greek layer shift | 838 | // handle greek layer shift |
| 750 | // handle both shift = capslock | 839 | // handle both shift = capslock |
| 751 | case KC_LSFT: | 840 | case KC_LSFT: |
