diff options
| -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 | } |
