Files
zsa_qmk_firmware/docs/feature_leader_key.md
Leo Wzukw 3b1ddd12a5 Refresh & improve leader documentation page (#2990)
* Refresh & improve leader documentation page

- register_code/unregister_code are not the recommanded way to do macro.
- Provide some details I wish I had found when first used the leader
  functionality.

* Add old way to use macro.
2018-05-26 11:29:02 -07:00

2.0 KiB
Raw Blame History

The Leader Key: A New Kind of Modifier

If youve ever used Vim, you know what a Leader key is. If not, youre 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 youd hit our special modifier (the Leader key), followed by W and then C (just a rapid succession of keys), and something would happen.

Thats what KC_LEAD does. Heres 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 its a single action key, cant 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 thats 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:
LEADER_EXTERNS();

void matrix_scan_user(void) {
  LEADER_DICTIONARY() {
    leading = false;
    leader_end();

    SEQ_ONE_KEY(KC_F) {
      // Anything you can do in a macro.
      SEND_STRING("QMK is awesome.");
    }
    SEQ_TWO_KEYS(KC_D, KC_D) {
      SEND_STRING(SS_LCTRL("a")SS_LCTRL("c"));
    }
    SEQ_THREE_KEYS(KC_D, KC_D, KC_S) {
      SEND_STRING("https://start.duckduckgo.com"SS_TAP(X_ENTER));
    }
    SEQ_TWO_KEYS(KC_A, KC_S) {
      register_code(KC_LGUI);
      register_code(KC_S);
      unregister_code(KC_S);
      unregister_code(KC_LGUI);
    }
  }
}

As you can see, you have a few function. You can use SEQ_ONE_KEY for single-key sequences (Leader followed by just one key), and SEQ_TWO_KEYS, SEQ_THREE_KEYS up to SEQ_FIVE_KEYS 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.