aboutsummaryrefslogtreecommitdiff
path: root/docs/feature_macros.md
diff options
context:
space:
mode:
authorBalz Guenat <balz.guenat@gmail.com>2017-11-16 03:23:55 +0100
committerJack Humbert <jack.humb@gmail.com>2017-11-16 09:39:00 -0500
commit179d64d33c5b2f881bbced97cc046949691f3757 (patch)
treeff2159dca730c2eb5fb111c9de07dd394a445659 /docs/feature_macros.md
parenteac4bab342e8cb95248985eb134887d898f2b49e (diff)
downloadqmk_firmware-179d64d33c5b2f881bbced97cc046949691f3757.tar.gz
qmk_firmware-179d64d33c5b2f881bbced97cc046949691f3757.zip
extend macro docs a bit
Diffstat (limited to 'docs/feature_macros.md')
-rw-r--r--docs/feature_macros.md54
1 files changed, 44 insertions, 10 deletions
diff --git a/docs/feature_macros.md b/docs/feature_macros.md
index 66d2bc090..050fb45aa 100644
--- a/docs/feature_macros.md
+++ b/docs/feature_macros.md
@@ -8,34 +8,67 @@ Macros allow you to send multiple keystrokes when pressing just one key. QMK has
8 8
9## The new way: `SEND_STRING()` & `process_record_user` 9## The new way: `SEND_STRING()` & `process_record_user`
10 10
11Sometimes you just want a key to type out words or phrases. For the most common situations we've provided `SEND_STRING()`, which will type out your string for you. All ascii that is easily translated to a keycode is supported (eg `\n\t`). 11Sometimes you just want a key to type out words or phrases. For the most common situations we've provided `SEND_STRING()`, which will type out your string (i.e. a sequence of characters) for you. All ASCII characters that are easily translated to a keycode are supported (e.g. `\n\t`).
12 12
13For example: 13For example, you could write in your `keymap.c`:
14
15```c
16enum custom_keycodes {
17 MY_CUSTOM_MACRO = SAFE_RANGE
18};
19
20bool process_record_user(uint16_t keycode, keyrecord_t *record) {
21 if (record->event.pressed) {
22 switch(keycode) {
23 case MY_CUSTOM_MACRO:
24 SEND_STRING("QMK is the best thing ever!");
25 return false; break;
26 }
27 }
28 return true;
29};
30```
31
32To activate this macro, assign the keycode `MY_CUSTOM_MACRO` to one of your keys in your keymap.
33
34What happens here is this:
35We first define a new custom keycode in the range not occupied by any other keycodes.
36Then we use the `process_record_user` function, which is called whenever a key is pressed or released, to check if our custom keycode has been activated.
37If yes, we send the string `"QMK is the best thing ever!"` to the computer via the `SEND_STRING` macro (this is a C preprocessor macro, not to be confused with QMK macros).
38We return `false` to indicate to the caller that the key press we just processed need not be processed any further.
39
40You might want to add more than one macro.
41You can do that by adding another keycode and adding another case to the switch statement, like so:
14 42
15```c 43```c
16enum custom_keycodes { 44enum custom_keycodes {
17 PRINT_TRUTH = SAFE_RANGE 45 MY_CUSTOM_MACRO = SAFE_RANGE,
46 MY_OTHER_MACRO
18}; 47};
19 48
20bool process_record_user(uint16_t keycode, keyrecord_t *record) { 49bool process_record_user(uint16_t keycode, keyrecord_t *record) {
21 if (record->event.pressed) { 50 if (record->event.pressed) {
22 switch(keycode) { 51 switch(keycode) {
23 case PRINT_TRUTH: 52 case MY_CUSTOM_MACRO:
24 SEND_STRING("QMK is the best thing ever!"); 53 SEND_STRING("QMK is the best thing ever!");
25 return false; break; 54 return false; break;
55 case MY_OTHER_MACRO:
56 SEND_STRING(SS_LCTRL("ac")); // selects all and copies
57 return false; break;
26 } 58 }
27 } 59 }
28 return true; 60 return true;
29}; 61};
30``` 62```
31 63
32### Tap/down/up 64### TAP, DOWN and UP
33 65
66You may want to use keys in your macros that you can't write down, such as `Ctrl` or `Home`.
34You can send arbitary keycodes by wrapping them in: 67You can send arbitary keycodes by wrapping them in:
35 68
36* `SS_TAP()` 69* `SS_TAP()` presses and releases a key.
37* `SS_DOWN()` 70* `SS_DOWN()` presses (but does not release) a key.
38* `SS_UP()` 71* `SS_UP()` releases a key.
39 72
40For example: 73For example:
41 74
@@ -53,11 +86,12 @@ There's also a couple of mod shortcuts you can use:
53* `SS_LGUI(string)` 86* `SS_LGUI(string)`
54* `SS_LALT(string)` 87* `SS_LALT(string)`
55 88
56That can be used like this: 89These press the respective modifier, send the supplied string and then release the modifier.
90They can be used like this:
57 91
58 SEND_STRING(SS_LCTRL("a")); 92 SEND_STRING(SS_LCTRL("a"));
59 93
60Which would send LCTRL+a (LTRL down, a, LTRL up) - notice that they take strings (eg `"k"`), and not the `X_K` keycodes. 94Which would send LCTRL+a (LCTRL down, a, LCTRL up) - notice that they take strings (eg `"k"`), and not the `X_K` keycodes.
61 95
62### Alternative keymaps 96### Alternative keymaps
63 97