How to map a single Shift tap to toggle U.S. Input Source (imitating Caps Lock behavior)?

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 DownShift 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_periodcaps_lock. Pressing the physical Keypad Period key successfully toggled the input method, behaving exactly like Caps Lock.

  • Next, I assigned my single Shift tap 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 Shift tap 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 ^Space on my keyboard works 100% of the time with no lag.

    • Incorrect Logic: I use three input methods (Chinese, Japanese, English). ^Space switches 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!

I would assign an action sequence with a if condition and use the predefined action "Change Input Source":

Hi Andreas, thakns for the response! That’s a neat implementation if I only have two languages. But in my case I have three languages, if the current input source is EN, how can it know to toggle back to CN or JP?

you can add another if condition (in the else branch) or you could use the „cycle through multiple actions“ meta action