From f4a426a0b1817dcf865cb5303184cd693074e9b3 Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Tue, 24 May 2016 22:37:25 -0400 Subject: [PATCH] [Erez & Jack] Documents new Leader key functionality --- README.md | 56 ++++++++++--- keyboard/ergodox_ez/ergodox_ez.h | 6 +- .../erez_experimental/erez_experimental.hex | Bin 51952 -> 53134 bytes .../keymaps/erez_experimental/keymap.c | 79 +++++++++++------- .../keymaps/erez_experimental/readme.md | 6 ++ 5 files changed, 104 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 4e53569a8e..3925cf8d9a 100644 --- a/README.md +++ b/README.md @@ -118,6 +118,42 @@ 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. +### 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. + +That's what `KC_LEAD` does. Here's an example: + +1. Pick a key on your keyboard you want to use as the Leader key. Assign it the keycode `KC_LEAD`. This key would be dedicated just for this -- it's a single action key, can't be used for anything else. +2. Include the line `#define LEADER_TIMEOUT 300` somewhere in your keymap.c file, probably near the top. The 300 there is 300ms -- that's how long you have for the sequence of keys following the leader. You can tweak this value for comfort, of course. +3. Within your `matrix_scan_user` function, do something like this: + +``` +void matrix_scan_user(void) { + LEADER_DICTIONARY() { + leading = false; + leader_end(); + + SEQ_ONE_KEY(KC_F) { + register_code(KC_S); + unregister_code(KC_S); + } + SEQ_TWO_KEYS(KC_A, KC_S) { + register_code(KC_H); + unregister_code(KC_H); + } + SEQ_THREE_KEYS(KC_A, KC_S, KC_D) { + register_code(KC_LGUI); + register_code(KC_S); + unregister_code(KC_S); + unregister_code(KC_LGUI); + } + } +} +``` + +As you can see, you have three function. you can use - `SEQ_ONE_KEY` for single-key sequences (Leader followed by just one key), and `SEQ_TWO_KEYS` and `SEQ_THREE_.EYS` for longer sequences. Each of these accepts one or more keycodes as arguments. This is an important point: You can use keycodes from **any layer on your keyboard**. That layer would need to be active for the leader macro to fire, obviously. + ### Temporarily setting the default layer `DF(layer)` - sets default layer to *layer*. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does. @@ -258,7 +294,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). +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) @@ -276,7 +312,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) case 0: { if (record->event.pressed) { key_timer = timer_read(); // if the key is being pressed, we start the timer. - } + } 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. return MACRO( D(LCTL), T(C), U(LCTL), END ); @@ -312,7 +348,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) 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. + 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 } @@ -323,13 +359,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) 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); + register_code(KC_RSFT); + } else { + if (timer_elapsed(key_timer) < 150) { + register_code(KC_0); + unregister_code(KC_0); } - unregister_code(KC_RSFT); + unregister_code(KC_RSFT); } break; } @@ -510,4 +546,4 @@ what things are (and likely aren't) too risky. - EEPROM has around a 100000 write cycle. You shouldn't rewrite the firmware repeatedly and continually; that'll burn the EEPROM eventually. - + diff --git a/keyboard/ergodox_ez/ergodox_ez.h b/keyboard/ergodox_ez/ergodox_ez.h index 1e446baf6f..402abc167b 100644 --- a/keyboard/ergodox_ez/ergodox_ez.h +++ b/keyboard/ergodox_ez/ergodox_ez.h @@ -1,13 +1,9 @@ #ifndef ERGODOX_EZ_H #define ERGODOX_EZ_H -#include "matrix.h" -#include "keymap_common.h" -#include "backlight.h" -#include +#include "quantum.h" #include #include -#include #include "i2cmaster.h" #include diff --git a/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex b/keyboard/ergodox_ez/keymaps/erez_experimental/erez_experimental.hex index bdd707165f34c86bc8276950137ecce5cd0951d2..4bbda7e973a556ac6f13e81ecae66bd1f473b0ea 100644 GIT binary patch literal 53134 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 diff --git a/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c b/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c index f4e4f92e01..e03bb57ab0 100644 --- a/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c +++ b/keyboard/ergodox_ez/keymaps/erez_experimental/keymap.c @@ -9,6 +9,7 @@ #define LSFTO M(0) // Left shift, open parens when tapped #define RSFTC M(1) // Right shift, close parens when tapped +#define LEADER_TIMEOUT 300 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Keymap 0: Basic layer @@ -27,23 +28,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-------------. ,-------------. * | App | LGui | | Alt |Ctrl/Esc| * ,------|------|------| |------+--------+------. - * | | L1 | Home | | PgUp | | | - * | Space| Tap/ |------| |------| Tab/L1 |Enter | - * | |Toggle| End | | PgDn | | | + * | | | Home | | PgUp | | | + * | Space|Leader|------| |------| Tab/L1 |Enter | + * | | | End | | PgDn | | | * `--------------------' `----------------------' */ // If it accepts an argument (i.e, is a function), it doesn't need KC_. // Otherwise, it needs KC_* [BASE] = KEYMAP( // layer 0 : default // left hand - KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, - KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), - KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, - LSFTO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_LBRC), - LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT, - ALT_T(KC_APP), KC_LGUI, - KC_HOME, - KC_SPC,KC_FN1,KC_END, + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, + LSFTO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_LBRC), + LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT, + ALT_T(KC_APP), KC_LGUI, + KC_HOME, + KC_SPC,KC_LEAD,KC_END, // right hand KC_RGHT, KC_6,KC_7, KC_8, KC_9, KC_0, KC_MINS, TG(SYMB), KC_Y,KC_U, KC_I, KC_O, KC_P, KC_BSLS, @@ -198,28 +199,50 @@ void matrix_init_user(void) { }; +LEADER_EXTERNS(); + // Runs constantly in the background, in a loop. void matrix_scan_user(void) { - uint8_t layer = biton32(layer_state); + uint8_t layer = biton32(layer_state); - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); - switch (layer) { - // TODO: Make this relevant to the ErgoDox EZ. - case 1: - ergodox_right_led_1_on(); - break; - case 2: - ergodox_right_led_2_on(); - break; - default: - // none - break; + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + // TODO: Make this relevant to the ErgoDox EZ. + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + default: + // none + break; + } + + LEADER_DICTIONARY() { + leading = false; + leader_end(); + + SEQ_ONE_KEY(KC_W) { + register_code(KC_LALT); + register_code(KC_F4); + unregister_code(KC_F4); + unregister_code(KC_LALT); } - + SEQ_ONE_KEY(KC_O) { + register_code(KC_LCTL); + register_code(KC_LSFT); + register_code(KC_O); + unregister_code(KC_O); + unregister_code(KC_LSFT); + unregister_code(KC_LCTL); + } + } }; + diff --git a/keyboard/ergodox_ez/keymaps/erez_experimental/readme.md b/keyboard/ergodox_ez/keymaps/erez_experimental/readme.md index a9c572390a..66acfa187b 100644 --- a/keyboard/ergodox_ez/keymaps/erez_experimental/readme.md +++ b/keyboard/ergodox_ez/keymaps/erez_experimental/readme.md @@ -4,6 +4,12 @@ This is my personal layout which I use to test out ideas which may or may not ma Changelog: +## May 24, 2016: + +* Implements Leader key example + * Leader, W sends Alt-F4 + * Leader, O sends Ctrl-shift-o (a shortcut I use in FrontApp) + ## May 8, 2016: * Makes bottom-right key send minus/underscore when tapped, L1 temporary toggle when held