aboutsummaryrefslogtreecommitdiff
path: root/docs/feature_leader_key.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/feature_leader_key.md')
-rw-r--r--docs/feature_leader_key.md37
1 files changed, 37 insertions, 0 deletions
diff --git a/docs/feature_leader_key.md b/docs/feature_leader_key.md
new file mode 100644
index 000000000..bf4d5456d
--- /dev/null
+++ b/docs/feature_leader_key.md
@@ -0,0 +1,37 @@
1# The Leader key: A new kind of modifier
2
3If 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.
4
5That's what `KC_LEAD` does. Here's an example:
6
71. 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.
82. 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.
93. Within your `matrix_scan_user` function, do something like this:
10
11```
12LEADER_EXTERNS();
13
14void matrix_scan_user(void) {
15 LEADER_DICTIONARY() {
16 leading = false;
17 leader_end();
18
19 SEQ_ONE_KEY(KC_F) {
20 register_code(KC_S);
21 unregister_code(KC_S);
22 }
23 SEQ_TWO_KEYS(KC_A, KC_S) {
24 register_code(KC_H);
25 unregister_code(KC_H);
26 }
27 SEQ_THREE_KEYS(KC_A, KC_S, KC_D) {
28 register_code(KC_LGUI);
29 register_code(KC_S);
30 unregister_code(KC_S);
31 unregister_code(KC_LGUI);
32 }
33 }
34}
35```
36
37As 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_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. \ No newline at end of file