From 1237025963484d70bbe5185a790bec6544653ccc Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Tue, 24 May 2016 23:27:59 -0400 Subject: [PATCH] [Erez & Jack] Packages Space Cadet shifts into keycodes --- README.md | 62 +++++------------- .../erez_experimental/erez_experimental.hex | Bin 53134 -> 49747 bytes .../keymaps/erez_experimental/keymap.c | 53 ++------------- .../keymaps/erez_experimental/makefile.mk | 2 +- quantum/keymap_common.h | 2 + quantum/quantum.c | 44 ++++++++++++- 6 files changed, 65 insertions(+), 98 deletions(-) diff --git a/README.md b/README.md index 3925cf8d9a..021c2499f4 100644 --- a/README.md +++ b/README.md @@ -118,6 +118,20 @@ We've added shortcuts to make common modifier/tap (mod-tap) mappings more compac * `LCAG_T(kc)` - is CtrlAltGui when held and *kc* when tapped * `MEH_T(kc)` - is like Hyper, but not as cool -- does not include the Cmd/Win key, so just sends Alt+Ctrl+Shift. +### Space Cadet Shift: The future, built in + +Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) the Space Cadet Shift quite well. Essentially, you hit the left Shift on its own, and you get an opening parenthesis; hit the right Shift on its own, and you get the closing one. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds. + +To use it, use `KC_LSPO` (Left Shift, Parens Open) for your left Shift on your keymap, and `KC_RSPC` (Right Shift, Parens Close) for your right Shift. + +The only other thing you're going to want to do is create a `makefile.mk` in your keymap directory and set the following: + +``` +COMMAND_ENABLE = no # Commands for debug and configuration +``` + +This is just to keep the keyboard from going into command mode when you hold both Shift keys at the same time. + ### The Leader key: A new kind of modifier If you've ever used Vim, you know what a Leader key is. If not, you're about to discover a wonderful concept. :) Instead of hitting Alt+Shift+W for example (holding down three keys at the same time), what if you could hit a _sequence_ of keys instead? So you'd hit our special modifier (the Leader key), followed by W and then C (just a rapid succession of keys), and something would happen. @@ -296,7 +310,7 @@ if (timer_elapsed(key_timer) < 100) { It's best to declare the `static uint16_t key_timer;` outside of the macro block (top of file, etc). -#### Example 1: Single-key copy/paste (hold to copy, tap to paste) +#### Example: Single-key copy/paste (hold to copy, tap to paste) With QMK, it's easy to make one key do two things, as long as one of those things is being a modifier. :) So if you want a key to act as Ctrl when held and send the letter R when tapped, that's easy: `CTL_T(KC_R)`. But what do you do when you want that key to send Ctrl-V (paste) when tapped, and Ctrl-C (copy) when held? @@ -330,52 +344,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) And then, to assign this macro to a key on your keyboard layout, you just use `M(0)` on the key you want to press for copy/paste. -#### Example 2: Space Cadet Shift (making it easy to send opening and closing parentheses) - -In the [Modern Space Cadet Keyboard](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shift-parentheses), one of cooler features is the Shift Parentheses. To quote Steve Losh: - - > When held while pressing other keys, act like Shift. - > When pressed and released on their own, type an opening or closing parenthesis (left and right shift respectively). - -``` -static uint16_t key_timer; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case 0: { - if (record->event.pressed) { - key_timer = timer_read(); // if the key is being pressed, we start the timer. - register_code(KC_LSFT); // we're now holding down Shift. - } else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down"). - if (timer_elapsed(key_timer) < 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap. - register_code(KC_9); // sending 9 while Shift is held down gives us an opening paren - unregister_code(KC_9); // now let's let go of that key - } - unregister_code(KC_LSFT); // let's release the Shift key now. - } - break; - } - case 1: { - if (record->event.pressed) { - key_timer = timer_read(); // Now we're doing the same thing, only for the right shift/close paren key - register_code(KC_RSFT); - } else { - if (timer_elapsed(key_timer) < 150) { - register_code(KC_0); - unregister_code(KC_0); - } - unregister_code(KC_RSFT); - } - break; - } - } - return MACRO_NONE; -}; -``` - -And then, to assign this macro to a key on your keyboard layout, you just use `M(0)` on the key you want to press for left shift/opening parens, and `M(1)` for right shift/closing parens. - ## Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc) Everything is assuming you're in Qwerty (in software) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap: diff --git a/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex b/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex index 4bbda7e973a556ac6f13e81ecae66bd1f473b0ea..5e010380c6073f07a0850b6b87eb23479b7ae3eb 100644 GIT binary patch literal 49747 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.pressed) { - register_mods(MOD_BIT(KC_LSFT)); - if (record->tap.count && !record->tap.interrupted) { - register_code(KC_9); - } - else { - record->tap.count = 0; - } - } - else { - if (record->tap.count) { - unregister_code(KC_9); - } - else { - } - unregister_mods(MOD_BIT(KC_LSFT)); - } - break; - - case 1: - if (record->event.pressed) { - register_mods(MOD_BIT(KC_LSFT)); - if (record->tap.count && !record->tap.interrupted) { - register_code(KC_0); - } - else { - record->tap.count = 0; - } - } - else { - if (record->tap.count) { - unregister_code(KC_0); - } - else { - } - unregister_mods(MOD_BIT(KC_LSFT)); - } - break; - } - return MACRO_NONE; + return MACRO_NONE; }; // Runs just one time when the keyboard initializes. @@ -242,7 +199,5 @@ void matrix_scan_user(void) { unregister_code(KC_LCTL); } } -}; - - +} diff --git a/keyboard/ergodox_ez/keymaps/erez_experimental/makefile.mk b/keyboard/ergodox_ez/keymaps/erez_experimental/makefile.mk index 4c3a314ed6..faca18b543 100644 --- a/keyboard/ergodox_ez/keymaps/erez_experimental/makefile.mk +++ b/keyboard/ergodox_ez/keymaps/erez_experimental/makefile.mk @@ -2,4 +2,4 @@ # for your own particular keymap SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - +COMMAND_ENABLE = no # Commands for debug and configuration diff --git a/quantum/keymap_common.h b/quantum/keymap_common.h index 91d5c09c1c..fafc93f7cd 100644 --- a/quantum/keymap_common.h +++ b/quantum/keymap_common.h @@ -240,6 +240,8 @@ extern const uint16_t fn_actions[]; #define BL_TOGG 0x5082 #define BL_STEP 0x5083 +#define KC_LSPO 0x5084 // Left shift, open parens when tapped +#define KC_RSPC 0x5085 // Right shift, close parens when tapped // GOTO layer - 16 layers max // when: // ON_PRESS = 1 diff --git a/quantum/quantum.c b/quantum/quantum.c index eb64a99a4d..753dde5c66 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -21,6 +21,7 @@ void leader_end(void) {} uint8_t starting_note = 0x0C; int offset = 7; + #ifdef AUDIO_ENABLE bool music_activated = false; @@ -59,6 +60,8 @@ uint8_t chord_key_down = 0; static uint8_t input_mode; #endif +static bool shift_interrupted[] = {0, 0, 0}; + bool keys_chord(uint8_t keys[]) { uint8_t keys_size = sizeof(keys)/sizeof(keys[0]); bool pass = true; @@ -415,6 +418,45 @@ bool process_record_quantum(keyrecord_t *record) { #endif + switch(keycode) { + case KC_LSPO: { + if (record->event.pressed) { + shift_interrupted[0] = false; + register_mods(MOD_BIT(KC_LSFT)); + } + else { + if (!shift_interrupted[0]) { + register_code(KC_9); + unregister_code(KC_9); + } + unregister_mods(MOD_BIT(KC_LSFT)); + } + return false; + break; + } + + case KC_RSPC: { + if (record->event.pressed) { + shift_interrupted[1] = false; + register_mods(MOD_BIT(KC_RSFT)); + } + else { + if (!shift_interrupted[1]) { + register_code(KC_0); + unregister_code(KC_0); + } + unregister_mods(MOD_BIT(KC_RSFT)); + } + return false; + break; + } + default: { + shift_interrupted[0] = true; + shift_interrupted[1] = true; + break; + } + } + return process_action_kb(record); } @@ -481,4 +523,4 @@ void audio_on_user() {} __attribute__ ((weak)) void music_scale_user() {} -//------------------------------------------------------------------------------ \ No newline at end of file +//------------------------------------------------------------------------------