aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfauxpark <fauxpark@gmail.com>2019-11-26 18:16:58 +1100
committerDrashna Jaelre <drashna@live.com>2019-11-25 23:16:58 -0800
commit5a6737a778cfa828e4fdb5d382a84a41e5210d8e (patch)
tree0c746428a46df925b30675990aca209f59db2d9d
parenta2cedf4555ab417d849cbacf9562fd92407d5d71 (diff)
downloadqmk_firmware-5a6737a778cfa828e4fdb5d382a84a41e5210d8e.tar.gz
qmk_firmware-5a6737a778cfa828e4fdb5d382a84a41e5210d8e.zip
Send string keycode tweaks (#7471)
-rw-r--r--docs/feature_leader_key.md8
-rw-r--r--docs/feature_macros.md19
-rw-r--r--docs/feature_userspace.md10
-rw-r--r--keyboards/kmac/keymaps/default/keymap.c2
-rw-r--r--keyboards/kmac/keymaps/default_tkl_ansi/keymap.c2
-rw-r--r--keyboards/kmac/keymaps/default_tkl_ansi_wkl/keymap.c2
-rw-r--r--quantum/process_keycode/process_terminal.c2
-rw-r--r--quantum/quantum.h24
-rw-r--r--quantum/send_string_keycodes.h32
-rw-r--r--quantum/template/base/keymaps/default/keymap.c2
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
110There's also a couple of mod shortcuts you can use: 110There'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
118These press the respective modifier, send the supplied string and then release the modifier. 121These press the respective modifier, send the supplied string and then release the modifier.
119They can be used like this: 122They can be used like this:
120 123
121 SEND_STRING(SS_LCTRL("a")); 124 SEND_STRING(SS_LCTL("a"));
122 125
123Which would send LCTRL+a (LCTRL down, a, LCTRL up) - notice that they take strings (eg `"k"`), and not the `X_K` keycodes. 126Which 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
210extern const bool ascii_to_shift_lut[128]; 188extern const bool ascii_to_shift_lut[128];
211extern const bool ascii_to_altgr_lut[128]; 189extern 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 }