aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPriyadi Iman Nurcahyo <priyadi@priyadi.net>2017-02-11 21:54:10 +0700
committerPriyadi Iman Nurcahyo <priyadi@priyadi.net>2017-02-11 21:54:10 +0700
commit513286cf9873564879ee2e50e0e432429ee53a1e (patch)
tree3eb0cba61e134a008902ff2afacb5cbcaaf6f8e1
parent79de0cd11964e9205654498aa0027510e3c3535e (diff)
downloadqmk_firmware-513286cf9873564879ee2e50e0e432429ee53a1e.tar.gz
qmk_firmware-513286cf9873564879ee2e50e0e432429ee53a1e.zip
LSpace + RSpace = switch layer
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/config.h2
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/keymap.c91
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
27bool capslock = false; 27bool capslock = false;
28#ifdef DOUBLESPACE_LAYER_ENABLE
29bool lspace_active = false;
30bool rspace_active = false;
31bool lspace_emitted = false;
32bool rspace_emitted = false;
33bool space_layer_entered = false;
34#endif
28 35
29// glow 36// glow
30enum glow_modes { 37enum 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
58enum planck_keycodes { 68enum 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: