~ruther/qmk_firmware

bad8c5992bf68b6f2218b9b7a0b31c6ee7a03796 — Ryan 2 years ago c57330d
Remove legacy sendstring keycodes (#18749)

73 files changed, 581 insertions(+), 557 deletions(-)

M keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c
M keyboards/40percentclub/half_n_half/keymaps/Boy_314/keymap.c
M keyboards/atreus/keymaps/workman/keymap.c
M keyboards/crkbd/keymaps/nimishgautam/keymap.c
M keyboards/dichotomy/keymaps/default/keymap.c
M keyboards/dztech/dz65rgb/keymaps/drootz/keymap.c
M keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c
M keyboards/ergodox_ez/keymaps/hacker_dvorak/user/process_record_user.c
M keyboards/flehrad/bigswitch/keymaps/333fred/keymap.c
M keyboards/handwired/datahand/keymaps/default/keymap.c
M keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c
M keyboards/kbdfans/kbd67/hotswap/keymaps/stevanmilic/keymap.c
M keyboards/kbdfans/kbd75/keymaps/tucznak/keymap.c
M keyboards/kbdfans/niu_mini/keymaps/tobias/keymap.c
M keyboards/keebio/bdn9/keymaps/hbbisenieks/keymap.c
M keyboards/keebio/iris/keymaps/eosti/keymap.c
M keyboards/keebio/levinson/keymaps/rossman360/keymap.c
M keyboards/keebio/nyquist/keymaps/bramver/keymap.c
M keyboards/keebio/viterbi/keymaps/met/keymap.c
M keyboards/keyhive/uno/keymaps/demo/keymap.c
M keyboards/kprepublic/jj40/keymaps/skewwhiffy/keymap.c
M keyboards/kprepublic/jj40/keymaps/stevexyz/keymap.c
M keyboards/ktec/staryu/keymaps/krusli/keymap.c
M keyboards/m10a/keymaps/gam3cat/keymap.c
M keyboards/massdrop/ctrl/keymaps/endgame/keymap.c
M keyboards/massdrop/ctrl/keymaps/xanimos/keymap.c
M keyboards/mechkeys/espectro/keymaps/mac/keymap.c
M keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/keymap.c
M keyboards/planck/keymaps/dvorak2space/keymap.c
M keyboards/planck/keymaps/eosti/keymap.c
M keyboards/planck/keymaps/pickle_jr/keymap.c
M keyboards/preonic/keymaps/senseored/keymap.c
M keyboards/redox/keymaps/jeherve/keymap.c
M keyboards/sofle/keymaps/flare576/keymap.c
M keyboards/splitkb/kyria/keymaps/thomasbaart/keymap.c
M keyboards/tada68/keymaps/rbong/keymap.c
M keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/keymap.c
M keyboards/thevankeyboards/minivan/keymaps/budi/keymap.c
M keyboards/thevankeyboards/minivan/keymaps/josjoha/unicode_macros.c
M keyboards/unikeyboard/diverge3/keymaps/workman/keymap.c
M keyboards/wilba_tech/rama_works_m6_a/keymaps/krusli/keymap.c
M keyboards/xiudi/xd75/keymaps/billypython/keymap.c
M keyboards/xiudi/xd75/keymaps/skewwhiffy/keymap.c
M layouts/community/ergodox/berfarah/keymap.c
M layouts/community/ergodox/meagerfindings/keymap.c
M layouts/community/ergodox/qwerty_code_friendly/keymap.c
M quantum/send_string/send_string_keycodes.h
M users/333fred/333fred.c
M users/billypython/billypython.c
M users/danielo515/danielo515.c
M users/danielo515/process_records.c
M users/danielo515/tap_dance.c
M users/dhertz/dhertz.c
M users/edvorakjp/edvorakjp_status.c
M users/gordon/gordon.c
M users/miles2go/babblePaste.h
M users/miles2go/babl_chromeos.c
M users/miles2go/babl_emacs.c
M users/miles2go/babl_kitty.c
M users/miles2go/babl_linux.c
M users/miles2go/babl_mac.c
M users/miles2go/babl_nano.c
M users/miles2go/babl_readmux.c
M users/miles2go/babl_vi.c
M users/miles2go/babl_windows.c
M users/moults31/gdb.c
M users/moults31/vscode.c
M users/rossman360/rossman360.c
M users/sigma/sigma.c
M users/stanrc85/stanrc85.c
M users/talljoe/macros.c
M users/uqs/uqs.c
M users/wanleg/tapdances.c
M keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c => keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c +1 -1
@@ 137,7 137,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
		switch(keycode) {
			case MACRO_0:
        // Save for Web Macro.
				SEND_STRING(SS_LSFT(SS_LALT(SS_LCTRL("s"))));
				SEND_STRING(SS_LSFT(SS_LALT(SS_LCTL("s"))));
				return false;
		}
	}

M keyboards/40percentclub/half_n_half/keymaps/Boy_314/keymap.c => keyboards/40percentclub/half_n_half/keymaps/Boy_314/keymap.c +3 -3
@@ 147,7 147,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
		// Control + T
		case NEWTAB:
			if (record->event.pressed) {
				SEND_STRING(SS_LCTRL("t"));
				SEND_STRING(SS_LCTL("t"));
			}
			break;
		// Alt + F4


@@ 159,13 159,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
		// Control + W
		case CLSTAB:
			if (record->event.pressed) {
				SEND_STRING(SS_LCTRL("w"));
				SEND_STRING(SS_LCTL("w"));
			}
			break;
		// Control + Shift + N
		case PRVWIN:
			if (record->event.pressed) {
				SEND_STRING(SS_LCTRL(SS_LSFT("n")));
				SEND_STRING(SS_LCTL(SS_LSFT("n")));
			}
			break;
	}

M keyboards/atreus/keymaps/workman/keymap.c => keyboards/atreus/keymaps/workman/keymap.c +2 -2
@@ 64,11 64,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
        switch(keycode) {
		case DIAERESIS:
			// assuming KC_CAPS is your Multi Key
			SEND_STRING(SS_TAP(X_CAPSLOCK)"\"");
			SEND_STRING(SS_TAP(X_CAPS_LOCK)"\"");
			return false;
		case EN_DASH:
			// assuming KC_CAPS is your Multi Key
			SEND_STRING(SS_TAP(X_CAPSLOCK)"--.");
			SEND_STRING(SS_TAP(X_CAPS_LOCK)"--.");
			return false;
        }
    }

M keyboards/crkbd/keymaps/nimishgautam/keymap.c => keyboards/crkbd/keymaps/nimishgautam/keymap.c +1 -1
@@ 40,7 40,7 @@ enum {
#define FINDER          LGUI(LALT(KC_SPACE)) //open the search bar for finding apps, docs in-computer, etc
#define COMPOSE_KEY    KC_SCRL //manually set on linux, to create chars via .Xcompose ()
#define COMPOSE_MAC     KC_F13 //manually set on mac using some tricks
#define X_COMPOSE_KEY    X_SCROLLLOCK //for use with macros
#define X_COMPOSE_KEY    X_SCROLL_LOCK //for use with macros
#define SHOW_WINDOWS    LCTL(KC_UP) //'Expose' on Mac, overview on linux. Just all the windows
#define WINDOW_LEFT LCTL(LGUI(LSFT(KC_LEFT))) //custom shortcut for this feature -- make window take up 50% left screen (using gui and ctl to make it os agnostic)
#define WINDOW_RIGHT LCTL(LGUI(LSFT(KC_RIGHT))) //custom shortcut for this feature -- make window take up 50% right screen (using gui and ctl to make it os agnostic)/fully custom shortcut, using ctl and gui keys so will need them both irrespective of os

M keyboards/dichotomy/keymaps/default/keymap.c => keyboards/dichotomy/keymaps/default/keymap.c +3 -3
@@ 146,7 146,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
				shiftLED = false;
				if (timer_elapsed(shift_timer) < CUSTOM_TOGGLE_TIME && shift_singular_key) {
					//this was basically a toggle, so activate/deactivate caps lock.
					SEND_STRING(SS_TAP(X_CAPSLOCK));
					SEND_STRING(SS_TAP(X_CAPS_LOCK));
					capsLED = !capsLED;
				}
				layer_off(_SF);


@@ 216,7 216,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
				} else {
					if (special_key_pressed[CK_BSPE-SAFE_RANGE]){
						//key was not activated, return macro activating proper, pre-long-tap key
						SEND_STRING(SS_TAP(X_BSLASH));
						SEND_STRING(SS_TAP(X_BACKSLASH));
						special_key_pressed[CK_BSPE-SAFE_RANGE] = 0;
					} else {
						//the short key was already sent, because another key was pressed.


@@ 416,7 416,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
								SEND_STRING(SS_TAP(X_1));
							break;
							case CK_BSPE:
								SEND_STRING(SS_TAP(X_BSLASH));
								SEND_STRING(SS_TAP(X_BACKSLASH));
							break;
							case CK_QE:
								SEND_STRING(SS_TAP(X_QUOTE));

M keyboards/dztech/dz65rgb/keymaps/drootz/keymap.c => keyboards/dztech/dz65rgb/keymaps/drootz/keymap.c +1 -1
@@ 347,7 347,7 @@ void send_french_accent(uint8_t letter, uint8_t accent) {

    if (onMac) {
        if (isCaps) {
            SEND_STRING(SS_TAP(X_CAPSLOCK));
            SEND_STRING(SS_TAP(X_CAPS_LOCK));
            register_code(KC_LALT);
            tap_code(osx_mod_key_map[accent]);
            unregister_code(KC_LALT);

M keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c => keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c +4 -4
@@ 592,21 592,21 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
            return true;
            break;
        case SHELL_EXPAND_OE_LOGPATTERN:
                SEND_STRING(SS_TAP(X_LEFT)"*CQW_HKEX"SS_TAP(X_END)"*.log"SS_LCTRL("x")SS_LSFT("8"));
                SEND_STRING(SS_TAP(X_LEFT)"*CQW_HKEX"SS_TAP(X_END)"*.log"SS_LCTL("x")SS_LSFT("8"));
            break;
        case SHELL_EXPAND_OE_TRANPATTERN:
                SEND_STRING(SS_TAP(X_LEFT)"*CQW_HKEX"SS_TAP(X_END)"*.tran"SS_LCTRL("x")SS_LSFT("8"));
                SEND_STRING(SS_TAP(X_LEFT)"*CQW_HKEX"SS_TAP(X_END)"*.tran"SS_LCTL("x")SS_LSFT("8"));
            break;
            case SHELL_DUMPTLOG:
                SEND_STRING(" | dumptlog - ");
                return true;
                break;
            case WINDOWS10_WORKSPACE_LEFT:
                SEND_STRING(SS_LGUI(SS_LCTRL(SS_TAP(X_LEFT))));
                SEND_STRING(SS_LGUI(SS_LCTL(SS_TAP(X_LEFT))));
                return true;
                break;
            case WINDOWS10_WORKSPACE_RIGHT:
                SEND_STRING(SS_LGUI(SS_LCTRL(SS_TAP(X_RIGHT))));
                SEND_STRING(SS_LGUI(SS_LCTL(SS_TAP(X_RIGHT))));
                break;
            case WINDOWS10_TASK_VIEW:
                SEND_STRING(SS_LGUI(SS_TAP(X_TAB)));

M keyboards/ergodox_ez/keymaps/hacker_dvorak/user/process_record_user.c => keyboards/ergodox_ez/keymaps/hacker_dvorak/user/process_record_user.c +1 -1
@@ 65,7 65,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {

        case MY_OTHER_MACRO:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL("ac")); // selects all and copies
                SEND_STRING(SS_LCTL("ac")); // selects all and copies
                return false;
            }


M keyboards/flehrad/bigswitch/keymaps/333fred/keymap.c => keyboards/flehrad/bigswitch/keymaps/333fred/keymap.c +1 -1
@@ 101,7 101,7 @@ void dance_finished(qk_tap_dance_state_t *state, void* user_data) {
    case SINGLE_TAP:
    {
      // VS Build: CTRL+SHIFT+B
      send_string_with_delay_P(PSTR(SS_DOWN(X_LCTRL) SS_DOWN(X_LSHIFT) "b" SS_UP(X_LSHIFT) SS_UP(X_LCTRL)), 10);
      send_string_with_delay_P(PSTR(SS_DOWN(X_LCTL) SS_DOWN(X_LSFT) "b" SS_UP(X_LSFT) SS_UP(X_LCTL)), 10);
      tap_dance_active = false;
      break;
    }

M keyboards/handwired/datahand/keymaps/default/keymap.c => keyboards/handwired/datahand/keymaps/default/keymap.c +2 -2
@@ 250,9 250,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    case NLK:
    if (pressed) {
      toggle_numlock();
      SEND_STRING(SS_DOWN(X_NUMLOCK));
      SEND_STRING(SS_DOWN(X_NUM_LOCK));
    } else {
      SEND_STRING(SS_UP(X_NUMLOCK));
      SEND_STRING(SS_UP(X_NUM_LOCK));
    }
    break;
    

M keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c => keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c +4 -4
@@ 125,7 125,7 @@ CHOREOGRAPH(TD_RGHT,
            /* Send a complex macro: C-x C-s Mod-t up.  (Save in
             * Emacs, switch to terminal and recall previous command,
             * hopefully a compile command.) */
            SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_X) SS_TAP(X_S) SS_UP(X_LCTRL)
            SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_X) SS_TAP(X_S) SS_UP(X_LCTL)
                        SS_DOWN(X_LGUI) SS_TAP(X_T) SS_UP(X_LGUI) SS_TAP(X_UP)),
            layer_invert(1));



@@ 134,9 134,9 @@ CHOREOGRAPH(TD_RGHT,
 * just sends C-x. */

CHOREOGRAPH(TD_C_X,
            SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_X)),
            SEND_STRING(SS_UP(X_LCTRL)),
            SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_X) SS_UP(X_LCTRL)),);
            SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_X)),
            SEND_STRING(SS_UP(X_LCTL)),
            SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_X) SS_UP(X_LCTL)),);

qk_tap_dance_action_t tap_dance_actions[] = {
    STEPS(TD_LEFT), STEPS(TD_RGHT), STEPS(TD_C_X)

M keyboards/kbdfans/kbd67/hotswap/keymaps/stevanmilic/keymap.c => keyboards/kbdfans/kbd67/hotswap/keymaps/stevanmilic/keymap.c +1 -1
@@ 25,7 25,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
    case CLEAR:
        if (record->event.pressed) {
            SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
            SEND_STRING(SS_LCTL("a") SS_TAP(X_DELETE));
        }
        return false;


M keyboards/kbdfans/kbd75/keymaps/tucznak/keymap.c => keyboards/kbdfans/kbd75/keymaps/tucznak/keymap.c +1 -1
@@ 53,7 53,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case MACRO1:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL("c") SS_DOWN(X_LALT) SS_TAP(X_TAB) SS_UP(X_LALT) SS_LCTRL("v") SS_TAP(X_TAB));
                SEND_STRING(SS_LCTL("c") SS_DOWN(X_LALT) SS_TAP(X_TAB) SS_UP(X_LALT) SS_LCTL("v") SS_TAP(X_TAB));
                _delay_ms(50);
                SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_TAB) SS_UP(X_LALT) SS_TAP(X_TAB));
            } else {

M keyboards/kbdfans/niu_mini/keymaps/tobias/keymap.c => keyboards/kbdfans/niu_mini/keymaps/tobias/keymap.c +1 -1
@@ 238,7 238,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    if (record->event.pressed) {
        switch(keycode) {
            case TBMACRO:
                SEND_STRING(SS_TAP(X_TAB) SS_DOWN(X_LSHIFT) SS_TAP(X_HOME) SS_UP(X_LSHIFT) SS_TAP(X_DELETE));
                SEND_STRING(SS_TAP(X_TAB) SS_DOWN(X_LSFT) SS_TAP(X_HOME) SS_UP(X_LSFT) SS_TAP(X_DELETE));
                return false;
            case DGRMCRO:
                if(!bnumlock) {

M keyboards/keebio/bdn9/keymaps/hbbisenieks/keymap.c => keyboards/keebio/bdn9/keymaps/hbbisenieks/keymap.c +2 -2
@@ 77,9 77,9 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
    }
    else if (index == 1) {
        if (clockwise) {
	    SEND_STRING(SS_LCTRL("1")); // audacity zoom in
	    SEND_STRING(SS_LCTL("1")); // audacity zoom in
        } else {
	    SEND_STRING(SS_LCTRL("3")); // audacity zoom out
	    SEND_STRING(SS_LCTL("3")); // audacity zoom out
        }
    }
    return true;

M keyboards/keebio/iris/keymaps/eosti/keymap.c => keyboards/keebio/iris/keymaps/eosti/keymap.c +2 -2
@@ 33,13 33,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case TMUX_WN:                       // Switches to next window in tmux
      if (record->event.pressed) {
        SEND_STRING(SS_LCTRL("a") "n"); // Requires a leader of ctrl-a
        SEND_STRING(SS_LCTL("a") "n"); // Requires a leader of ctrl-a
      }
      break;

    case TMUX_WL:                       // Switches to last window in tmux
      if (record->event.pressed) {
          SEND_STRING(SS_LCTRL("a") "l");
          SEND_STRING(SS_LCTL("a") "l");
      }
      break;


M keyboards/keebio/levinson/keymaps/rossman360/keymap.c => keyboards/keebio/levinson/keymaps/rossman360/keymap.c +9 -9
@@ 49,47 49,47 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
	case CSPEAK:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN));
		SEND_STRING(SS_TAP(X_PAGEDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PAGEDOWN));
	}
	break;
	case SPEAK1:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_1)));
		SEND_STRING(SS_TAP(X_PAGEDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PAGEDOWN) SS_LCTL(SS_TAP(X_1)));
	}
	break;
	case SPEAK2:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_2)));
		SEND_STRING(SS_TAP(X_PAGEDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PAGEDOWN) SS_LCTL(SS_TAP(X_2)));
	 }
	break;
	case SPEAK3:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_3)));
		SEND_STRING(SS_TAP(X_PAGEDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PAGEDOWN) SS_LCTL(SS_TAP(X_3)));
	}
	break;
	case SPEAK4:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_4)));
		SEND_STRING(SS_TAP(X_PAGEDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PAGEDOWN) SS_LCTL(SS_TAP(X_4)));
	}
	break;
	case PARADOWN:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN));
		SEND_STRING(SS_TAP(X_PAGEDOWN) SS_TAP(X_ENTER) SS_TAP(X_PAGEDOWN));
	}
	break;
	case PMERGE:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_HOME) SS_TAP(X_BSPACE) SS_TAP(X_SPACE) SS_LCTRL(SS_TAP(X_BSPACE)) SS_TAP(X_SPACE));
		SEND_STRING(SS_TAP(X_HOME) SS_TAP(X_BACKSPACE) SS_TAP(X_SPACE) SS_LCTL(SS_TAP(X_BACKSPACE)) SS_TAP(X_SPACE));
	}
	break;
	case WREFRESH:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_SPACE) SS_TAP(X_BSPACE));
		SEND_STRING(SS_TAP(X_SPACE) SS_TAP(X_BACKSPACE));
	}
	break;
	case REMCAPS:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_LCTRL(SS_TAP(X_LEFT)) SS_TAP(X_DELETE));
		SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_LCTL(SS_TAP(X_LEFT)) SS_TAP(X_DELETE));
	}
	break;
};

M keyboards/keebio/nyquist/keymaps/bramver/keymap.c => keyboards/keebio/nyquist/keymaps/bramver/keymap.c +4 -4
@@ 250,16 250,16 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  if (record->event.pressed) {
    switch(keycode) {
      case CTRL_Z:
        SEND_STRING(SS_LCTRL("z"));
        SEND_STRING(SS_LCTL("z"));
        return false;
      case CTRL_X:
        SEND_STRING(SS_LCTRL("x"));
        SEND_STRING(SS_LCTL("x"));
        return false;
      case CTRL_C:
        SEND_STRING(SS_LCTRL("c"));
        SEND_STRING(SS_LCTL("c"));
        return false;
      case CTRL_V:
        SEND_STRING(SS_LCTRL("v"));
        SEND_STRING(SS_LCTL("v"));
        return false;
    }
  }

M keyboards/keebio/viterbi/keymaps/met/keymap.c => keyboards/keebio/viterbi/keymaps/met/keymap.c +9 -9
@@ 87,14 87,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  layer_off(_ALPHA);
  SEND_STRING(SS_TAP(X_N));
  SEND_STRING(SS_TAP(X_N));
  SEND_STRING(SS_LCTRL(SS_TAP(X_C)));
  SEND_STRING(SS_LCTL(SS_TAP(X_C)));
}
  break;
  case RESUME:
  if (record->event.pressed) {
  layer_off(_PLAYED);
  layer_on(_PLAYING);
  SEND_STRING(SS_LCTRL(SS_TAP(X_C)));
  SEND_STRING(SS_LCTL(SS_TAP(X_C)));
  SEND_STRING(SS_TAP(X_UP));
  SEND_STRING(SS_TAP(X_ENTER));
}


@@ 116,14 116,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  break;
  case SHUTDOWN:
  if (record->event.pressed) {
  SEND_STRING(SS_LCTRL(SS_TAP(X_C)));
  SEND_STRING(SS_LCTL(SS_TAP(X_C)));
  SEND_STRING("shutdown now");
  SEND_STRING(SS_TAP(X_ENTER));
}
  break;
  case REBOOT:
  if (record->event.pressed) {
  SEND_STRING(SS_LCTRL(SS_TAP(X_C)));
  SEND_STRING(SS_LCTL(SS_TAP(X_C)));
  SEND_STRING("reboot");
  SEND_STRING(SS_TAP(X_ENTER));
  }


@@ 155,7 155,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  layer_off(_ALPHA);
  layer_off(_PLAYED);
  layer_on(_PLAYING);
  SEND_STRING(SS_LCTRL(SS_TAP(X_C)));
  SEND_STRING(SS_LCTL(SS_TAP(X_C)));
  _delay_ms(250);
  SEND_STRING("play Desktop/met/a_lazoom.mp3");
  SEND_STRING(SS_TAP(X_ENTER));


@@ 200,18 200,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  case PMERGE:
  if (record->event.pressed) {
  SEND_STRING(SS_TAP(X_HOME));
  SEND_STRING(SS_TAP(X_BSPACE));
  SEND_STRING(SS_TAP(X_BACKSPACE));
  SEND_STRING(SS_TAP(X_SPACE));
  SEND_STRING(SS_LCTRL(SS_TAP(X_BSPACE)));
  SEND_STRING(SS_LCTL(SS_TAP(X_BACKSPACE)));
  SEND_STRING(SS_TAP(X_SPACE));
      }
break;
case CSPEAK:
  if (record->event.pressed) {
  SEND_STRING(SS_TAP(X_PGDOWN));
  SEND_STRING(SS_TAP(X_PAGE_DOWN));
  SEND_STRING(SS_TAP(X_ENTER));
  SEND_STRING(SS_TAP(X_ENTER));
  SEND_STRING(SS_TAP(X_PGDOWN));
  SEND_STRING(SS_TAP(X_PAGE_DOWN));
}
 break;
};

M keyboards/keyhive/uno/keymaps/demo/keymap.c => keyboards/keyhive/uno/keymaps/demo/keymap.c +1 -1
@@ 73,7 73,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
                    default:
                        if (timeElapsed < CUSTOM_LONGPRESS) {
                            // Normal press.  We're going to send the current letter and increment the counter.
                            SEND_STRING(SS_TAP(X_BSPACE));
                            SEND_STRING(SS_TAP(X_BACKSPACE));
                            send_string(stringToSend);
                            stringToSend[0]++;
                            if (stringToSend[0] > maxLetter) {

M keyboards/kprepublic/jj40/keymaps/skewwhiffy/keymap.c => keyboards/kprepublic/jj40/keymaps/skewwhiffy/keymap.c +1 -1
@@ 211,7 211,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  if (record->event.pressed) {
    switch(keycode) {
      case IJ_OMN:
        SEND_STRING(SS_TAP(X_LSHIFT)SS_TAP(X_LSHIFT));
        SEND_STRING(SS_TAP(X_LSFT)SS_TAP(X_LSFT));
        return false;
    }
  }

M keyboards/kprepublic/jj40/keymaps/stevexyz/keymap.c => keyboards/kprepublic/jj40/keymaps/stevexyz/keymap.c +1 -1
@@ 263,7 263,7 @@ void matrix_init_user(void) {
  // eeconfig_init(); // reset keyboard to a standard default state; useful when new releases messup with eeprom values
  // set num lock on at start (for numonly layer to work)
  if (!(host_keyboard_leds() & (1<<USB_LED_NUM_LOCK))) {
      SEND_STRING(SS_TAP(X_NUMLOCK)); //register_code(KC_NUM_LOCK); unregister_code(KC_NUM_LOCK);
      SEND_STRING(SS_TAP(X_NUM_LOCK)); //register_code(KC_NUM_LOCK); unregister_code(KC_NUM_LOCK);
  }
}


M keyboards/ktec/staryu/keymaps/krusli/keymap.c => keyboards/ktec/staryu/keymaps/krusli/keymap.c +1 -1
@@ 41,7 41,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
				SEND_STRING("git add ."SS_TAP(X_ENTER));
        break;
      case GIT_COMMIT:
        SEND_STRING("git commit -m "SS_DOWN(X_LSHIFT)SS_TAP(X_QUOTE)SS_UP(X_LSHIFT));
        SEND_STRING("git commit -m "SS_DOWN(X_LSFT)SS_TAP(X_QUOTE)SS_UP(X_LSFT));
        break;
      case GIT_PUSH:
        SEND_STRING("git push"SS_TAP(X_ENTER));

M keyboards/m10a/keymaps/gam3cat/keymap.c => keyboards/m10a/keymaps/gam3cat/keymap.c +1 -1
@@ 84,7 84,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
            break;
        case KC_WCLS:
            if (record->event.pressed) {
                SEND_STRING (SS_LCTRL("w"));
                SEND_STRING (SS_LCTL("w"));
            }
            return false;
            break;

M keyboards/massdrop/ctrl/keymaps/endgame/keymap.c => keyboards/massdrop/ctrl/keymaps/endgame/keymap.c +1 -1
@@ 306,7 306,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
            // ======================================================== CUSTOM KEYCOADS BELOW ========================================================
            case COPY_ALL:
                // Selects all and text and copy
                SEND_STRING(SS_LCTRL("ac"));
                SEND_STRING(SS_LCTL("ac"));
                return false;
            case SEL_CPY:
                // Select word under cursor and copy. Double mouse click then ctrl+c

M keyboards/massdrop/ctrl/keymaps/xanimos/keymap.c => keyboards/massdrop/ctrl/keymaps/xanimos/keymap.c +1 -1
@@ 274,7 274,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
            // ======================================================== CUSTOM KEYCOADS BELOW ========================================================
            case COPY_ALL:
                // Selects all and text and copy
                SEND_STRING(SS_LCTRL("ac"));
                SEND_STRING(SS_LCTL("ac"));
                return false;
            case ROUT_TG:
                // Toggle idle LED timeout on or off

M keyboards/mechkeys/espectro/keymaps/mac/keymap.c => keyboards/mechkeys/espectro/keymaps/mac/keymap.c +3 -3
@@ 137,16 137,16 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
    // dynamically generate these.
      case EXPOSE:
        SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_UP) SS_UP(X_LCTRL));
        SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_UP) SS_UP(X_LCTL));
        return false;
      case LAUNCH:
        SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_L) SS_UP(X_LCTRL));
        SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_L) SS_UP(X_LCTL));
        return false;
      case DOCK:
        SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LGUI) SS_TAP(X_D) SS_UP(X_LGUI) SS_UP(X_LALT));
        return false;
      case SCRCAP:  //screen capture
        SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_S) SS_UP(X_LCTRL));
        SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_S) SS_UP(X_LCTL));
        return false;
      case CS1:  //custom shortcut 1
        SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LGUI) SS_TAP(X_1) SS_UP(X_LGUI) SS_UP(X_LALT));

M keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/keymap.c => keyboards/omkbd/ergodash/rev1/keymaps/m47ch4n/keymap.c +5 -5
@@ 115,13 115,13 @@ void persistent_default_layer_set(uint16_t default_layer) {
    default_layer_set(default_layer);
}

#define SEND_STRING_RESTORE(STR) (SHIFT_PRESSED ? SEND_STRING(STR SS_DOWN(X_LSHIFT)) : SEND_STRING(STR SS_UP(X_LSHIFT)))
#define SEND_STRING_RESTORE(STR) (SHIFT_PRESSED ? SEND_STRING(STR SS_DOWN(X_LSFT)) : SEND_STRING(STR SS_UP(X_LSFT)))

#define KEY(CODE) (record->event.pressed ? SEND_STRING(SS_DOWN(X_##CODE)) : SEND_STRING_RESTORE(SS_UP(X_##CODE)))

#define KEY_SHIFT(CODE) (record->event.pressed ? SEND_STRING(SS_DOWN(X_LSHIFT) SS_DOWN(X_##CODE)) : SEND_STRING_RESTORE(SS_UP(X_##CODE)))
#define KEY_SHIFT(CODE) (record->event.pressed ? SEND_STRING(SS_DOWN(X_LSFT) SS_DOWN(X_##CODE)) : SEND_STRING_RESTORE(SS_UP(X_##CODE)))

#define KEY_UPSHIFT(CODE) (record->event.pressed ? SEND_STRING(SS_UP(X_LSHIFT) SS_DOWN(X_##CODE)) : SEND_STRING_RESTORE(SS_UP(X_##CODE)))
#define KEY_UPSHIFT(CODE) (record->event.pressed ? SEND_STRING(SS_UP(X_LSFT) SS_DOWN(X_##CODE)) : SEND_STRING_RESTORE(SS_UP(X_##CODE)))

#define SHIFT_DU(CODE_DOWN, CODE_UP) (SHIFT_PRESSED ? CODE_DOWN : CODE_UP)
#define CASE_US(CODE, US, JP)                   \


@@ 180,10 180,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
            break;
        case SHIFT:
            if (record->event.pressed) {
                SEND_STRING(SS_DOWN(X_LSHIFT));
                SEND_STRING(SS_DOWN(X_LSFT));
                SHIFT_PRESSED = true;
            } else {
                SEND_STRING(SS_UP(X_LSHIFT));
                SEND_STRING(SS_UP(X_LSFT));
                SHIFT_PRESSED = false;
            }
            return false;

M keyboards/planck/keymaps/dvorak2space/keymap.c => keyboards/planck/keymaps/dvorak2space/keymap.c +2 -2
@@ 137,8 137,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { //X_KEY doesn'
      if(record->event.pressed) {
        (IS_LAYER_ON(SHFT_L)) //if shifted release correct shift, send, and press same shift, else send shift enter
          ? (get_mods() & MOD_BIT(KC_LSFT))
            ? SEND_STRING(SS_UP(X_LSHIFT) SS_TAP(X_ENTER) SS_DOWN(X_LSHIFT))
            : SEND_STRING(SS_UP(X_RSHIFT) SS_TAP(X_ENTER) SS_DOWN(X_RSHIFT))
            ? SEND_STRING(SS_UP(X_LSFT) SS_TAP(X_ENTER) SS_DOWN(X_LSFT))
            : SEND_STRING(SS_UP(X_RSFT) SS_TAP(X_ENTER) SS_DOWN(X_RSFT))
          : SEND_STRING(SS_LSFT(SS_TAP(X_ENTER)));
      }
      return false;

M keyboards/planck/keymaps/eosti/keymap.c => keyboards/planck/keymaps/eosti/keymap.c +2 -2
@@ 34,13 34,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case TMUX_WN:                   // Moves to the next tmux window
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL("a") "n");
                SEND_STRING(SS_LCTL("a") "n");
            }
            break;

        case TMUX_WL:                   // Moves to the last tmux window
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL("a") "n");
                SEND_STRING(SS_LCTL("a") "n");
            }
            break;
    }

M keyboards/planck/keymaps/pickle_jr/keymap.c => keyboards/planck/keymaps/pickle_jr/keymap.c +1 -1
@@ 35,7 35,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  if(record->event.pressed) {
    switch(keycode) {
      case CTLALTD:
        SEND_STRING(SS_DOWN(X_LCTRL)SS_DOWN(X_LALT)SS_DOWN(X_DELETE)SS_UP(X_DELETE)SS_UP(X_LALT)SS_UP(X_LCTRL));
        SEND_STRING(SS_DOWN(X_LCTL)SS_DOWN(X_LALT)SS_DOWN(X_DELETE)SS_UP(X_DELETE)SS_UP(X_LALT)SS_UP(X_LCTL));
        return false;
      case VIMSAVE:
        SEND_STRING(":w");

M keyboards/preonic/keymaps/senseored/keymap.c => keyboards/preonic/keymaps/senseored/keymap.c +1 -1
@@ 261,7 261,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    if (record->event.pressed) {
        switch(keycode) {
            case TBMACRO:
                SEND_STRING(SS_TAP(X_TAB) SS_DOWN(X_LSHIFT) SS_TAP(X_HOME) SS_UP(X_LSHIFT) SS_TAP(X_DELETE));
                SEND_STRING(SS_TAP(X_TAB) SS_DOWN(X_LSFT) SS_TAP(X_HOME) SS_UP(X_LSFT) SS_TAP(X_DELETE));
                return false;
            case DGRMCRO:
                if(!bnumlock) {

M keyboards/redox/keymaps/jeherve/keymap.c => keyboards/redox/keymaps/jeherve/keymap.c +1 -1
@@ 62,7 62,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
            break;
        case INV_1P:
            if (record->event.pressed) {
                SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_LALT) SS_TAP(X_BSLASH) SS_UP(X_LGUI) SS_UP(X_LALT));
                SEND_STRING(SS_DOWN(X_LGUI) SS_DOWN(X_LALT) SS_TAP(X_BACKSLASH) SS_UP(X_LGUI) SS_UP(X_LALT));
            }
            return false;
            break;

M keyboards/sofle/keymaps/flare576/keymap.c => keyboards/sofle/keymaps/flare576/keymap.c +2 -2
@@ 147,13 147,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case _COMP1:
            if (record->event.pressed) {
                // SEND_STRING(SS_TAP(X_RCTRL) SS_DELAY(100) SS_TAP(X_RCTRL) SS_DELAY(100) "1" SS_TAP(X_ENTER));
                // SEND_STRING(SS_TAP(X_RCTL) SS_DELAY(100) SS_TAP(X_RCTL) SS_DELAY(100) "1" SS_TAP(X_ENTER));
                keymap_config.swap_lalt_lgui = false;
            }
            return false;
        case _COMP2:
            if (record->event.pressed) {
                // SEND_STRING(SS_TAP(X_RCTRL) SS_DELAY(100) SS_TAP(X_RCTRL) SS_DELAY(100) "2" SS_TAP(X_ENTER));
                // SEND_STRING(SS_TAP(X_RCTL) SS_DELAY(100) SS_TAP(X_RCTL) SS_DELAY(100) "2" SS_TAP(X_ENTER));
                keymap_config.swap_lalt_lgui = true;
            }
            return false;

M keyboards/splitkb/kyria/keymaps/thomasbaart/keymap.c => keyboards/splitkb/kyria/keymaps/thomasbaart/keymap.c +1 -1
@@ 195,7 195,7 @@ void matrix_scan_user(void) {
            SEND_STRING("`` " SS_TAP(X_LEFT) SS_TAP(X_LEFT));
        }
        SEQ_ONE_KEY(KC_P) { // Invoke Password Manager
            SEND_STRING(SS_LCTRL(SS_LALT("\\")));
            SEND_STRING(SS_LCTL(SS_LALT("\\")));
        }
        SEQ_ONE_KEY(KC_S) { // Windows screenshot
            SEND_STRING(SS_LGUI("\nS"));

M keyboards/tada68/keymaps/rbong/keymap.c => keyboards/tada68/keymaps/rbong/keymap.c +1 -1
@@ 18,7 18,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  if (record->event.pressed) {
    switch(keycode) {
      case TRMEXIT:
        SEND_STRING(SS_LCTRL("\\")SS_LCTRL("n"));
        SEND_STRING(SS_LCTL("\\")SS_LCTL("n"));
        return false;
    }
  }

M keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/keymap.c => keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/keymap.c +1 -1
@@ 78,7 78,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
      // Designed to switch between two keyboard layouts on Windows using a locking switch.
      // Does nothing if right shift is pressed for easy resync.
      if (!(get_mods() & MOD_BIT(KC_RSFT)))
        SEND_STRING(SS_DOWN(X_LALT)SS_TAP(X_LSHIFT)SS_UP(X_LALT));
        SEND_STRING(SS_DOWN(X_LALT)SS_TAP(X_LSFT)SS_UP(X_LALT));
      return false;
    }


M keyboards/thevankeyboards/minivan/keymaps/budi/keymap.c => keyboards/thevankeyboards/minivan/keymaps/budi/keymap.c +2 -2
@@ 214,9 214,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
      case SWTCH:
        SEND_STRING(SS_DOWN(X_LGUI));
        SEND_STRING(SS_DOWN(X_LSHIFT));
        SEND_STRING(SS_DOWN(X_LSFT));
        SEND_STRING(SS_TAP(X_ENTER));
        SEND_STRING(SS_UP(X_LSHIFT));
        SEND_STRING(SS_UP(X_LSFT));
        SEND_STRING(SS_UP(X_LGUI));
        return false;
    }

M keyboards/thevankeyboards/minivan/keymaps/josjoha/unicode_macros.c => keyboards/thevankeyboards/minivan/keymaps/josjoha/unicode_macros.c +1 -1
@@ 90,7 90,7 @@ void unicode_hex2output (long unsigned int unshifted, long unsigned int shifted)
            bitmove *= 0x10; // next digit
        }
    
        SEND_STRING ( SS_DOWN(X_LCTRL) SS_DOWN(X_LSHIFT) "f" SS_UP(X_LSHIFT) SS_UP(X_LCTRL) ); // lead-in for Unicode on Linux, 'descramble' mode
        SEND_STRING ( SS_DOWN(X_LCTL) SS_DOWN(X_LSFT) "f" SS_UP(X_LSFT) SS_UP(X_LCTL) ); // lead-in for Unicode on Linux, 'descramble' mode
        send_string (output + index); // pointer to argument with formatted string
        SEND_STRING ( " " ); // Ends the Unicode numerical input mode
    }

M keyboards/unikeyboard/diverge3/keymaps/workman/keymap.c => keyboards/unikeyboard/diverge3/keymaps/workman/keymap.c +1 -1
@@ 55,7 55,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t* record)
                        SEND_STRING(SS_TAP(X_DELETE));
                        set_mods(current_mods);
                    } else {
                        SEND_STRING(SS_TAP(X_BSPACE));
                        SEND_STRING(SS_TAP(X_BACKSPACE));
                    }
                }
                return false;

M keyboards/wilba_tech/rama_works_m6_a/keymaps/krusli/keymap.c => keyboards/wilba_tech/rama_works_m6_a/keymaps/krusli/keymap.c +1 -1
@@ 35,7 35,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record)
            SEND_STRING("git add ." SS_TAP(X_ENTER));
            break;
        case GIT_COMMIT:
            SEND_STRING("git commit -m " SS_DOWN(X_LSHIFT) SS_TAP(X_QUOTE) SS_UP(X_LSHIFT));
            SEND_STRING("git commit -m " SS_DOWN(X_LSFT) SS_TAP(X_QUOTE) SS_UP(X_LSFT));
            break;
        case GIT_PUSH:
            SEND_STRING("git push" SS_TAP(X_ENTER));

M keyboards/xiudi/xd75/keymaps/billypython/keymap.c => keyboards/xiudi/xd75/keymaps/billypython/keymap.c +1 -1
@@ 34,7 34,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
  case CLEAR:
    if (record->event.pressed) {
      SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
      SEND_STRING(SS_LCTL("a") SS_TAP(X_DELETE));
    }
    return false;


M keyboards/xiudi/xd75/keymaps/skewwhiffy/keymap.c => keyboards/xiudi/xd75/keymaps/skewwhiffy/keymap.c +1 -1
@@ 225,7 225,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  if (record->event.pressed) {
    switch(keycode) {
      case IJ_OMN:
        SEND_STRING(SS_TAP(X_LSHIFT)SS_TAP(X_LSHIFT));
        SEND_STRING(SS_TAP(X_LSFT)SS_TAP(X_LSFT));
        return false;
    }
  }

M layouts/community/ergodox/berfarah/keymap.c => layouts/community/ergodox/berfarah/keymap.c +1 -1
@@ 233,7 233,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    case BF_AFK:
      if (record->event.pressed) {
        layer_on(AFK);
        SEND_STRING(SS_DOWN(X_LCTRL)SS_DOWN(X_LSHIFT)SS_TAP(X_POWER)SS_UP(X_LSHIFT)SS_UP(X_LCTRL));
        SEND_STRING(SS_DOWN(X_LCTL)SS_DOWN(X_LSFT)SS_TAP(X_PWR)SS_UP(X_LSFT)SS_UP(X_LCTL));
      }
      return false; break;
    case BF_WAKE:

M layouts/community/ergodox/meagerfindings/keymap.c => layouts/community/ergodox/meagerfindings/keymap.c +1 -1
@@ 473,7 473,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
          SEND_STRING ("Todoist");
          SEND_STRING (SS_TAP(X_ENTER));
        } else {
          SEND_STRING (SS_LGUI(SS_LCTRL("a"))); //macro to open Todoist new task dialog
          SEND_STRING (SS_LGUI(SS_LCTL("a"))); //macro to open Todoist new task dialog
        }
      }
      break;

M layouts/community/ergodox/qwerty_code_friendly/keymap.c => layouts/community/ergodox/qwerty_code_friendly/keymap.c +2 -2
@@ 596,7 596,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    case KC_LEFT_SHIFT:  /* '' */
      if (record->event.pressed && (keyboard_report->mods & (MOD_BIT(KC_RSFT)))) {
        WITHOUT_MODS({
            SEND_STRING("''" SS_TAP(X_LEFT) SS_DOWN(X_RSHIFT) SS_DOWN(X_LSHIFT));
            SEND_STRING("''" SS_TAP(X_LEFT) SS_DOWN(X_RSFT) SS_DOWN(X_LSFT));
          });
        return false;
      }


@@ 604,7 604,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    case KC_RIGHT_SHIFT:  /* "" */
      if (record->event.pressed && (keyboard_report->mods & (MOD_BIT(KC_LSFT)))) {
        WITHOUT_MODS({
            SEND_STRING("\x22\x22" SS_TAP(X_LEFT) SS_DOWN(X_LSHIFT) SS_DOWN(X_RSHIFT));
            SEND_STRING("\x22\x22" SS_TAP(X_LEFT) SS_DOWN(X_LSFT) SS_DOWN(X_RSFT));
          });
        return false;
      }

M quantum/send_string/send_string_keycodes.h => quantum/send_string/send_string_keycodes.h +299 -275
@@ 21,45 21,53 @@
/* Punctuation */
#define X_ENT  X_ENTER
#define X_ESC  X_ESCAPE
#define X_BSPC X_BSPACE
#define X_BSPC X_BACKSPACE
#define X_SPC  X_SPACE
#define X_MINS X_MINUS
#define X_EQL  X_EQUAL
#define X_LBRC X_LBRACKET
#define X_RBRC X_RBRACKET
#define X_BSLS X_BSLASH
#define X_LBRC X_LEFT_BRACKET
#define X_RBRC X_RIGHT_BRACKET
#define X_BSLS X_BACKSLASH
#define X_NUHS X_NONUS_HASH
#define X_SCLN X_SCOLON
#define X_SCLN X_SEMICOLON
#define X_QUOT X_QUOTE
#define X_GRV  X_GRAVE
#define X_COMM X_COMMA
#define X_SLSH X_SLASH
#define X_NUBS X_NONUS_BSLASH
#define X_NUBS X_NONUS_BACKSLASH

/* Lock Keys */
#define X_CLCK X_CAPSLOCK
#define X_CAPS X_CAPSLOCK
#define X_SLCK X_SCROLLLOCK
#define X_NLCK X_NUMLOCK
#define X_LCAP X_LOCKING_CAPS
#define X_LNUM X_LOCKING_NUM
#define X_LSCR X_LOCKING_SCROLL
#define X_CAPS X_CAPS_LOCK
#define X_SCRL X_SCROLL_LOCK
#define X_NUM  X_NUM_LOCK
#define X_LCAP X_LOCKING_CAPS_LOCK
#define X_LNUM X_LOCKING_NUM_LOCK
#define X_LSCR X_LOCKING_SCROLL_LOCK

/* Commands */
#define X_PSCR X_PSCREEN
#define X_PSCR X_PRINT_SCREEN
#define X_PAUS X_PAUSE
#define X_BRK  X_PAUSE
#define X_INS  X_INSERT
#define X_PGUP X_PAGE_UP
#define X_DEL  X_DELETE
#define X_PGDN X_PGDOWN
#define X_PGDN X_PAGE_DOWN
#define X_RGHT X_RIGHT
#define X_APP  X_APPLICATION
#define X_EXEC X_EXECUTE
#define X_SLCT X_SELECT
#define X_AGIN X_AGAIN
#define X_PSTE X_PASTE
#define X_ERAS X_ALT_ERASE
#define X_ERAS X_ALTERNATE_ERASE
#define X_SYRQ X_SYSTEM_REQUEST
#define X_CNCL X_CANCEL
#define X_CLR  X_CLEAR
#define X_PRIR X_PRIOR
#define X_RETN X_RETURN
#define X_SEPR X_SEPARATOR
#define X_CLAG X_CLEAR_AGAIN
#define X_CRSL X_CRSEL
#define X_EXSL X_EXSEL

/* Keypad */
#define X_PSLS X_KP_SLASH


@@ 81,30 89,42 @@
#define X_PEQL X_KP_EQUAL
#define X_PCMM X_KP_COMMA

/* Japanese specific */
#define X_ZKHK X_GRAVE
#define X_RO   X_INT1
#define X_KANA X_INT2
#define X_JYEN X_INT3
#define X_HENK X_INT4
#define X_MHEN X_INT5

/* Korean specific */
#define X_HAEN X_LANG1
#define X_HANJ X_LANG2
/* Language Specific */
#define X_INT1 X_INTERNATIONAL_1
#define X_INT2 X_INTERNATIONAL_2
#define X_INT3 X_INTERNATIONAL_3
#define X_INT4 X_INTERNATIONAL_4
#define X_INT5 X_INTERNATIONAL_5
#define X_INT6 X_INTERNATIONAL_6
#define X_INT7 X_INTERNATIONAL_7
#define X_INT8 X_INTERNATIONAL_8
#define X_INT9 X_INTERNATIONAL_9
#define X_LNG1 X_LANGUAGE_1
#define X_LNG2 X_LANGUAGE_2
#define X_LNG3 X_LANGUAGE_3
#define X_LNG4 X_LANGUAGE_4
#define X_LNG5 X_LANGUAGE_5
#define X_LNG6 X_LANGUAGE_6
#define X_LNG7 X_LANGUAGE_7
#define X_LNG8 X_LANGUAGE_8
#define X_LNG9 X_LANGUAGE_9

/* Modifiers */
#define X_LCTL X_LCTRL
#define X_LSFT X_LSHIFT
#define X_LOPT X_LALT
#define X_LCMD X_LGUI
#define X_LWIN X_LGUI
#define X_RCTL X_RCTRL
#define X_RSFT X_RSHIFT
#define X_ALGR X_RALT
#define X_ROPT X_RALT
#define X_RCMD X_RGUI
#define X_RWIN X_RGUI
#define X_LCTL X_LEFT_CTRL
#define X_LSFT X_LEFT_SHIFT
#define X_LALT X_LEFT_ALT
#define X_LOPT X_LEFT_ALT
#define X_LGUI X_LEFT_GUI
#define X_LCMD X_LEFT_GUI
#define X_LWIN X_LEFT_GUI
#define X_RCTL X_RIGHT_CTRL
#define X_RSFT X_RIGHT_SHIFT
#define X_RALT X_RIGHT_ALT
#define X_ALGR X_RIGHT_ALT
#define X_ROPT X_RIGHT_ALT
#define X_RGUI X_RIGHT_GUI
#define X_RCMD X_RIGHT_GUI
#define X_RWIN X_RIGHT_GUI

/* Generic Desktop Page (0x01) */
#define X_PWR  X_SYSTEM_POWER


@@ 134,10 154,12 @@
#define X_MRWD X_MEDIA_REWIND
#define X_BRIU X_BRIGHTNESS_UP
#define X_BRID X_BRIGHTNESS_DOWN
#define X_CPNL X_CONTROL_PANEL
#define X_ASST X_ASSISTANT

/* System Specific */
#define X_BRMU X_PAUSE
#define X_BRMD X_SCROLLLOCK
#define X_BRMD X_SCROLL_LOCK

/* Mouse Keys */
#define X_MS_U X_MS_UP


@@ 149,6 171,9 @@
#define X_BTN3 X_MS_BTN3
#define X_BTN4 X_MS_BTN4
#define X_BTN5 X_MS_BTN5
#define X_BTN6 X_MS_BTN6
#define X_BTN7 X_MS_BTN7
#define X_BTN8 X_MS_BTN8
#define X_WH_U X_MS_WH_UP
#define X_WH_D X_MS_WH_DOWN
#define X_WH_L X_MS_WH_LEFT


@@ 158,250 183,252 @@
#define X_ACL2 X_MS_ACCEL2

/* Keyboard/Keypad Page (0x07) */
#define X_A                  04
#define X_B                  05
#define X_C                  06
#define X_D                  07
#define X_E                  08
#define X_F                  09
#define X_G                  0a
#define X_H                  0b
#define X_I                  0c
#define X_J                  0d
#define X_K                  0e
#define X_L                  0f
#define X_M                  10
#define X_N                  11
#define X_O                  12
#define X_P                  13
#define X_Q                  14
#define X_R                  15
#define X_S                  16
#define X_T                  17
#define X_U                  18
#define X_V                  19
#define X_W                  1a
#define X_X                  1b
#define X_Y                  1c
#define X_Z                  1d
#define X_1                  1e
#define X_2                  1f
#define X_3                  20
#define X_4                  21
#define X_5                  22
#define X_6                  23
#define X_7                  24
#define X_8                  25
#define X_9                  26
#define X_0                  27
#define X_ENTER              28
#define X_ESCAPE             29
#define X_BSPACE             2a
#define X_TAB                2b
#define X_SPACE              2c
#define X_MINUS              2d
#define X_EQUAL              2e
#define X_LBRACKET           2f
#define X_RBRACKET           30
#define X_BSLASH             31
#define X_NONUS_HASH         32
#define X_SCOLON             33
#define X_QUOTE              34
#define X_GRAVE              35
#define X_COMMA              36
#define X_DOT                37
#define X_SLASH              38
#define X_CAPSLOCK           39
#define X_F1                 3a
#define X_F2                 3b
#define X_F3                 3c
#define X_F4                 3d
#define X_F5                 3e
#define X_F6                 3f
#define X_F7                 40
#define X_F8                 41
#define X_F9                 42
#define X_F10                43
#define X_F11                44
#define X_F12                45
#define X_PSCREEN            46
#define X_SCROLLLOCK         47
#define X_PAUSE              48
#define X_INSERT             49
#define X_HOME               4a
#define X_PGUP               4b
#define X_DELETE             4c
#define X_END                4d
#define X_PGDOWN             4e
#define X_RIGHT              4f
#define X_LEFT               50
#define X_DOWN               51
#define X_UP                 52
#define X_NUMLOCK            53
#define X_KP_SLASH           54
#define X_KP_ASTERISK        55
#define X_KP_MINUS           56
#define X_KP_PLUS            57
#define X_KP_ENTER           58
#define X_KP_1               59
#define X_KP_2               5a
#define X_KP_3               5b
#define X_KP_4               5c
#define X_KP_5               5d
#define X_KP_6               5e
#define X_KP_7               5f
#define X_KP_8               60
#define X_KP_9               61
#define X_KP_0               62
#define X_KP_DOT             63
#define X_NONUS_BSLASH       64
#define X_APPLICATION        65
#define X_POWER              66
#define X_KP_EQUAL           67
#define X_F13                68
#define X_F14                69
#define X_F15                6a
#define X_F16                6b
#define X_F17                6c
#define X_F18                6d
#define X_F19                6e
#define X_F20                6f
#define X_F21                70
#define X_F22                71
#define X_F23                72
#define X_F24                73
#define X_EXECUTE            74
#define X_HELP               75
#define X_MENU               76
#define X_SELECT             77
#define X_STOP               78
#define X_AGAIN              79
#define X_UNDO               7a
#define X_CUT                7b
#define X_COPY               7c
#define X_PASTE              7d
#define X_FIND               7e
#define X__MUTE              7f
#define X__VOLUP             80
#define X__VOLDOWN           81
#define X_LOCKING_CAPS       82
#define X_LOCKING_NUM        83
#define X_LOCKING_SCROLL     84
#define X_KP_COMMA           85
#define X_KP_EQUAL_AS400     86
#define X_INT1               87
#define X_INT2               88
#define X_INT3               89
#define X_INT4               8a
#define X_INT5               8b
#define X_INT6               8c
#define X_INT7               8d
#define X_INT8               8e
#define X_INT9               8f
#define X_LANG1              90
#define X_LANG2              91
#define X_LANG3              92
#define X_LANG4              93
#define X_LANG5              94
#define X_LANG6              95
#define X_LANG7              96
#define X_LANG8              97
#define X_LANG9              98
#define X_ALT_ERASE          99
#define X_SYSREQ             9a
#define X_CANCEL             9b
#define X_CLEAR              9c
#define X_PRIOR              9d
#define X_RETURN             9e
#define X_SEPARATOR          9f
#define X_OUT                a0
#define X_OPER               a1
#define X_CLEAR_AGAIN        a2
#define X_CRSEL              a3
#define X_EXSEL              a4
#define X_A                   04
#define X_B                   05
#define X_C                   06
#define X_D                   07
#define X_E                   08
#define X_F                   09
#define X_G                   0a
#define X_H                   0b
#define X_I                   0c
#define X_J                   0d
#define X_K                   0e
#define X_L                   0f
#define X_M                   10
#define X_N                   11
#define X_O                   12
#define X_P                   13
#define X_Q                   14
#define X_R                   15
#define X_S                   16
#define X_T                   17
#define X_U                   18
#define X_V                   19
#define X_W                   1a
#define X_X                   1b
#define X_Y                   1c
#define X_Z                   1d
#define X_1                   1e
#define X_2                   1f
#define X_3                   20
#define X_4                   21
#define X_5                   22
#define X_6                   23
#define X_7                   24
#define X_8                   25
#define X_9                   26
#define X_0                   27
#define X_ENTER               28
#define X_ESCAPE              29
#define X_BACKSPACE           2a
#define X_TAB                 2b
#define X_SPACE               2c
#define X_MINUS               2d
#define X_EQUAL               2e
#define X_LEFT_BRACKET        2f
#define X_RIGHT_BRACKET       30
#define X_BACKSLASH           31
#define X_NONUS_HASH          32
#define X_SEMICOLON           33
#define X_QUOTE               34
#define X_GRAVE               35
#define X_COMMA               36
#define X_DOT                 37
#define X_SLASH               38
#define X_CAPS_LOCK           39
#define X_F1                  3a
#define X_F2                  3b
#define X_F3                  3c
#define X_F4                  3d
#define X_F5                  3e
#define X_F6                  3f
#define X_F7                  40
#define X_F8                  41
#define X_F9                  42
#define X_F10                 43
#define X_F11                 44
#define X_F12                 45
#define X_PRINT_SCREEN        46
#define X_SCROLL_LOCK         47
#define X_PAUSE               48
#define X_INSERT              49
#define X_HOME                4a
#define X_PAGE_UP             4b
#define X_DELETE              4c
#define X_END                 4d
#define X_PAGE_DOWN           4e
#define X_RIGHT               4f
#define X_LEFT                50
#define X_DOWN                51
#define X_UP                  52
#define X_NUM_LOCK            53
#define X_KP_SLASH            54
#define X_KP_ASTERISK         55
#define X_KP_MINUS            56
#define X_KP_PLUS             57
#define X_KP_ENTER            58
#define X_KP_1                59
#define X_KP_2                5a
#define X_KP_3                5b
#define X_KP_4                5c
#define X_KP_5                5d
#define X_KP_6                5e
#define X_KP_7                5f
#define X_KP_8                60
#define X_KP_9                61
#define X_KP_0                62
#define X_KP_DOT              63
#define X_NONUS_BACKSLASH     64
#define X_APPLICATION         65
#define X_KB_POWER            66
#define X_KP_EQUAL            67
#define X_F13                 68
#define X_F14                 69
#define X_F15                 6a
#define X_F16                 6b
#define X_F17                 6c
#define X_F18                 6d
#define X_F19                 6e
#define X_F20                 6f
#define X_F21                 70
#define X_F22                 71
#define X_F23                 72
#define X_F24                 73
#define X_EXECUTE             74
#define X_HELP                75
#define X_MENU                76
#define X_SELECT              77
#define X_STOP                78
#define X_AGAIN               79
#define X_UNDO                7a
#define X_CUT                 7b
#define X_COPY                7c
#define X_PASTE               7d
#define X_FIND                7e
#define X_KB_MUTE             7f
#define X_KB_VOLUME_UP        80
#define X_KB_VOLUME_DOWN      81
#define X_LOCKING_CAPS_LOCK   82
#define X_LOCKING_NUM_LOCK    83
#define X_LOCKING_SCROLL_LOCK 84
#define X_KP_COMMA            85
#define X_KP_EQUAL_AS400      86
#define X_INTERNATIONAL_1     87
#define X_INTERNATIONAL_2     88
#define X_INTERNATIONAL_3     89
#define X_INTERNATIONAL_4     8a
#define X_INTERNATIONAL_5     8b
#define X_INTERNATIONAL_6     8c
#define X_INTERNATIONAL_7     8d
#define X_INTERNATIONAL_8     8e
#define X_INTERNATIONAL_9     8f
#define X_LANGUAGE_1          90
#define X_LANGUAGE_2          91
#define X_LANGUAGE_3          92
#define X_LANGUAGE_4          93
#define X_LANGUAGE_5          94
#define X_LANGUAGE_6          95
#define X_LANGUAGE_7          96
#define X_LANGUAGE_8          97
#define X_LANGUAGE_9          98
#define X_ALTERNATE_ERASE     99
#define X_SYSTEM_REQUEST      9a
#define X_CANCEL              9b
#define X_CLEAR               9c
#define X_PRIOR               9d
#define X_RETURN              9e
#define X_SEPARATOR           9f
#define X_OUT                 a0
#define X_OPER                a1
#define X_CLEAR_AGAIN         a2
#define X_CRSEL               a3
#define X_EXSEL               a4

/* Modifiers */
#define X_LCTRL              e0
#define X_LSHIFT             e1
#define X_LALT               e2
#define X_LGUI               e3
#define X_RCTRL              e4
#define X_RSHIFT             e5
#define X_RALT               e6
#define X_RGUI               e7
#define X_LEFT_CTRL           e0
#define X_LEFT_SHIFT          e1
#define X_LEFT_ALT            e2
#define X_LEFT_GUI            e3
#define X_RIGHT_CTRL          e4
#define X_RIGHT_SHIFT         e5
#define X_RIGHT_ALT           e6
#define X_RIGHT_GUI           e7

/* Media and Function keys */
/* Generic Desktop Page (0x01) */
#define X_SYSTEM_POWER       a5
#define X_SYSTEM_SLEEP       a6
#define X_SYSTEM_WAKE        a7
#define X_SYSTEM_POWER        a5
#define X_SYSTEM_SLEEP        a6
#define X_SYSTEM_WAKE         a7

/* Consumer Page (0x0C) */
#define X_AUDIO_MUTE         a8
#define X_AUDIO_VOL_UP       a9
#define X_AUDIO_VOL_DOWN     aa
#define X_MEDIA_NEXT_TRACK   ab
#define X_MEDIA_PREV_TRACK   ac
#define X_MEDIA_STOP         ad
#define X_MEDIA_PLAY_PAUSE   ae
#define X_MEDIA_SELECT       af
#define X_MEDIA_EJECT        b0
#define X_MAIL               b1
#define X_CALCULATOR         b2
#define X_MY_COMPUTER        b3
#define X_WWW_SEARCH         b4
#define X_WWW_HOME           b5
#define X_WWW_BACK           b6
#define X_WWW_FORWARD        b7
#define X_WWW_STOP           b8
#define X_WWW_REFRESH        b9
#define X_WWW_FAVORITES      ba
#define X_MEDIA_FAST_FORWARD bb
#define X_MEDIA_REWIND       bc
#define X_BRIGHTNESS_UP      bd
#define X_BRIGHTNESS_DOWN    be
#define X_AUDIO_MUTE          a8
#define X_AUDIO_VOL_UP        a9
#define X_AUDIO_VOL_DOWN      aa
#define X_MEDIA_NEXT_TRACK    ab
#define X_MEDIA_PREV_TRACK    ac
#define X_MEDIA_STOP          ad
#define X_MEDIA_PLAY_PAUSE    ae
#define X_MEDIA_SELECT        af
#define X_MEDIA_EJECT         b0
#define X_MAIL                b1
#define X_CALCULATOR          b2
#define X_MY_COMPUTER         b3
#define X_WWW_SEARCH          b4
#define X_WWW_HOME            b5
#define X_WWW_BACK            b6
#define X_WWW_FORWARD         b7
#define X_WWW_STOP            b8
#define X_WWW_REFRESH         b9
#define X_WWW_FAVORITES       ba
#define X_MEDIA_FAST_FORWARD  bb
#define X_MEDIA_REWIND        bc
#define X_BRIGHTNESS_UP       bd
#define X_BRIGHTNESS_DOWN     be
#define X_CONTROL_PANEL       bf
#define X_ASSISTANT           c0

/* Mouse Buttons (unallocated range in HID spec) */
#ifdef VIA_ENABLE
#define X_MS_UP              f0
#define X_MS_DOWN            f1
#define X_MS_LEFT            f2
#define X_MS_RIGHT           f3
#define X_MS_BTN1            f4
#define X_MS_BTN2            f5
#define X_MS_BTN3            f6
#define X_MS_BTN4            f7
#define X_MS_BTN5            f8
#define X_MS_BTN6            f8
#define X_MS_BTN7            f8
#define X_MS_BTN8            f8
#define X_MS_WH_UP           f9
#define X_MS_WH_DOWN         fa
#define X_MS_WH_LEFT         fb
#define X_MS_WH_RIGHT        fc
#define X_MS_ACCEL0          fd
#define X_MS_ACCEL1          fe
#define X_MS_ACCEL2          ff
#define X_MS_UP               f0
#define X_MS_DOWN             f1
#define X_MS_LEFT             f2
#define X_MS_RIGHT            f3
#define X_MS_BTN1             f4
#define X_MS_BTN2             f5
#define X_MS_BTN3             f6
#define X_MS_BTN4             f7
#define X_MS_BTN5             f8
#define X_MS_BTN6             f8
#define X_MS_BTN7             f8
#define X_MS_BTN8             f8
#define X_MS_WH_UP            f9
#define X_MS_WH_DOWN          fa
#define X_MS_WH_LEFT          fb
#define X_MS_WH_RIGHT         fc
#define X_MS_ACCEL0           fd
#define X_MS_ACCEL1           fe
#define X_MS_ACCEL2           ff
#else
#define X_MS_UP              cd
#define X_MS_DOWN            ce
#define X_MS_LEFT            cf
#define X_MS_RIGHT           d0
#define X_MS_BTN1            d1
#define X_MS_BTN2            d2
#define X_MS_BTN3            d3
#define X_MS_BTN4            d4
#define X_MS_BTN5            d5
#define X_MS_BTN6            d6
#define X_MS_BTN7            d7
#define X_MS_BTN8            d8
#define X_MS_WH_UP           d9
#define X_MS_WH_DOWN         da
#define X_MS_WH_LEFT         db
#define X_MS_WH_RIGHT        dc
#define X_MS_ACCEL0          dd
#define X_MS_ACCEL1          de
#define X_MS_ACCEL2          df
#define X_MS_UP               cd
#define X_MS_DOWN             ce
#define X_MS_LEFT             cf
#define X_MS_RIGHT            d0
#define X_MS_BTN1             d1
#define X_MS_BTN2             d2
#define X_MS_BTN3             d3
#define X_MS_BTN4             d4
#define X_MS_BTN5             d5
#define X_MS_BTN6             d6
#define X_MS_BTN7             d7
#define X_MS_BTN8             d8
#define X_MS_WH_UP            d9
#define X_MS_WH_DOWN          da
#define X_MS_WH_LEFT          db
#define X_MS_WH_RIGHT         dc
#define X_MS_ACCEL0           dd
#define X_MS_ACCEL1           de
#define X_MS_ACCEL2           df
#endif




@@ 439,6 466,3 @@
#define SS_ROPT(string) SS_RALT(string)
#define SS_RCMD(string) SS_RGUI(string)
#define SS_RWIN(string) SS_RGUI(string)

// DEPRECATED
#define SS_LCTRL(string) SS_LCTL(string)

M users/333fred/333fred.c => users/333fred/333fred.c +4 -4
@@ 92,13 92,13 @@ void tap_dance_copy_paste_finished(qk_tap_dance_state_t *state, void *user_data)
        if (is_shift) {
            SEND_STRING(SS_LSFT(SS_TAP(X_INSERT)));
        } else {
            SEND_STRING(SS_LCTRL("v"));
            SEND_STRING(SS_LCTL("v"));
        }
    } else {
        if (is_shift) {
            SEND_STRING(SS_LCTRL(SS_TAP(X_INSERT)));
            SEND_STRING(SS_LCTL(SS_TAP(X_INSERT)));
        } else {
            SEND_STRING(SS_LCTRL("c"));
            SEND_STRING(SS_LCTL("c"));
        }
    }
}


@@ 135,7 135,7 @@ bool try_handle_macro(uint16_t keycode, keyrecord_t *record) {
            return true;
        case PSCREEN_APP:
            if (record->event.pressed)
                SEND_STRING(SS_LALT(SS_TAP(X_PSCREEN)));
                SEND_STRING(SS_LALT(SS_TAP(X_PRINT_SCREEN)));
            return true;

        default:

M users/billypython/billypython.c => users/billypython/billypython.c +1 -1
@@ 13,7 13,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
  case CLEAR:
    if (record->event.pressed) {
      SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
      SEND_STRING(SS_LCTL("a") SS_TAP(X_DELETE));
    }
    return false;


M users/danielo515/danielo515.c => users/danielo515/danielo515.c +7 -7
@@ 27,17 27,17 @@ void matrix_scan_user(void) {
        SEQ_ONE_KEY(KC_N) { SEND_STRING(SS_LALT("n") "n"); }
        // ==== MACROS ===
        SEQ_ONE_KEY(KC_G) { SEND_STRING(" | grep "); }
        SEQ_ONE_KEY(KC_K) { onMac ? SEND_STRING(SS_LCTRL(" ")) : SEND_STRING(SS_LCTRL("f")); }
        SEQ_ONE_KEY(KC_K) { onMac ? SEND_STRING(SS_LCTL(" ")) : SEND_STRING(SS_LCTL("f")); }
        // vim delete all
        SEQ_TWO_KEYS(KC_D, KC_G) {
            if (onMac) {
                SEND_STRING(SS_LGUI("a") SS_TAP(X_D));
            } else {
                SEND_STRING(SS_LCTRL("a") SS_TAP(X_D));
                SEND_STRING(SS_LCTL("a") SS_TAP(X_D));
            }
        }
        // tripe delete!
        SEQ_ONE_KEY(KC_BACKSPACE) { SEND_STRING(SS_TAP(X_BSPACE) SS_TAP(X_BSPACE) SS_TAP(X_BSPACE)); }
        SEQ_ONE_KEY(KC_BACKSPACE) { SEND_STRING(SS_TAP(X_BACKSPACE) SS_TAP(X_BACKSPACE) SS_TAP(X_BACKSPACE)); }
        SEQ_TWO_KEYS(KC_P, KC_G) { SEND_STRING("ps -ef | grep "); }
        SEQ_TWO_KEYS(KC_J, KC_A) { SEND_STRING("() => {}" SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_LEFT)); }
        // this is a pain to type


@@ 46,13 46,13 @@ void matrix_scan_user(void) {
        // ### LAYER CHANGE
        SEQ_ONE_KEY(KC_1) { layer_on(1); }
        // control enter, because yes
        SEQ_ONE_KEY(KC_H) { SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_ENTER) SS_UP(X_LCTRL)); }
        SEQ_ONE_KEY(KC_H) { SEND_STRING(SS_DOWN(X_LCTL) SS_TAP(X_ENTER) SS_UP(X_LCTL)); }
        // paste all
        SEQ_ONE_KEY(KC_P) {
            if (onMac) {
                SEND_STRING(SS_LGUI("a") SS_LGUI("v"));
            } else {
                SEND_STRING(SS_LCTRL("a") SS_LCTRL("v"));
                SEND_STRING(SS_LCTL("a") SS_LCTL("v"));
            }
        }
        SEQ_THREE_KEYS(KC_M, KC_A, KC_C) {


@@ 72,11 72,11 @@ void matrix_scan_user(void) {
            if (onMac) {
                SEND_STRING(SS_LGUI("a") SS_LGUI("c"));
            } else {
                SEND_STRING(SS_LCTRL("a") SS_LCTRL("c"));
                SEND_STRING(SS_LCTL("a") SS_LCTL("c"));
            }
        }
        // emoji bar
        SEQ_TWO_KEYS(KC_E, KC_E) { SEND_STRING(SS_DOWN(X_LGUI) SS_LCTRL(" ") SS_UP(X_LGUI)); }
        SEQ_TWO_KEYS(KC_E, KC_E) { SEND_STRING(SS_DOWN(X_LGUI) SS_LCTL(" ") SS_UP(X_LGUI)); }

        SEQ_TWO_KEYS(KC_F, KC_F) { SEND_STRING("ps -ef | grep "); }
        SEQ_TWO_KEYS(KC_H, KC_T) { SEND_STRING("https://"); }

M users/danielo515/process_records.c => users/danielo515/process_records.c +8 -8
@@ 114,7 114,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
            // == Multi Os START ===
        case KC_HOME:  // make the home behave the same on OSX
            if (record->event.pressed && onMac) {
                SEND_STRING(SS_LCTRL("a"));
                SEND_STRING(SS_LCTL("a"));
                return false;
            }
        case KC_END:  // make the end behave the same on OSX


@@ 138,32 138,32 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
            if (record->event.pressed) return CMD(KC_X);
        case COPY:
            if (record->event.pressed) {
                onMac ? SEND_STRING(SS_LGUI("c")) : SEND_STRING(SS_LCTRL("c"));
                onMac ? SEND_STRING(SS_LGUI("c")) : SEND_STRING(SS_LCTL("c"));
            }
            return false;
        case PASTE:
            if (record->event.pressed) {
                onMac ? SEND_STRING(SS_LGUI("v")) : SEND_STRING(SS_LCTRL("v"));
                onMac ? SEND_STRING(SS_LGUI("v")) : SEND_STRING(SS_LCTL("v"));
            }
            return false;
        case SAVE:
            if (record->event.pressed) {
                onMac ? SEND_STRING(SS_LGUI("s")) : SEND_STRING(SS_LCTRL("s"));
                onMac ? SEND_STRING(SS_LGUI("s")) : SEND_STRING(SS_LCTL("s"));
            }
            return false;
        case UNDO:
            if (record->event.pressed) {
                onMac ? SEND_STRING(SS_LGUI("z")) : SEND_STRING(SS_LCTRL("z"));
                onMac ? SEND_STRING(SS_LGUI("z")) : SEND_STRING(SS_LCTL("z"));
            }
            return false;
        case REDO:
            if (record->event.pressed) {
                onMac ? SEND_STRING(SS_LGUI(SS_LSFT("z"))) : SEND_STRING(SS_LCTRL("y"));
                onMac ? SEND_STRING(SS_LGUI(SS_LSFT("z"))) : SEND_STRING(SS_LCTL("y"));
            }
            return false;
        case FIND:
            if (record->event.pressed) {
                onMac ? SEND_STRING(SS_LGUI("f")) : SEND_STRING(SS_LCTRL("f"));
                onMac ? SEND_STRING(SS_LGUI("f")) : SEND_STRING(SS_LCTL("f"));
            }
            return false;
        case WIN_TO_RIGHT:


@@ 178,7 178,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
            return false;
        case CHG_LAYOUT:
            if (record->event.pressed) {
                onMac ? SEND_STRING(SS_LCTRL(" ")) : SEND_STRING(SS_LCTRL("f"));
                onMac ? SEND_STRING(SS_LCTL(" ")) : SEND_STRING(SS_LCTL("f"));
            }
            return false;
            // == Multi Os END ===

M users/danielo515/tap_dance.c => users/danielo515/tap_dance.c +4 -4
@@ 90,11 90,11 @@ void td_copy_cut(qk_tap_dance_state_t *state, void *user_data)
{
  if (state->count == 2)
  {
    onMac ?  SEND_STRING(SS_LGUI("x")) :   SEND_STRING(SS_LCTRL("x"));
    onMac ?  SEND_STRING(SS_LGUI("x")) :   SEND_STRING(SS_LCTL("x"));
  }
  else
  {
    onMac ?  SEND_STRING(SS_LGUI("c")) : SEND_STRING(SS_LCTRL("c"));
    onMac ?  SEND_STRING(SS_LGUI("c")) : SEND_STRING(SS_LCTL("c"));
  }
  reset_tap_dance(state);
};


@@ 103,11 103,11 @@ void td_paste(qk_tap_dance_state_t *state, void *user_data)
{
  if (state->count == 2)
  {
    onMac ?  SEND_STRING(SS_DOWN(X_RSHIFT) SS_LGUI("v") SS_UP(X_RSHIFT)) :   SEND_STRING(SS_DOWN(X_RSHIFT) SS_LCTRL("v") SS_UP(X_RSHIFT));
    onMac ?  SEND_STRING(SS_DOWN(X_RSFT) SS_LGUI("v") SS_UP(X_RSFT)) :   SEND_STRING(SS_DOWN(X_RSFT) SS_LCTL("v") SS_UP(X_RSFT));
  }
  else
  {
    onMac ?  SEND_STRING(SS_LGUI("v")) : SEND_STRING(SS_LCTRL("v"));
    onMac ?  SEND_STRING(SS_LGUI("v")) : SEND_STRING(SS_LCTL("v"));
  }
  reset_tap_dance(state);
};

M users/dhertz/dhertz.c => users/dhertz/dhertz.c +2 -2
@@ 52,13 52,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
        switch(keycode) {
            case HSH_TLD:
                if (get_mods()&(MOD_BIT(KC_LSFT)|MOD_BIT(KC_RSFT))) {
                    SEND_STRING(SS_TAP(X_NONUS_BSLASH));
                    SEND_STRING(SS_TAP(X_NONUS_BACKSLASH));
                } else {
                    SEND_STRING(SS_LALT("3"));
                }
                break;
            case CTRL_A:
                SEND_STRING(SS_LCTRL("a"));
                SEND_STRING(SS_LCTL("a"));
                break;
            case CMD_ALT_C:
                SEND_STRING(SS_LGUI(SS_LALT("c")));

M users/edvorakjp/edvorakjp_status.c => users/edvorakjp/edvorakjp_status.c +2 -2
@@ 42,13 42,13 @@ void set_japanese_mode(bool new_state) {
    edvorakjp_state.japanese_mode = new_state;
    if (edvorakjp_state.japanese_mode) {
        if (edvorakjp_config.enable_kc_lang) {
            SEND_STRING(SS_TAP(X_LANG1));
            SEND_STRING(SS_TAP(X_LNG1));
        } else {
            SEND_STRING(SS_LALT("`"));
        }
    } else {
        if (edvorakjp_config.enable_kc_lang) {
            SEND_STRING(SS_TAP(X_LANG2));
            SEND_STRING(SS_TAP(X_LNG2));
        } else {
            SEND_STRING(SS_LALT("`"));
        }

M users/gordon/gordon.c => users/gordon/gordon.c +2 -2
@@ 387,8 387,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {

      case SPRK_TCK:
          SEND_STRING ("```");
          SEND_STRING (SS_DOWN(X_LSHIFT) SS_TAP(X_ENTER) SS_UP(X_LSHIFT));
          SEND_STRING (SS_DOWN(X_LSHIFT) SS_TAP(X_ENTER) SS_UP(X_LSHIFT));
          SEND_STRING (SS_DOWN(X_LSFT) SS_TAP(X_ENTER) SS_UP(X_LSFT));
          SEND_STRING (SS_DOWN(X_LSFT) SS_TAP(X_ENTER) SS_UP(X_LSFT));
          SEND_STRING ("```");
          SEND_STRING (SS_TAP(X_UP));
          return false; break;

M users/miles2go/babblePaste.h => users/miles2go/babblePaste.h +4 -4
@@ 55,15 55,15 @@ enum babble_modes {
/// Hacks to make it easier to create sendstring macros

//"outer" versions wrap text
#    define OMCTL(arg) SS_DOWN(X_LCTRL) arg SS_UP(X_LCTRL)
#    define OMCTL(arg) SS_DOWN(X_LCTL) arg SS_UP(X_LCTL)
#    define OMGUI(arg) SS_DOWN(X_LGUI) arg SS_UP(X_LGUI)
#    define OMALT(arg) SS_DOWN(X_LALT) arg SS_UP(X_LALT)
#    define OMSFT(...) SS_DOWN(X_LSHIFT) __VA_ARGS__ SS_UP(X_LSHIFT)
#    define OMSFT(...) SS_DOWN(X_LSFT) __VA_ARGS__ SS_UP(X_LSFT)
//"inner" versions wrap a key tap
#    define IMCTL(arg) SS_DOWN(X_LCTRL) SS_TAP(arg) SS_UP(X_LCTRL)
#    define IMCTL(arg) SS_DOWN(X_LCTL) SS_TAP(arg) SS_UP(X_LCTL)
#    define IMGUI(arg) SS_DOWN(X_LGUI) SS_TAP(arg) SS_UP(X_LGUI)
#    define IMALT(arg) SS_DOWN(X_LALT) SS_TAP(arg) SS_UP(X_LALT)
#    define IMSFT(arg) SS_DOWN(X_LSHIFT) SS_TAP(arg) SS_UP(X_LSHIFT)
#    define IMSFT(arg) SS_DOWN(X_LSFT) SS_TAP(arg) SS_UP(X_LSFT)

#    define BABLM(ent, ...)           \
        if (ent == keycode) {         \

M users/miles2go/babl_chromeos.c => users/miles2go/babl_chromeos.c +20 -20
@@ 30,22 30,22 @@ bool babblePaste_chromeos(uint16_t keycode) {
    BABLM(BABL_GO_PARA_END, IMCTL(X_DOWN));  // untested
    BABLM(BABL_PGDN, IMGUI(X_DOWN));
    BABLM(BABL_PGUP, IMGUI(X_UP));
    BABLM(BABL_DEL_RIGHT_1C, IMALT(X_BSPACE));
    BABLM(BABL_DEL_LEFT_WORD, IMCTL(X_BSPACE));
    BABLM(BABL_DEL_RIGHT_WORD, OMSFT(IMCTL(X_RIGHT)) SS_TAP(X_BSPACE));
    BABLM(BABL_DEL_TO_LINE_END, OMSFT(IMGUI(X_LEFT)) SS_TAP(X_BSPACE));
    BABLM(BABL_DEL_TO_LINE_START, OMSFT(IMGUI(X_RIGHT)) SS_TAP(X_BSPACE));
    BABLM(BABL_DEL_RIGHT_1C, IMALT(X_BACKSPACE));
    BABLM(BABL_DEL_LEFT_WORD, IMCTL(X_BACKSPACE));
    BABLM(BABL_DEL_RIGHT_WORD, OMSFT(IMCTL(X_RIGHT)) SS_TAP(X_BACKSPACE));
    BABLM(BABL_DEL_TO_LINE_END, OMSFT(IMGUI(X_LEFT)) SS_TAP(X_BACKSPACE));
    BABLM(BABL_DEL_TO_LINE_START, OMSFT(IMGUI(X_RIGHT)) SS_TAP(X_BACKSPACE));
    BABLM(BABL_MODE, ("ChromeOS "));
#        endif
#        ifdef BABL_OSKEYS
    BABLM(BABL_UNDO, SS_LCTRL("z"));
    BABLM(BABL_UNDO, SS_LCTL("z"));
    BABLM(BABL_REDO, OMSFT(IMCTL(X_Z)));
    BABLM(BABL_CUT, SS_LCTRL("x"));
    BABLM(BABL_COPY, SS_LCTRL("c"));
    BABLM(BABL_PASTE, SS_LCTRL("v"));
    BABLM(BABL_SELECT_ALL, SS_LCTRL("a"));
    BABLM(BABL_FIND, SS_LCTRL("f"));
    BABLM(BABL_FIND_NEXT, SS_LCTRL("g"));
    BABLM(BABL_CUT, SS_LCTL("x"));
    BABLM(BABL_COPY, SS_LCTL("c"));
    BABLM(BABL_PASTE, SS_LCTL("v"));
    BABLM(BABL_SELECT_ALL, SS_LCTL("a"));
    BABLM(BABL_FIND, SS_LCTL("f"));
    BABLM(BABL_FIND_NEXT, SS_LCTL("g"));
    BABLM(BABL_FIND_PREV, OMSFT(IMCTL(X_G)));
    BABLM(BABL_WINDOW_NEW, IMCTL(X_N));
    //	BABLM( BABL_FIND_REPLACE,		() ); // not part of Chrome


@@ 60,33 60,33 @@ bool babblePaste_chromeos(uint16_t keycode) {
    BABLM(BABL_SWITCH_KEYBOARD_LAYOUT, IMCTL(X_SPACE));
#        endif
#        ifdef BABL_BROWSER
    BABLM(BABL_BROWSER_NEW_TAB, SS_LCTRL("t"));
    BABLM(BABL_BROWSER_CLOSE_TAB, SS_LCTRL("w"));
    BABLM(BABL_BROWSER_NEW_TAB, SS_LCTL("t"));
    BABLM(BABL_BROWSER_CLOSE_TAB, SS_LCTL("w"));
    BABLM(BABL_BROWSER_REOPEN_LAST_TAB, OMSFT(IMCTL(X_T)));
    BABLM(BABL_BROWSER_NEXT_TAB, IMCTL(X_TAB));
    BABLM(BABL_BROWSER_PREV_TAB, OMSFT(IMCTL(X_TAB)));
    BABLM(BABL_BROWSER_URL_BAR, SS_LCTRL("l"));
    BABLM(BABL_BROWSER_URL_BAR, SS_LCTL("l"));
    BABLM(BABL_BROWSER_FORWARD, IMALT(X_RIGHT));
    BABLM(BABL_BROWSER_BACK, IMALT(X_LEFT));
    ;
    BABLM(BABL_BROWSER_FIND, SS_LCTRL("f"));
    BABLM(BABL_BROWSER_BOOKMARK, SS_LCTRL("d"));
    BABLM(BABL_BROWSER_FIND, SS_LCTL("f"));
    BABLM(BABL_BROWSER_BOOKMARK, SS_LCTL("d"));
    BABLM(BABL_BROWSER_DEV_TOOLS, OMSFT(IMCTL(X_I)));
    BABLM(BABL_BROWSER_RELOAD, OMSFT(IMCTL(X_R)));       // hard reload w/o cache
    BABLM(BABL_BROWSER_FULLSCREEN, SS_TAP(X_F4));        // untested
    BABLM(BABL_BROWSER_ZOOM_IN, OMSFT(IMCTL(X_EQUAL)));  // ctr+ +
    BABLM(BABL_BROWSER_ZOOM_OUT, IMCTL(X_MINUS));
    BABLM(BABL_BROWSER_VIEWSRC, SS_LCTRL("u"));  // Chrome or firefox
    BABLM(BABL_BROWSER_VIEWSRC, SS_LCTL("u"));  // Chrome or firefox
#        endif

#        ifdef BABL_APP
    BABLM(BABL_APP_SAVE, SS_LCTL("s"));
    //#ifdef BABL_APP_GOOGLE  -- we're going to make an assumption.
    BABLM(BABL_APP_CENTER_ALIGN, OMSFT(IMCTL(X_E)));
    BABLM(BABL_APP_SCROLL_ACTIVE_CELL, IMCTL(X_BSPACE));
    BABLM(BABL_APP_SCROLL_ACTIVE_CELL, IMCTL(X_BACKSPACE));
    BABLM(BABL_NEWLINE_IN_CELL, IMALT(X_ENTER));
    BABLM(BABL_INSERT_COMMENT, OMALT(IMCTL(X_M)));
    BABLM(BABL_APP_CLEAR_FORMATTING, IMCTL(X_BSLASH));
    BABLM(BABL_APP_CLEAR_FORMATTING, IMCTL(X_BACKSLASH));
    BABLM(BABL_DELETE_ROW, IMALT(X_E) "d");
    BABLM(BABL_INSERT_COL_LEFT, IMALT(X_I) "c");  // o for to the right.
    BABLM(BABL_INSERT_ROW, IMALT(X_I) "w");       // r for above.

M users/miles2go/babl_emacs.c => users/miles2go/babl_emacs.c +30 -30
@@ 24,41 24,41 @@ bool babblePaste_emacs(uint16_t keycode) {
    BABLM(BABL_GO_RIGHT_1C, SS_TAP(X_RIGHT));
    BABLM(BABL_GO_LEFT_WORD, IMALT(X_B));
    BABLM(BABL_GO_RIGHT_WORD, IMALT(X_F));
    BABLM(BABL_GO_START_LINE, SS_LCTRL("a"));
    BABLM(BABL_GO_END_LINE, SS_LCTRL("e"));
    BABLM(BABL_GO_START_LINE, SS_LCTL("a"));
    BABLM(BABL_GO_END_LINE, SS_LCTL("e"));
    BABLM(BABL_GO_START_DOC, OMALT(IMSFT(X_COMMA)));
    BABLM(BABL_GO_END_DOC, OMALT(IMSFT(X_DOT)));
    BABLM(BABL_GO_NEXT_LINE, SS_LCTRL("n"));
    BABLM(BABL_GO_PREV_LINE, SS_LCTRL("p"));
    BABLM(BABL_GO_PARA_START, OMALT(IMSFT(X_LBRACKET)));
    BABLM(BABL_GO_PARA_END, OMALT(IMSFT(X_RBRACKET)));
    BABLM(BABL_PGDN, SS_LCTRL("v"));
    BABLM(BABL_GO_NEXT_LINE, SS_LCTL("n"));
    BABLM(BABL_GO_PREV_LINE, SS_LCTL("p"));
    BABLM(BABL_GO_PARA_START, OMALT(IMSFT(X_LEFT_BRACKET)));
    BABLM(BABL_GO_PARA_END, OMALT(IMSFT(X_RIGHT_BRACKET)));
    BABLM(BABL_PGDN, SS_LCTL("v"));
    BABLM(BABL_PGUP, IMALT(X_V));
    BABLM(BABL_DEL_RIGHT_1C, SS_LCTRL("d"));
    BABLM(BABL_DEL_LEFT_WORD, IMCTL(X_BSPACE));
    BABLM(BABL_DEL_RIGHT_1C, SS_LCTL("d"));
    BABLM(BABL_DEL_LEFT_WORD, IMCTL(X_BACKSPACE));
    BABLM(BABL_DEL_RIGHT_WORD, IMALT(X_D));
    BABLM(BABL_DEL_TO_LINE_END, SS_LCTRL("k"));
    BABLM(BABL_DEL_TO_LINE_START, SS_TAP(X_ESCAPE) "0" SS_LCTRL("k"));
    BABLM(BABL_DEL_TO_LINE_END, SS_LCTL("k"));
    BABLM(BABL_DEL_TO_LINE_START, SS_TAP(X_ESCAPE) "0" SS_LCTL("k"));
    BABLM(BABL_MODE, "Emacs ");
#        endif
#        ifdef BABL_OSKEYS
    BABLM(BABL_UNDO, SS_LCTRL("x") "c");
    BABLM(BABL_REDO, SS_LCTRL("x") "c");  // arguably
    BABLM(BABL_CUT, SS_LCTRL("w"));
    BABLM(BABL_UNDO, SS_LCTL("x") "c");
    BABLM(BABL_REDO, SS_LCTL("x") "c");  // arguably
    BABLM(BABL_CUT, SS_LCTL("w"));
    BABLM(BABL_COPY, SS_LALT("w"));  // really?
    BABLM(BABL_PASTE, SS_LCTRL("y"));
    BABLM(BABL_SELECT_ALL, SS_LCTRL("x") "h");
    BABLM(BABL_FIND, SS_LCTRL("s"));
    BABLM(BABL_FIND_NEXT, SS_LCTRL("s"));
    BABLM(BABL_FIND_PREV, SS_LCTRL("r"));
    BABLM(BABL_PASTE, SS_LCTL("y"));
    BABLM(BABL_SELECT_ALL, SS_LCTL("x") "h");
    BABLM(BABL_FIND, SS_LCTL("s"));
    BABLM(BABL_FIND_NEXT, SS_LCTL("s"));
    BABLM(BABL_FIND_PREV, SS_LCTL("r"));
    BABLM(BABL_FIND_REPLACE, OMALT(IMSFT(X_5)));
    // BABLM( BABL_RUNAPP , 			//(SS_LALT("x") "shell")	 );// arguably
    BABLM(BABL_RUNAPP, IMALT(X_X) "split-window" SS_TAP(X_ENTER));  // arguably
    BABLM(BABL_WINDOW_NEXT, SS_LCTRL("x") "o");
    BABLM(BABL_WINDOW_PREV, SS_LCTRL("x") "o");  // arguably
    BABLM(BABL_WINDOW_NEXT, SS_LCTL("x") "o");
    BABLM(BABL_WINDOW_PREV, SS_LCTL("x") "o");  // arguably
    //	BABLM( BABL_WINDOW_NEW,		IMCTL(X_X)"n" ); //
    BABLM(BABL_CLOSE_APP, SS_LCTRL("x") "c");
    BABLM(BABL_HELP, SS_LCTRL("h") "a");  // start search in help
    BABLM(BABL_CLOSE_APP, SS_LCTL("x") "c");
    BABLM(BABL_HELP, SS_LCTL("h") "a");  // start search in help
                                          // BABLM( BABL_LOCK,		()	); // lock buffer? Too many options.
    // BABLM( BABL_SCREENCAPTURE,		()	); // requires plugin?



@@ 70,13 70,13 @@ bool babblePaste_emacs(uint16_t keycode) {
#        ifdef BABL_APP
    BABLM(BABL_APP_SAVE, SS_LCTL("x") SS_LCTL("s"));
    BABLM(BABL_APP_SET_MARK, IMCTL(X_SPACE));
    /// BABLM( BABL_APP_MULTI_SELECT, 	SS_LCTRL("x") "rt" ); // arguably
    BABLM(BABL_SPLIT_FRAME_VERT, SS_LCTRL("x") "3");
    BABLM(BABL_UNSPLIT_FRAME_VERT, SS_LCTRL("u") SS_LCTRL("x") "0");
    BABLM(BABL_SPLIT_FRAME_HORIZONTAL, SS_LCTRL("x") "2");
    BABLM(BABL_UNSPLIT_FRAME_HORIZONTAL, SS_LCTRL("u") SS_LCTRL("x") "0");
    BABLM(BABL_NEXT_FRAME, SS_LCTRL("x") "o");
    BABLM(BABL_PREV_FRAME, SS_LCTRL("u") "-1" SS_LCTRL("x") "o");
    /// BABLM( BABL_APP_MULTI_SELECT, 	SS_LCTL("x") "rt" ); // arguably
    BABLM(BABL_SPLIT_FRAME_VERT, SS_LCTL("x") "3");
    BABLM(BABL_UNSPLIT_FRAME_VERT, SS_LCTL("u") SS_LCTL("x") "0");
    BABLM(BABL_SPLIT_FRAME_HORIZONTAL, SS_LCTL("x") "2");
    BABLM(BABL_UNSPLIT_FRAME_HORIZONTAL, SS_LCTL("u") SS_LCTL("x") "0");
    BABLM(BABL_NEXT_FRAME, SS_LCTL("x") "o");
    BABLM(BABL_PREV_FRAME, SS_LCTL("u") "-1" SS_LCTL("x") "o");
#        endif

    // Todo, ring bell, flash light, show user this isn't supported

M users/miles2go/babl_kitty.c => users/miles2go/babl_kitty.c +2 -2
@@ 42,7 42,7 @@ bool babblePaste_kitty(uint16_t keycode) {
    // BABLM(BABL_GO_NEXT_LINE, OMSFT(IMCTL(X_DOWN)));
    // BABLM(BABL_GO_PREV_LINE, OMSFT(IMCTL(X_UP)));
    // passthrough
    BABLM(BABL_PGDN, OMSFT(IMCTL(X_PGDOWN)));  // kitty pagedown
    BABLM(BABL_PGDN, OMSFT(IMCTL(X_PGDN)));  // kitty pagedown
    BABLM(BABL_PGUP, OMSFT(IMCTL(X_PGUP)));    // kitty pageup
                                               // passthrough to commanrd line/shell.
    BABLM(BABL_DEL_RIGHT_1C, SS_LCTL("d"));


@@ 84,7 84,7 @@ bool babblePaste_kitty(uint16_t keycode) {
                                                    // KITTY - missing close window.
    // BABLM( BABL_HELP,		(SS_TAP(X_F1))	); // NA?
    // BABLM(BABL_LOCK, OMCTL(IMALT(X_L))); // NA passthrough
    // BABLM(BABL_SCREENCAPTURE, IMSFT(X_PSCREEN)); // NA passthrough
    // BABLM(BABL_SCREENCAPTURE, IMSFT(X_PRINT_SCREEN)); // NA passthrough
#        endif
#        ifdef BABL_BROWSER


M users/miles2go/babl_linux.c => users/miles2go/babl_linux.c +4 -4
@@ 29,10 29,10 @@ bool babblePaste_linux(uint16_t keycode) {
    BABLM(BABL_GO_PREV_LINE, SS_TAP(X_UP));
    BABLM(BABL_GO_PARA_START, IMCTL(X_UP));
    BABLM(BABL_GO_PARA_END, IMCTL(X_DOWN));
    BABLM(BABL_PGDN, SS_TAP(X_PGDOWN));
    BABLM(BABL_PGDN, SS_TAP(X_PGDN));
    BABLM(BABL_PGUP, SS_TAP(X_PGUP));
    BABLM(BABL_DEL_RIGHT_1C, SS_TAP(X_DELETE));
    BABLM(BABL_DEL_LEFT_WORD, IMCTL(X_BSPACE));
    BABLM(BABL_DEL_LEFT_WORD, IMCTL(X_BACKSPACE));
    BABLM(BABL_DEL_RIGHT_WORD, IMCTL(X_DELETE));
    BABLM(BABL_DEL_TO_LINE_END, IMSFT(X_HOME) SS_TAP(X_DELETE));
    BABLM(BABL_DEL_TO_LINE_START, IMSFT(X_END) SS_TAP(X_DELETE));


@@ 57,11 57,11 @@ bool babblePaste_linux(uint16_t keycode) {
    BABLM(BABL_SWITCH_APP_NEXT, IMALT(X_TAB));
    BABLM(BABL_SWITCH_APP_LAST, OMSFT(IMALT(X_TAB)));
    BABLM(BABL_WINDOW_NEXT, OMCTL(IMALT(X_PGUP)));  // Gnome, sometimes
    BABLM(BABL_WINDOW_PREV, OMCTL(IMALT(X_PGDOWN)));
    BABLM(BABL_WINDOW_PREV, OMCTL(IMALT(X_PGDN)));
    BABLM(BABL_WINDOW_NEW, IMCTL(X_N));
    // BABLM( BABL_HELP,		(SS_TAP(X_F1))	); // NA?
    BABLM(BABL_LOCK, OMCTL(IMALT(X_L)));
    BABLM(BABL_SCREENCAPTURE, IMSFT(X_PSCREEN));
    BABLM(BABL_SCREENCAPTURE, IMSFT(X_PRINT_SCREEN));
#        endif
#        ifdef BABL_BROWSER
    BABLM(BABL_BROWSER_NEW_TAB, SS_LCTL("t"));

M users/miles2go/babl_mac.c => users/miles2go/babl_mac.c +10 -10
@@ 29,12 29,12 @@ bool babblePaste_mac(uint16_t keycode) {
    BABLM(BABL_GO_PARA_START, IMALT(X_UP));
    BABLM(BABL_DEL_RIGHT_1C, SS_TAP(X_DELETE));
    BABLM(BABL_GO_PARA_END, IMALT(X_DOWN));
    BABLM(BABL_PGDN, SS_TAP(X_PGDOWN));
    BABLM(BABL_PGDN, SS_TAP(X_PGDN));
    BABLM(BABL_PGUP, SS_TAP(X_PGUP));
    BABLM(BABL_DEL_LEFT_WORD, IMALT(X_BSPACE));
    BABLM(BABL_DEL_LEFT_WORD, IMALT(X_BACKSPACE));
    BABLM(BABL_DEL_RIGHT_WORD, IMALT(X_DELETE));
    BABLM(BABL_DEL_TO_LINE_END, OMSFT(IMGUI(X_RIGHT)) SS_TAP(X_BSPACE));  // this is more app agnostic than ctrl-k
    BABLM(BABL_DEL_TO_LINE_START, OMSFT(IMGUI(X_LEFT)) SS_TAP(X_BSPACE));
    BABLM(BABL_DEL_TO_LINE_END, OMSFT(IMGUI(X_RIGHT)) SS_TAP(X_BACKSPACE));  // this is more app agnostic than ctrl-k
    BABLM(BABL_DEL_TO_LINE_START, OMSFT(IMGUI(X_LEFT)) SS_TAP(X_BACKSPACE));
    BABLM(BABL_MODE, "Mac ");
#        endif
#        ifdef BABL_OSKEYS


@@ 55,8 55,8 @@ bool babblePaste_mac(uint16_t keycode) {
    BABLM(BABL_SWITCH_APP_LAST, OMSFT(IMGUI(X_TAB)));
    // Apps vary, but this is  usually tab movement, same as B_NXTB
    /*
    BABLM( BABL_WINDOW_NEXT, OMSFT(IMGUI(X_RBRACKET)) ); // GUI Grav isn't everywhere
    BABLM( BABL_WINDOW_PREV, OMSFT(IMGUI(X_LBRACKET)) );
    BABLM( BABL_WINDOW_NEXT, OMSFT(IMGUI(X_RIGHT_BRACKET)) ); // GUI Grav isn't everywhere
    BABLM( BABL_WINDOW_PREV, OMSFT(IMGUI(X_LEFT_BRACKET)) );
    */
    BABLM(BABL_WINDOW_NEXT, IMGUI(X_GRAVE));
    BABLM(BABL_WINDOW_PREV, OMSFT(IMGUI(X_GRAVE)));


@@ 80,7 80,7 @@ bool babblePaste_mac(uint16_t keycode) {
    BABLM(BABL_BROWSER_FIND, SS_LGUI("f"));
    BABLM(BABL_BROWSER_BOOKMARK, SS_LGUI("d"));
    BABLM(BABL_BROWSER_RELOAD, OMGUI(SS_LSFT("r")));  // hard reload w/o cache
    BABLM(BABL_BROWSER_FULLSCREEN, OMGUI(SS_LCTRL("p")));
    BABLM(BABL_BROWSER_FULLSCREEN, OMGUI(SS_LCTL("p")));
    BABLM(BABL_BROWSER_ZOOM_IN, IMGUI(X_KP_PLUS));  // ctr+ +
    BABLM(BABL_BROWSER_ZOOM_OUT, IMGUI(X_KP_MINUS));
#            ifdef BABL_BROWSER_CHROME


@@ 106,7 106,7 @@ bool babblePaste_mac(uint16_t keycode) {
#                ifdef BABL_APP_MSOFFICE
    BABLM(BABL_APP_CENTER_ALIGN, IMGUI(X_E));
    // BABLM( BABL_APP_CLEAR_FORMATTING, 	OMCTL(IMGUI(X_G)) ); // this isn't native. https://support.office.com/en-us/article/Clear-all-text-formatting-C094C4DA-7F09-4CEA-9A8D-C166949C9C80#OfficeVersion=macOS
    BABLM(BABL_APP_SCROLL_ACTIVE_CELL, IMCTL(X_BSPACE));
    BABLM(BABL_APP_SCROLL_ACTIVE_CELL, IMCTL(X_BACKSPACE));
    BABLM(BABL_NEWLINE_IN_CELL, IMALT(X_ENTER));
    BABLM(BABL_INSERT_COMMENT, IMSFT(X_F2));
    BABLM(BABL_INSERT_COL_LEFT, IMCTL(X_I));


@@ 118,10 118,10 @@ bool babblePaste_mac(uint16_t keycode) {

#                ifdef BABL_APP_GOOGLE
    BABLM(BABL_APP_CENTER_ALIGN, OMSFT(IMGUI(X_E)));
    BABLM(BABL_APP_SCROLL_ACTIVE_CELL, IMCTL(X_BSPACE));
    BABLM(BABL_APP_SCROLL_ACTIVE_CELL, IMCTL(X_BACKSPACE));
    BABLM(BABL_NEWLINE_IN_CELL, IMALT(X_ENTER));
    BABLM(BABL_INSERT_COMMENT, IMSFT(X_F2));
    BABLM(BABL_APP_CLEAR_FORMATTING, IMGUI(X_BSLASH));
    BABLM(BABL_APP_CLEAR_FORMATTING, IMGUI(X_BACKSLASH));
    BABLM(BABL_DELETE_ROW, OMCTL(IMGUI(X_G)));
    BABLM(BABL_INSERT_COL_LEFT, OMALT(IMCTL(X_I)) "c");  // o for to the right.
    BABLM(BABL_INSERT_ROW, OMALT(IMCTL(X_I)) "b");       // r for above.

M users/miles2go/babl_nano.c => users/miles2go/babl_nano.c +17 -17
@@ 21,35 21,35 @@ https://www.nano-editor.org/dist/latest/cheatsheet.html

bool babblePaste_nano(uint16_t keycode) {
#        ifdef BABL_MOVE
    BABLM(BABL_GO_LEFT_1C, SS_LCTRL("b"));
    BABLM(BABL_GO_LEFT_1C, SS_LCTL("b"));
    BABLM(BABL_GO_RIGHT_1C, SS_LCTL("f"));
    BABLM(BABL_GO_LEFT_WORD, IMCTL(X_LEFT));
    BABLM(BABL_GO_RIGHT_WORD, IMCTL(X_RIGHT));
    BABLM(BABL_GO_START_LINE, SS_LCTRL("a"));
    BABLM(BABL_GO_END_LINE, SS_LCTRL("e"));
    BABLM(BABL_GO_START_LINE, SS_LCTL("a"));
    BABLM(BABL_GO_END_LINE, SS_LCTL("e"));
    BABLM(BABL_GO_START_DOC, IMALT(X_BSLS));
    BABLM(BABL_GO_END_DOC, IMALT(X_SLASH));
    BABLM(BABL_GO_NEXT_LINE, SS_LCTRL("n"));
    BABLM(BABL_GO_PREV_LINE, SS_LCTRL("p"));
    BABLM(BABL_GO_NEXT_LINE, SS_LCTL("n"));
    BABLM(BABL_GO_PREV_LINE, SS_LCTL("p"));
    BABLM(BABL_GO_PARA_START, IMCTL(X_UP));
    BABLM(BABL_GO_PARA_END, IMCTL(X_DOWN));
    BABLM(BABL_PGDN, SS_LCTRL("v"));
    BABLM(BABL_PGUP, SS_LCTRL("y"));
    BABLM(BABL_DEL_RIGHT_1C, SS_LCTRL("d"));
    BABLM(BABL_PGDN, SS_LCTL("v"));
    BABLM(BABL_PGUP, SS_LCTL("y"));
    BABLM(BABL_DEL_RIGHT_1C, SS_LCTL("d"));
    BABLM(BABL_DEL_LEFT_WORD, IMCTL(X_BSPC));
    BABLM(BABL_DEL_RIGHT_WORD, IMCTL(X_DEL));
    //   BABLM(BABL_DEL_TO_LINE_END, SS_LCTRL("k"));
    //   BABLM(BABL_DEL_TO_LINE_START, SS_TAP(X_ESCAPE) "0" SS_LCTRL("k"));
    //   BABLM(BABL_DEL_TO_LINE_END, SS_LCTL("k"));
    //   BABLM(BABL_DEL_TO_LINE_START, SS_TAP(X_ESCAPE) "0" SS_LCTL("k"));
    BABLM(BABL_MODE, "Nano ");
#        endif
#        ifdef BABL_OSKEYS
    BABLM(BABL_UNDO, SS_LALT("u"));
    BABLM(BABL_REDO, SS_LALT("e"));
    BABLM(BABL_CUT, SS_LCTRL("k"));  // arguably b/c line based, not selection
    BABLM(BABL_CUT, SS_LCTL("k"));  // arguably b/c line based, not selection
    BABLM(BABL_COPY, SS_LALT("6"));  // arguably
    BABLM(BABL_PASTE, SS_LCTRL("u"));
    //  BABLM(BABL_SELECT_ALL, SS_LCTRL("x") "h");
    BABLM(BABL_FIND, SS_LCTRL("w"));
    BABLM(BABL_PASTE, SS_LCTL("u"));
    //  BABLM(BABL_SELECT_ALL, SS_LCTL("x") "h");
    BABLM(BABL_FIND, SS_LCTL("w"));
    BABLM(BABL_FIND_NEXT, SS_LALT("w"));
    BABLM(BABL_FIND_PREV, SS_LALT("q"));
    BABLM(BABL_FIND_REPLACE, SS_LALT("r"));


@@ 57,8 57,8 @@ bool babblePaste_nano(uint16_t keycode) {
    BABLM(BABL_WINDOW_NEXT, OMALT(IMSFT(X_DOT)));
    BABLM(BABL_WINDOW_PREV, OMALT(IMSFT(X_COMMA)));
    BABLM(BABL_WINDOW_NEW, IMCTL(X_R) IMALT(X_F));  //
    BABLM(BABL_CLOSE_APP, SS_LCTRL("x"));
    BABLM(BABL_HELP, SS_LCTRL("g"));
    BABLM(BABL_CLOSE_APP, SS_LCTL("x"));
    BABLM(BABL_HELP, SS_LCTL("g"));

    // BABLM( BABL_LOCK,		()	); // lock buffer? Too many options.
    // BABLM( BABL_SCREENCAPTURE,		()	); // requires plugin?


@@ 66,7 66,7 @@ bool babblePaste_nano(uint16_t keycode) {
#        endif

#        ifdef BABL_APP
    BABLM(BABL_APP_SAVE, SS_LCTRL("s"));  // save file blurs app & os. Move?
    BABLM(BABL_APP_SAVE, SS_LCTL("s"));  // save file blurs app & os. Move?
    BABLM(BABL_APP_SET_MARK, SS_LALT("a"));
#        endif


M users/miles2go/babl_readmux.c => users/miles2go/babl_readmux.c +2 -2
@@ 29,7 29,7 @@ bool babblePaste_readmux(uint16_t keycode) {
    // BABLM( BABL_GO_PARA_END,	 	// undefinedBABLM( BABL_PGDN ,

    BABLM(BABL_PGUP, SS_TAP(X_PGUP));
    BABLM(BABL_PGDN, SS_TAP(X_PGDOWN));
    BABLM(BABL_PGDN, SS_TAP(X_PGDN));
    BABLM(BABL_DEL_RIGHT_1C, SS_LCTL("d"));
    BABLM(BABL_DEL_LEFT_WORD, SS_LCTL("w"));  // meta-DEL instead?
    BABLM(BABL_DEL_RIGHT_WORD, SS_LALT("d"));


@@ 76,7 76,7 @@ bool babblePaste_readmux(uint16_t keycode) {
    // This one closes the current pane.
    BABLM(BABL_UNSPLIT_FRAME_HORIZONTAL, SS_LCTL("b") "x");
    BABLM(BABL_NEXT_FRAME, SS_LCTL("b") "o");
    BABLM(BABL_PREV_FRAME, SS_LCTL("w") SS_TAP(X_SCOLON));
    BABLM(BABL_PREV_FRAME, SS_LCTL("w") SS_TAP(X_SEMICOLON));
#        endif

    // Todo, ring bell, flash light, show user this isn't supported

M users/miles2go/babl_vi.c => users/miles2go/babl_vi.c +10 -10
@@ 22,10 22,10 @@ bool babblePaste_vi(uint16_t keycode) {
    BABLM(BABL_GO_END_DOC, IMSFT(X_G));
    BABLM(BABL_GO_NEXT_LINE, "j");
    BABLM(BABL_GO_PREV_LINE, "k");
    BABLM(BABL_GO_PARA_START, IMSFT(X_LBRACKET));
    BABLM(BABL_GO_PARA_END, IMSFT(X_RBRACKET));
    BABLM(BABL_PGDN, SS_LCTRL("f"));
    BABLM(BABL_PGUP, SS_LCTRL("b"));
    BABLM(BABL_GO_PARA_START, IMSFT(X_LEFT_BRACKET));
    BABLM(BABL_GO_PARA_END, IMSFT(X_RIGHT_BRACKET));
    BABLM(BABL_PGDN, SS_LCTL("f"));
    BABLM(BABL_PGUP, SS_LCTL("b"));
    BABLM(BABL_DEL_RIGHT_1C, "x");
    BABLM(BABL_DEL_LEFT_WORD, "dge");
    BABLM(BABL_DEL_RIGHT_WORD, "dw");


@@ 35,11 35,11 @@ bool babblePaste_vi(uint16_t keycode) {
#        endif
#        ifdef BABL_OSKEYS
    BABLM(BABL_UNDO, "h");
    BABLM(BABL_REDO, SS_LCTRL("r"));
    BABLM(BABL_REDO, SS_LCTL("r"));
    BABLM(BABL_CUT, "x");
    BABLM(BABL_COPY, "y");
    BABLM(BABL_PASTE, "p");
    BABLM(BABL_SELECT_ALL, IMSFT(X_SCOLON) SS_TAP(X_5) "y");  // wrong but helpful?
    BABLM(BABL_SELECT_ALL, IMSFT(X_SEMICOLON) SS_TAP(X_5) "y");  // wrong but helpful?
    BABLM(BABL_FIND, SS_TAP(X_SLASH));
    BABLM(BABL_FIND_NEXT, "n");
    BABLM(BABL_FIND_PREV, IMSFT(X_N));


@@ 47,8 47,8 @@ bool babblePaste_vi(uint16_t keycode) {
    BABLM(BABL_RUNAPP, ":split");                // requires VIM, is vsplit better?
    BABLM(BABL_SWITCH_APP_NEXT, IMCTL(X_DOWN));  // Or Right?
    BABLM(BABL_SWITCH_APP_NEXT, IMCTL(X_UP));    // or Left?
    BABLM(BABL_CLOSE_APP, IMCTL(X_SCOLON) "q");
    BABLM(BABL_HELP, SS_LSFT(SS_TAP(X_SCOLON)) "h");  // start search in help
    BABLM(BABL_CLOSE_APP, IMCTL(X_SEMICOLON) "q");
    BABLM(BABL_HELP, SS_LSFT(SS_TAP(X_SEMICOLON)) "h");  // start search in help
                                                      // BABLM( BABL_LOCK,		()	); Perhaps VI is not an OS?
                                                      // BABLM( BABL_SCREENCAPTURE,		()	); // capture a buffer?
#        endif


@@ 65,8 65,8 @@ bool babblePaste_vi(uint16_t keycode) {
    BABLM(BABL_UNSPLIT_FRAME_VERT, SS_TAP(X_ESCAPE) ":hide");  // debatable.
    BABLM(BABL_SPLIT_FRAME_HORIZONTAL, SS_TAP(X_ESCAPE) ":vsplit");
    BABLM(BABL_UNSPLIT_FRAME_HORIZONTAL, SS_TAP(X_ESCAPE) ":hide");
    BABLM(BABL_NEXT_FRAME, SS_LCTRL("w") "w");
    BABLM(BABL_PREV_FRAME, SS_LCTRL("w") SS_LSFT("w"));
    BABLM(BABL_NEXT_FRAME, SS_LCTL("w") "w");
    BABLM(BABL_PREV_FRAME, SS_LCTL("w") SS_LSFT("w"));
#            endif
#        endif  // app
    // Todo, ring bell, flash light, show user this isn't supported

M users/miles2go/babl_windows.c => users/miles2go/babl_windows.c +20 -20
@@ 31,10 31,10 @@ bool babblePaste_win(uint16_t keycode) {
    BABLM(BABL_GO_PREV_LINE, SS_TAP(X_UP));
    BABLM(BABL_GO_PARA_START, IMCTL(X_UP));
    BABLM(BABL_GO_PARA_END, IMCTL(X_DOWN));
    BABLM(BABL_PGDN, SS_TAP(X_PGDOWN));
    BABLM(BABL_PGDN, SS_TAP(X_PGDN));
    BABLM(BABL_PGUP, SS_TAP(X_PGUP));
    BABLM(BABL_DEL_RIGHT_1C, SS_TAP(X_DELETE));
    BABLM(BABL_DEL_LEFT_WORD, IMCTL(X_BSPACE));
    BABLM(BABL_DEL_LEFT_WORD, IMCTL(X_BACKSPACE));
    BABLM(BABL_DEL_RIGHT_WORD, IMCTL(X_DELETE));
    BABLM(BABL_DEL_TO_LINE_END, IMSFT(X_HOME) SS_TAP(X_DELETE));
    BABLM(BABL_DEL_TO_LINE_START, IMSFT(X_END) SS_TAP(X_DELETE));


@@ 42,16 42,16 @@ bool babblePaste_win(uint16_t keycode) {
#        endif

#        ifdef BABL_OSKEYS
    BABLM(BABL_UNDO, SS_LCTRL("z"));
    BABLM(BABL_REDO, SS_LCTRL("y"));
    BABLM(BABL_CUT, SS_LCTRL("x"));
    BABLM(BABL_COPY, SS_LCTRL("c"));
    BABLM(BABL_PASTE, SS_LCTRL("v"));
    BABLM(BABL_SELECT_ALL, SS_LCTRL("a"));
    BABLM(BABL_FIND, SS_LCTRL("f"));
    BABLM(BABL_UNDO, SS_LCTL("z"));
    BABLM(BABL_REDO, SS_LCTL("y"));
    BABLM(BABL_CUT, SS_LCTL("x"));
    BABLM(BABL_COPY, SS_LCTL("c"));
    BABLM(BABL_PASTE, SS_LCTL("v"));
    BABLM(BABL_SELECT_ALL, SS_LCTL("a"));
    BABLM(BABL_FIND, SS_LCTL("f"));
    BABLM(BABL_FIND_NEXT, SS_TAP(X_F3));
    // BABLM( BABL_FIND_PREV, 	SS_TAP(X_F3) ); // doesn't have a standard one?
    BABLM(BABL_FIND_REPLACE, SS_LCTRL("h"));
    BABLM(BABL_FIND_REPLACE, SS_LCTL("h"));
    BABLM(BABL_RUNAPP, SS_LGUI("r"));
    BABLM(BABL_SWITCH_APP_NEXT, IMALT(X_TAB));
    BABLM(BABL_SWITCH_APP_LAST, OMSFT(IMALT(X_TAB)));


@@ 67,22 67,22 @@ bool babblePaste_win(uint16_t keycode) {
#        endif

#        ifdef BABL_BROWSER
    BABLM(BABL_BROWSER_NEW_TAB, SS_LCTRL("t"));
    BABLM(BABL_BROWSER_CLOSE_TAB, SS_LCTRL("w"));
    BABLM(BABL_BROWSER_NEW_TAB, SS_LCTL("t"));
    BABLM(BABL_BROWSER_CLOSE_TAB, SS_LCTL("w"));
    BABLM(BABL_BROWSER_REOPEN_LAST_TAB, OMSFT(IMCTL(X_T)));
    BABLM(BABL_BROWSER_NEXT_TAB, IMCTL(X_TAB));
    BABLM(BABL_BROWSER_PREV_TAB, OMSFT(IMCTL(X_TAB)));
    BABLM(BABL_BROWSER_URL_BAR, SS_LCTRL("l"));
    BABLM(BABL_BROWSER_URL_BAR, SS_LCTL("l"));
    BABLM(BABL_BROWSER_FORWARD, IMALT(X_RIGHT));
    BABLM(BABL_BROWSER_BACK, OMSFT(IMALT(X_LEFT)));
    ;
    BABLM(BABL_BROWSER_FIND, SS_LCTRL("f"));
    BABLM(BABL_BROWSER_BOOKMARK, SS_LCTRL("d"));
    BABLM(BABL_BROWSER_FIND, SS_LCTL("f"));
    BABLM(BABL_BROWSER_BOOKMARK, SS_LCTL("d"));
#            ifdef BABL_BROWSER_MS
    BABLM(BABL_BROWSER_DEV_TOOLS, IMCTL(X_F12));  // EDGE
#            else
    BABLM(BABL_BROWSER_DEV_TOOLS, SS_LCTRL("t"));  // Chrome
    BABLM(BABL_BROWSER_VIEWSRC, SS_LCTRL("u"));    // Chrome or firefox
    BABLM(BABL_BROWSER_DEV_TOOLS, SS_LCTL("t"));  // Chrome
    BABLM(BABL_BROWSER_VIEWSRC, SS_LCTL("u"));    // Chrome or firefox
#            endif
    // chrome
    BABLM(BABL_BROWSER_RELOAD, IMCTL(X_F5));             // hard reload w/o cache


@@ 109,7 109,7 @@ bool babblePaste_win(uint16_t keycode) {
#                    endif
    BABLM(BABL_APP_CENTER_ALIGN, IMALT(X_H) "ac");
    // BABLM( BABL_APP_CLEAR_FORMATTING, 	OMCTL(IMGUI(X_G)) ); // this isn't native. https://support.office.com/en-us/article/Clear-all-text-formatting-C094C4DA-7F09-4CEA-9A8D-C166949C9C80#OfficeVersion=macOS
    BABLM(BABL_APP_SCROLL_ACTIVE_CELL, IMCTL(X_BSPACE));
    BABLM(BABL_APP_SCROLL_ACTIVE_CELL, IMCTL(X_BACKSPACE));
    BABLM(BABL_NEWLINE_IN_CELL, IMALT(X_ENTER));
    BABLM(BABL_INSERT_COMMENT, IMSFT(X_F2));
    BABLM(BABL_INSERT_COL_LEFT, OMCTL(IMSFT(X_KP_PLUS)));


@@ 121,10 121,10 @@ bool babblePaste_win(uint16_t keycode) {

#                ifdef BABL_APP_GOOGLE
    BABLM(BABL_APP_CENTER_ALIGN, OMSFT(IMCTL(X_E)));
    BABLM(BABL_APP_SCROLL_ACTIVE_CELL, IMCTL(X_BSPACE));
    BABLM(BABL_APP_SCROLL_ACTIVE_CELL, IMCTL(X_BACKSPACE));
    BABLM(BABL_NEWLINE_IN_CELL, IMALT(X_ENTER));
    BABLM(BABL_INSERT_COMMENT, IMSFT(X_F2));
    BABLM(BABL_APP_CLEAR_FORMATTING, IMCTL(X_BSLASH));
    BABLM(BABL_APP_CLEAR_FORMATTING, IMCTL(X_BACKSLASH));
    BABLM(BABL_DELETE_ROW, IMALT(X_E) "d");
    BABLM(BABL_INSERT_COL_LEFT, OMALT(IMCTL(X_I)) "c");  // o for to the right.
    BABLM(BABL_INSERT_ROW, IMALT(IMCTL(X_I)) "w");       // r for above.

M users/moults31/gdb.c => users/moults31/gdb.c +1 -1
@@ 45,7 45,7 @@ bool process_record_gdb(uint16_t keycode, keyrecord_t *record) {
            break;
        case M_GDB_RESTART:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL(SS_LSFT(SS_TAP(X_F5))));
                SEND_STRING(SS_LCTL(SS_LSFT(SS_TAP(X_F5))));
            }
            break;
        case M_GDB_STOP:

M users/moults31/vscode.c => users/moults31/vscode.c +13 -13
@@ 21,67 21,67 @@ bool process_record_vsc(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case M_VSC_TERMFOCUS:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL("`"));
                SEND_STRING(SS_LCTL("`"));
            }
            break;
        case M_VSC_SIDEBARFOCUS:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL("0"));
                SEND_STRING(SS_LCTL("0"));
            }
            break;
        case M_VSC_SIDEBARCLOSE:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL("b"));
                SEND_STRING(SS_LCTL("b"));
            }
            break;
        case M_VSC_FILECLOSE:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL("w"));
                SEND_STRING(SS_LCTL("w"));
            }
            break;
        case M_VSC_FILENXT:
            if (record->event.pressed) {
                SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_K) SS_TAP(X_PGDOWN) SS_UP(X_LCTRL));
                SEND_STRING(SS_DOWN(X_LEFT_CTRL) SS_TAP(X_K) SS_TAP(X_PAGE_DOWN) SS_UP(X_LEFT_CTRL));
            }
            break;
        case M_VSC_FILEPRV:
            if (record->event.pressed) {
                SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_K) SS_TAP(X_PGUP) SS_UP(X_LCTRL));
                SEND_STRING(SS_DOWN(X_LEFT_CTRL) SS_TAP(X_K) SS_TAP(X_PGUP) SS_UP(X_LEFT_CTRL));
            }
            break;
        case M_VSC_DBGCNSLFOCUS:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_D))));
                SEND_STRING(SS_LCTL(SS_LALT(SS_TAP(X_D))));
            }
            break;
        case M_VSC_MVEDTRNXTGRP:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_RIGHT))));
                SEND_STRING(SS_LCTL(SS_LALT(SS_TAP(X_RIGHT))));
            }
            break;
        case M_VSC_MVEDTRPRVGRP:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_LEFT))));
                SEND_STRING(SS_LCTL(SS_LALT(SS_TAP(X_LEFT))));
            }
            break;
        case M_VSC_EDGRPNXT:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_L))));
                SEND_STRING(SS_LCTL(SS_LALT(SS_TAP(X_L))));
            }
            break;
        case M_VSC_EDGRPPRV:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_K))));
                SEND_STRING(SS_LCTL(SS_LALT(SS_TAP(X_K))));
            }
            break;
        case M_VSC_VIEWSIZEINC:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_P))));
                SEND_STRING(SS_LCTL(SS_LALT(SS_TAP(X_P))));
            }
            break;
        case M_VSC_VIEWSIZEDEC:
            if (record->event.pressed) {
                SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_O))));
                SEND_STRING(SS_LCTL(SS_LALT(SS_TAP(X_O))));
            }
            break;
    }

M users/rossman360/rossman360.c => users/rossman360/rossman360.c +10 -10
@@ 32,52 32,52 @@ switch (keycode) {
    break;
	case CSPEAK:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN));
		SEND_STRING(SS_TAP(X_PAGE_DOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PAGE_DOWN));
	}
	break;
	case SPEAK1:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_1)));
		SEND_STRING(SS_TAP(X_PAGE_DOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PAGE_DOWN) SS_LCTL(SS_TAP(X_1)));
	}
	break;
	case SPEAK2:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_2)));
		SEND_STRING(SS_TAP(X_PAGE_DOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PAGE_DOWN) SS_LCTL(SS_TAP(X_2)));
	 }
	break;
	case SPEAK3:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_3)));
		SEND_STRING(SS_TAP(X_PAGE_DOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PAGE_DOWN) SS_LCTL(SS_TAP(X_3)));
	}
	break;
	case SPEAK4:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN) SS_LCTRL(SS_TAP(X_4)));
		SEND_STRING(SS_TAP(X_PAGE_DOWN) SS_TAP(X_ENTER) SS_TAP(X_ENTER) SS_TAP(X_PAGE_DOWN) SS_LCTL(SS_TAP(X_4)));
	}
	break;
	case PARADOWN:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_PGDOWN) SS_TAP(X_ENTER) SS_TAP(X_PGDOWN));
		SEND_STRING(SS_TAP(X_PAGE_DOWN) SS_TAP(X_ENTER) SS_TAP(X_PAGE_DOWN));
	}
	break;
	case PMERGE:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_HOME) SS_TAP(X_BSPACE) SS_TAP(X_SPACE) SS_LCTRL(SS_TAP(X_BSPACE)) SS_TAP(X_SPACE));
		SEND_STRING(SS_TAP(X_HOME) SS_TAP(X_BACKSPACE) SS_TAP(X_SPACE) SS_LCTL(SS_TAP(X_BACKSPACE)) SS_TAP(X_SPACE));
	}
	break;
	case WREFRESH:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_SPACE) SS_TAP(X_BSPACE));
		SEND_STRING(SS_TAP(X_SPACE) SS_TAP(X_BACKSPACE));
	}
	break;
	case REMCAPS:
	if (record->event.pressed) {
		SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_LCTRL(SS_TAP(X_LEFT)) SS_TAP(X_DELETE));
		SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_LCTL(SS_TAP(X_LEFT)) SS_TAP(X_DELETE));
	}
	break;
	case EMDASH:
	if (record->event.pressed) {
		SEND_STRING(SS_LCTRL(SS_LSFT(SS_TAP(X_U))) SS_TAP(X_2) SS_TAP(X_0) SS_TAP(X_1) SS_TAP(X_4) SS_TAP(X_SPACE) SS_TAP(X_SPACE));
		SEND_STRING(SS_LCTL(SS_LSFT(SS_TAP(X_U))) SS_TAP(X_2) SS_TAP(X_0) SS_TAP(X_1) SS_TAP(X_4) SS_TAP(X_SPACE) SS_TAP(X_SPACE));
	}
	break;
};

M users/sigma/sigma.c => users/sigma/sigma.c +6 -6
@@ 172,7 172,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
      break;
    default:
      if (pressed)
        SEND_STRING(SS_LCTRL("x"));
        SEND_STRING(SS_LCTL("x"));
      break;
    }
    break;


@@ 190,7 190,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
      break;
    default:
      if (pressed)
        SEND_STRING(SS_LCTRL("c"));
        SEND_STRING(SS_LCTL("c"));
      break;
    }
    break;


@@ 208,7 208,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
      break;
    default:
      if (pressed)
        SEND_STRING(SS_LCTRL("v"));
        SEND_STRING(SS_LCTL("v"));
      break;
    }
    break;


@@ 226,7 226,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
      break;
    default:
      if (pressed)
        SEND_STRING(SS_LCTRL("z"));
        SEND_STRING(SS_LCTL("z"));
      break;
    }
    break;


@@ 244,7 244,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
      break;
    default:
      if (pressed)
        SEND_STRING(SS_LCTRL(SS_LSFT("z")));
        SEND_STRING(SS_LCTL(SS_LSFT("z")));
      break;
    }
    break;


@@ 253,7 253,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (os_target) {
    case _OS_MACOS:
      if (pressed)
        SEND_STRING(SS_LGUI(SS_LCTRL("q")));
        SEND_STRING(SS_LGUI(SS_LCTL("q")));
      break;
    case _OS_LINUX:
      pressed ?

M users/stanrc85/stanrc85.c => users/stanrc85/stanrc85.c +2 -2
@@ 22,13 22,13 @@ void ctl_copy_finished (qk_tap_dance_state_t *state, void *user_data) {
  td_state = cur_dance(state);
  switch (td_state) {
    case SINGLE_TAP:
      SEND_STRING(SS_LCTRL("c"));
      SEND_STRING(SS_LCTL("c"));
      break;
    case SINGLE_HOLD:
      register_mods(MOD_BIT(KC_RCTL));
      break;
    case DOUBLE_TAP:
      SEND_STRING(SS_LCTRL("v"));
      SEND_STRING(SS_LCTL("v"));
  }
}


M users/talljoe/macros.c => users/talljoe/macros.c +2 -2
@@ 27,13 27,13 @@ ostype_t get_os() {

#define IS_OSX() (get_os() == MACOSX)

#define MOD_SEND(KEY) (IS_OSX() ? SEND_STRING(SS_LCMD(KEY)) : SEND_STRING(SS_LCTRL(KEY)))
#define MOD_SEND(KEY) (IS_OSX() ? SEND_STRING(SS_LCMD(KEY)) : SEND_STRING(SS_LCTL(KEY)))

void macro_copy() { MOD_SEND("c"); }
void macro_paste() { MOD_SEND("v"); }
void macro_lock() {
  if (IS_OSX()) {
    SEND_STRING(SS_LCTRL(SS_LCMD("q")));
    SEND_STRING(SS_LCTL(SS_LCMD("q")));
  } else {
    SEND_STRING(SS_LGUI("l"));
  }

M users/uqs/uqs.c => users/uqs/uqs.c +6 -6
@@ 502,10 502,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
/*
 * Obsoleted by making tmux understand Ctrl-(Shift)-Tab natively.
    case TM_NEXT:
        if (record->event.pressed) SEND_STRING(SS_LCTRL("a") "n");
        if (record->event.pressed) SEND_STRING(SS_LCTL("a") "n");
        break;
    case TM_PREV:
        if (record->event.pressed) SEND_STRING(SS_LCTRL("a") "p");
        if (record->event.pressed) SEND_STRING(SS_LCTL("a") "p");
        break;
*/
        // TODO: use key overrides to turn, e.g. Win+Ctrl-Tab into VIM_NEXT.


@@ 517,16 517,16 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
        if (record->event.pressed) SEND_STRING(SS_TAP(X_ESC) SS_TAP(X_G) SS_LSFT("t"));
        break;
    case WIN_LEFT:
        if (record->event.pressed) SEND_STRING(SS_LCTRL("w") SS_TAP(X_H));
        if (record->event.pressed) SEND_STRING(SS_LCTL("w") SS_TAP(X_H));
        break;
    case WIN_DN:
        if (record->event.pressed) SEND_STRING(SS_LCTRL("w") SS_TAP(X_J));
        if (record->event.pressed) SEND_STRING(SS_LCTL("w") SS_TAP(X_J));
        break;
    case WIN_UP:
        if (record->event.pressed) SEND_STRING(SS_LCTRL("w") SS_TAP(X_K));
        if (record->event.pressed) SEND_STRING(SS_LCTL("w") SS_TAP(X_K));
        break;
    case WIN_RGHT:
        if (record->event.pressed) SEND_STRING(SS_LCTRL("w") SS_TAP(X_L));
        if (record->event.pressed) SEND_STRING(SS_LCTL("w") SS_TAP(X_L));
        break;
    }


M users/wanleg/tapdances.c => users/wanleg/tapdances.c +3 -3
@@ 72,15 72,15 @@ void CAD_finished (qk_tap_dance_state_t *state, void *user_data) {
    case SINGLE_HOLD:
		//register_code(KC_NO);
		//take a screenshot of a single window, open Paint and paste
		SEND_STRING(SS_LALT(SS_TAP(X_PSCREEN)) SS_LGUI("r"));
		SEND_STRING(SS_LALT(SS_TAP(X_PRINT_SCREEN)) SS_LGUI("r"));
        wait_ms(500);
        SEND_STRING("mspaint" SS_TAP(X_ENTER));
        wait_ms(700);
        SEND_STRING(SS_LCTRL("v"));
        SEND_STRING(SS_LCTL("v"));
		break; //register this keycode when button is held
    case DOUBLE_TAP:
		//register_code(KC_ENT);
		SEND_STRING(SS_LCTRL(SS_LALT(SS_TAP(X_DELETE))));
		SEND_STRING(SS_LCTL(SS_LALT(SS_TAP(X_DELETE))));
		#ifdef BACKLIGHT_ENABLE
    backlight_level(0);
		#endif