Hi everyone,
I am trying to use a single tap of the Shift key to toggle between my current input method and the U.S. English input method.
Essentially, I want to replicate the exact behavior of the macOS feature "Use the Caps Lock key to switch to and from U.S.", but triggered by the Shift key instead.
The Main Issue
I set up a Key Sequence (Shift Down ➔ Shift Up) and bound it to the action "Send Keyboard Shortcut: Caps Lock".
- Result: The sequence is successfully triggered (I added a HUD overlay to confirm this), but it does not switch the input method. It seems BTT sending a virtual Caps Lock keystroke doesn't trigger the macOS input toggle logic.
Other Workarounds I've Tried
1. Remapping via a proxy key (Automation)
-
I went into BTT Automation and remapped
keypad_period➔caps_lock. Pressing the physical Keypad Period key successfully toggled the input method, behaving exactly like Caps Lock. -
Next, I assigned my single
Shifttap to the action "Send Keyboard Shortcut:Pad ." -
Result: Instead of triggering the remapped Caps Lock behavior, tapping Shift just outputs a literal
.character.
2. Using ^Space (Ctrl + Space)
-
I bound the single
Shifttap to "Send Keyboard Shortcut:^Space" (the macOS default for "Select the previous input source"). -
Result: Two problems arose here:
-
Highly Unstable: The trigger fires (verified via HUD), but the input switch rarely works on the first try. If I tap Shift repeatedly, it only succeeds about 80% of the time. Using the physical
^Spaceon my keyboard works 100% of the time with no lag. -
Incorrect Logic: I use three input methods (Chinese, Japanese, English).
^Spaceswitches to the previous source, meaning it might just toggle between Chinese and Japanese. I strictly want it to toggle between my Current source and U.S. English (which is what Caps Lock does).
-
My System Setup
-
macOS Settings: "Use the Caps Lock key to switch to and from U.S." is ON; Caps Lock is mapped to Caps Lock.
-
BTT Version: 6.306
-
macOS: Tahoe 26.4.1
Has anyone successfully achieved this "Single Shift to toggle English" setup, or is there a specific AppleScript/Shell Script action I should be using instead of simulating keystrokes? Any help would be greatly appreciated!

