diff options
author | fauxpark <fauxpark@gmail.com> | 2019-11-26 18:16:58 +1100 |
---|---|---|
committer | Drashna Jaelre <drashna@live.com> | 2019-11-25 23:16:58 -0800 |
commit | 5a6737a778cfa828e4fdb5d382a84a41e5210d8e (patch) | |
tree | 0c746428a46df925b30675990aca209f59db2d9d | |
parent | a2cedf4555ab417d849cbacf9562fd92407d5d71 (diff) | |
download | qmk_firmware-5a6737a778cfa828e4fdb5d382a84a41e5210d8e.tar.gz qmk_firmware-5a6737a778cfa828e4fdb5d382a84a41e5210d8e.zip |
Send string keycode tweaks (#7471)
-rw-r--r-- | docs/feature_leader_key.md | 8 | ||||
-rw-r--r-- | docs/feature_macros.md | 19 | ||||
-rw-r--r-- | docs/feature_userspace.md | 10 | ||||
-rw-r--r-- | keyboards/kmac/keymaps/default/keymap.c | 2 | ||||
-rw-r--r-- | keyboards/kmac/keymaps/default_tkl_ansi/keymap.c | 2 | ||||
-rw-r--r-- | keyboards/kmac/keymaps/default_tkl_ansi_wkl/keymap.c | 2 | ||||
-rw-r--r-- | quantum/process_keycode/process_terminal.c | 2 | ||||
-rw-r--r-- | quantum/quantum.h | 24 | ||||
-rw-r--r-- | quantum/send_string_keycodes.h | 32 | ||||
-rw-r--r-- | quantum/template/base/keymaps/default/keymap.c | 2 |
10 files changed, 58 insertions, 45 deletions
diff --git a/docs/feature_leader_key.md b/docs/feature_leader_key.md index 82cf78901..22370bf23 100644 --- a/docs/feature_leader_key.md +++ b/docs/feature_leader_key.md | |||
@@ -22,10 +22,10 @@ void matrix_scan_user(void) { | |||
22 | SEND_STRING("QMK is awesome."); | 22 | SEND_STRING("QMK is awesome."); |
23 | } | 23 | } |
24 | SEQ_TWO_KEYS(KC_D, KC_D) { | 24 | SEQ_TWO_KEYS(KC_D, KC_D) { |
25 | SEND_STRING(SS_LCTRL("a")SS_LCTRL("c")); | 25 | SEND_STRING(SS_LCTL("a") SS_LCTL("c")); |
26 | } | 26 | } |
27 | SEQ_THREE_KEYS(KC_D, KC_D, KC_S) { | 27 | SEQ_THREE_KEYS(KC_D, KC_D, KC_S) { |
28 | SEND_STRING("https://start.duckduckgo.com"SS_TAP(X_ENTER)); | 28 | SEND_STRING("https://start.duckduckgo.com\n"); |
29 | } | 29 | } |
30 | SEQ_TWO_KEYS(KC_A, KC_S) { | 30 | SEQ_TWO_KEYS(KC_A, KC_S) { |
31 | register_code(KC_LGUI); | 31 | register_code(KC_LGUI); |
@@ -115,11 +115,11 @@ void matrix_scan_user(void) { | |||
115 | 115 | ||
116 | SEQ_ONE_KEY(KC_E) { | 116 | SEQ_ONE_KEY(KC_E) { |
117 | // Anything you can do in a macro. | 117 | // Anything you can do in a macro. |
118 | SEND_STRING(SS_LCTRL(SS_LSFT("t"))); | 118 | SEND_STRING(SS_LCTL(SS_LSFT("t"))); |
119 | did_leader_succeed = true; | 119 | did_leader_succeed = true; |
120 | } else | 120 | } else |
121 | SEQ_TWO_KEYS(KC_E, KC_D) { | 121 | SEQ_TWO_KEYS(KC_E, KC_D) { |
122 | SEND_STRING(SS_LGUI("r")"cmd"SS_TAP(KC_ENTER)SS_LCTRL("c")); | 122 | SEND_STRING(SS_LGUI("r") "cmd\n" SS_LCTL("c")); |
123 | did_leader_succeed = true; | 123 | did_leader_succeed = true; |
124 | } | 124 | } |
125 | leader_end(); | 125 | leader_end(); |
diff --git a/docs/feature_macros.md b/docs/feature_macros.md index d81c3c655..c13ae8206 100644 --- a/docs/feature_macros.md +++ b/docs/feature_macros.md | |||
@@ -67,14 +67,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
67 | case QMKURL: | 67 | case QMKURL: |
68 | if (record->event.pressed) { | 68 | if (record->event.pressed) { |
69 | // when keycode QMKURL is pressed | 69 | // when keycode QMKURL is pressed |
70 | SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); | 70 | SEND_STRING("https://qmk.fm/\n"); |
71 | } else { | 71 | } else { |
72 | // when keycode QMKURL is released | 72 | // when keycode QMKURL is released |
73 | } | 73 | } |
74 | break; | 74 | break; |
75 | case MY_OTHER_MACRO: | 75 | case MY_OTHER_MACRO: |
76 | if (record->event.pressed) { | 76 | if (record->event.pressed) { |
77 | SEND_STRING(SS_LCTRL("ac")); // selects all and copies | 77 | SEND_STRING(SS_LCTL("ac")); // selects all and copies |
78 | } | 78 | } |
79 | break; | 79 | break; |
80 | } | 80 | } |
@@ -109,18 +109,21 @@ Which would send "VE" followed by a `KC_HOME` tap, and "LO" (spelling "LOVE" if | |||
109 | 109 | ||
110 | There's also a couple of mod shortcuts you can use: | 110 | There's also a couple of mod shortcuts you can use: |
111 | 111 | ||
112 | * `SS_LCTRL(string)` | 112 | * `SS_LCTL(string)` |
113 | * `SS_LGUI(string)` | ||
114 | * `SS_LALT(string)` | ||
115 | * `SS_LSFT(string)` | 113 | * `SS_LSFT(string)` |
116 | * `SS_RALT(string)` | 114 | * `SS_LALT(string)` |
115 | * `SS_LGUI(string)`, `SS_LCMD(string)` or `SS_LWIN(string)` | ||
116 | * `SS_RCTL(string)` | ||
117 | * `SS_RSFT(string)` | ||
118 | * `SS_RALT(string)` or `SS_ALGR(string)` | ||
119 | * `SS_RGUI(string)`, `SS_RCMD(string)` or `SS_RWIN(string)` | ||
117 | 120 | ||
118 | These press the respective modifier, send the supplied string and then release the modifier. | 121 | These press the respective modifier, send the supplied string and then release the modifier. |
119 | They can be used like this: | 122 | They can be used like this: |
120 | 123 | ||
121 | SEND_STRING(SS_LCTRL("a")); | 124 | SEND_STRING(SS_LCTL("a")); |
122 | 125 | ||
123 | Which would send LCTRL+a (LCTRL down, a, LCTRL up) - notice that they take strings (eg `"k"`), and not the `X_K` keycodes. | 126 | Which would send Left Control+`a` (Left Control down, `a`, Left Control up) - notice that they take strings (eg `"k"`), and not the `X_K` keycodes. |
124 | 127 | ||
125 | ### Alternative Keymaps | 128 | ### Alternative Keymaps |
126 | 129 | ||
diff --git a/docs/feature_userspace.md b/docs/feature_userspace.md index e162d423c..a2657c1f6 100644 --- a/docs/feature_userspace.md +++ b/docs/feature_userspace.md | |||
@@ -208,15 +208,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
208 | clear_mods(); clear_oneshot_mods(); | 208 | clear_mods(); clear_oneshot_mods(); |
209 | SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP); | 209 | SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP); |
210 | #ifndef FLASH_BOOTLOADER | 210 | #ifndef FLASH_BOOTLOADER |
211 | if ( (temp_mod | temp_osm) & MOD_MASK_SHIFT ) | 211 | if ((temp_mod | temp_osm) & MOD_MASK_SHIFT) |
212 | #endif | 212 | #endif |
213 | { // | 213 | { |
214 | SEND_STRING(":flash"); | 214 | SEND_STRING(":flash"); |
215 | } | 215 | } |
216 | if ( (temp_mod | temp_osm) & MOD_MASK_CTRL) { | 216 | if ((temp_mod | temp_osm) & MOD_MASK_CTRL) { |
217 | SEND_STRING(" -j8 --output-sync"); | 217 | SEND_STRING(" -j8 --output-sync"); |
218 | } | 218 | } |
219 | SEND_STRING(SS_TAP(X_ENTER)); | 219 | tap_code(KC_ENT); |
220 | set_mods(temp_mod); | 220 | set_mods(temp_mod); |
221 | } | 221 | } |
222 | break; | 222 | break; |
diff --git a/keyboards/kmac/keymaps/default/keymap.c b/keyboards/kmac/keymaps/default/keymap.c index 05ccd1bcb..a67a4d10d 100644 --- a/keyboards/kmac/keymaps/default/keymap.c +++ b/keyboards/kmac/keymaps/default/keymap.c | |||
@@ -73,7 +73,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
73 | break; | 73 | break; |
74 | case MCR_04: | 74 | case MCR_04: |
75 | if (record->event.pressed) { | 75 | if (record->event.pressed) { |
76 | SEND_STRING(SS_LCTRL("c") SS_TAP(X_RIGHT) SS_LCTRL("v")); | 76 | SEND_STRING(SS_LCTL("c") SS_TAP(X_RIGHT) SS_LCTL("v")); |
77 | } | 77 | } |
78 | break; | 78 | break; |
79 | } | 79 | } |
diff --git a/keyboards/kmac/keymaps/default_tkl_ansi/keymap.c b/keyboards/kmac/keymaps/default_tkl_ansi/keymap.c index 05ccd1bcb..a67a4d10d 100644 --- a/keyboards/kmac/keymaps/default_tkl_ansi/keymap.c +++ b/keyboards/kmac/keymaps/default_tkl_ansi/keymap.c | |||
@@ -73,7 +73,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
73 | break; | 73 | break; |
74 | case MCR_04: | 74 | case MCR_04: |
75 | if (record->event.pressed) { | 75 | if (record->event.pressed) { |
76 | SEND_STRING(SS_LCTRL("c") SS_TAP(X_RIGHT) SS_LCTRL("v")); | 76 | SEND_STRING(SS_LCTL("c") SS_TAP(X_RIGHT) SS_LCTL("v")); |
77 | } | 77 | } |
78 | break; | 78 | break; |
79 | } | 79 | } |
diff --git a/keyboards/kmac/keymaps/default_tkl_ansi_wkl/keymap.c b/keyboards/kmac/keymaps/default_tkl_ansi_wkl/keymap.c index 42be54764..6b4958556 100644 --- a/keyboards/kmac/keymaps/default_tkl_ansi_wkl/keymap.c +++ b/keyboards/kmac/keymaps/default_tkl_ansi_wkl/keymap.c | |||
@@ -73,7 +73,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
73 | break; | 73 | break; |
74 | case MCR_04: | 74 | case MCR_04: |
75 | if (record->event.pressed) { | 75 | if (record->event.pressed) { |
76 | SEND_STRING(SS_LCTRL("c") SS_TAP(X_RIGHT) SS_LCTRL("v")); | 76 | SEND_STRING(SS_LCTL("c") SS_TAP(X_RIGHT) SS_LCTL("v")); |
77 | } | 77 | } |
78 | break; | 78 | break; |
79 | } | 79 | } |
diff --git a/quantum/process_keycode/process_terminal.c b/quantum/process_keycode/process_terminal.c index f48f3d702..7d1eefa9e 100644 --- a/quantum/process_keycode/process_terminal.c +++ b/quantum/process_keycode/process_terminal.c | |||
@@ -61,7 +61,7 @@ void enable_terminal(void) { | |||
61 | memset(cmd_buffer, 0, CMD_BUFF_SIZE * 80); | 61 | memset(cmd_buffer, 0, CMD_BUFF_SIZE * 80); |
62 | for (int i = 0; i < 6; i++) strcpy(arguments[i], ""); | 62 | for (int i = 0; i < 6; i++) strcpy(arguments[i], ""); |
63 | // select all text to start over | 63 | // select all text to start over |
64 | // SEND_STRING(SS_LCTRL("a")); | 64 | // SEND_STRING(SS_LCTL("a")); |
65 | send_string(terminal_prompt); | 65 | send_string(terminal_prompt); |
66 | } | 66 | } |
67 | 67 | ||
diff --git a/quantum/quantum.h b/quantum/quantum.h index 6beab65a3..91b9170b1 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h | |||
@@ -182,30 +182,8 @@ typedef ioline_t pin_t; | |||
182 | # define readPin(pin) palReadLine(pin) | 182 | # define readPin(pin) palReadLine(pin) |
183 | #endif | 183 | #endif |
184 | 184 | ||
185 | // Send string macros | ||
186 | #define STRINGIZE(z) #z | ||
187 | #define ADD_SLASH_X(y) STRINGIZE(\x##y) | ||
188 | #define SYMBOL_STR(x) ADD_SLASH_X(x) | ||
189 | |||
190 | #define SS_TAP_CODE 1 | ||
191 | #define SS_DOWN_CODE 2 | ||
192 | #define SS_UP_CODE 3 | ||
193 | |||
194 | #define SS_TAP(keycode) "\1" SYMBOL_STR(keycode) | ||
195 | #define SS_DOWN(keycode) "\2" SYMBOL_STR(keycode) | ||
196 | #define SS_UP(keycode) "\3" SYMBOL_STR(keycode) | ||
197 | |||
198 | // `string` arguments must not be parenthesized | ||
199 | #define SS_LCTRL(string) SS_DOWN(X_LCTRL) string SS_UP(X_LCTRL) | ||
200 | #define SS_LGUI(string) SS_DOWN(X_LGUI) string SS_UP(X_LGUI) | ||
201 | #define SS_LCMD(string) SS_LGUI(string) | ||
202 | #define SS_LWIN(string) SS_LGUI(string) | ||
203 | #define SS_LALT(string) SS_DOWN(X_LALT) string SS_UP(X_LALT) | ||
204 | #define SS_LSFT(string) SS_DOWN(X_LSHIFT) string SS_UP(X_LSHIFT) | ||
205 | #define SS_RALT(string) SS_DOWN(X_RALT) string SS_UP(X_RALT) | ||
206 | #define SS_ALGR(string) SS_RALT(string) | ||
207 | |||
208 | #define SEND_STRING(string) send_string_P(PSTR(string)) | 185 | #define SEND_STRING(string) send_string_P(PSTR(string)) |
186 | #define SEND_STRING_DELAY(string, interval) send_string_with_delay_P(PSTR(string), interval) | ||
209 | 187 | ||
210 | extern const bool ascii_to_shift_lut[128]; | 188 | extern const bool ascii_to_shift_lut[128]; |
211 | extern const bool ascii_to_altgr_lut[128]; | 189 | extern const bool ascii_to_altgr_lut[128]; |
diff --git a/quantum/send_string_keycodes.h b/quantum/send_string_keycodes.h index e2deb980a..fc6467a74 100644 --- a/quantum/send_string_keycodes.h +++ b/quantum/send_string_keycodes.h | |||
@@ -340,3 +340,35 @@ | |||
340 | #define X_MEDIA_REWIND bc | 340 | #define X_MEDIA_REWIND bc |
341 | #define X_BRIGHTNESS_UP bd | 341 | #define X_BRIGHTNESS_UP bd |
342 | #define X_BRIGHTNESS_DOWN be | 342 | #define X_BRIGHTNESS_DOWN be |
343 | |||
344 | // Send string macros | ||
345 | #define STRINGIZE(z) #z | ||
346 | #define ADD_SLASH_X(y) STRINGIZE(\x##y) | ||
347 | #define SYMBOL_STR(x) ADD_SLASH_X(x) | ||
348 | |||
349 | #define SS_TAP_CODE 1 | ||
350 | #define SS_DOWN_CODE 2 | ||
351 | #define SS_UP_CODE 3 | ||
352 | |||
353 | #define SS_TAP(keycode) "\1" SYMBOL_STR(keycode) | ||
354 | #define SS_DOWN(keycode) "\2" SYMBOL_STR(keycode) | ||
355 | #define SS_UP(keycode) "\3" SYMBOL_STR(keycode) | ||
356 | |||
357 | // `string` arguments must not be parenthesized | ||
358 | #define SS_LCTL(string) SS_DOWN(X_LCTL) string SS_UP(X_LCTL) | ||
359 | #define SS_LSFT(string) SS_DOWN(X_LSFT) string SS_UP(X_LSFT) | ||
360 | #define SS_LALT(string) SS_DOWN(X_LALT) string SS_UP(X_LALT) | ||
361 | #define SS_LGUI(string) SS_DOWN(X_LGUI) string SS_UP(X_LGUI) | ||
362 | #define SS_LCMD(string) SS_LGUI(string) | ||
363 | #define SS_LWIN(string) SS_LGUI(string) | ||
364 | |||
365 | #define SS_RCTL(string) SS_DOWN(X_RCTL) string SS_UP(X_RCTL) | ||
366 | #define SS_RSFT(string) SS_DOWN(X_RSFT) string SS_UP(X_RSFT) | ||
367 | #define SS_RALT(string) SS_DOWN(X_RALT) string SS_UP(X_RALT) | ||
368 | #define SS_RGUI(string) SS_DOWN(X_RGUI) string SS_UP(X_RGUI) | ||
369 | #define SS_ALGR(string) SS_RALT(string) | ||
370 | #define SS_RCMD(string) SS_RGUI(string) | ||
371 | #define SS_RWIN(string) SS_RGUI(string) | ||
372 | |||
373 | // DEPRECATED | ||
374 | #define SS_LCTRL(string) SS_LCTL(string) | ||
diff --git a/quantum/template/base/keymaps/default/keymap.c b/quantum/template/base/keymaps/default/keymap.c index 3a68f5487..af35ccec1 100644 --- a/quantum/template/base/keymaps/default/keymap.c +++ b/quantum/template/base/keymaps/default/keymap.c | |||
@@ -52,7 +52,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
52 | case QMKURL: | 52 | case QMKURL: |
53 | if (record->event.pressed) { | 53 | if (record->event.pressed) { |
54 | // when keycode QMKURL is pressed | 54 | // when keycode QMKURL is pressed |
55 | SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); | 55 | SEND_STRING("https://qmk.fm/\n"); |
56 | } else { | 56 | } else { |
57 | // when keycode QMKURL is released | 57 | // when keycode QMKURL is released |
58 | } | 58 | } |