A lightweight macOS menu bar application that allows you to switch input languages using CMD+SHIFT only, without needing to press the Space key.
- π Switch input languages with just CMD+SHIFT
- π― Lives in your menu bar - no dock icon
- β‘ Lightweight and fast
- π Privacy-focused - runs locally, no network access
- β Enable/disable functionality from menu bar
macOS doesn't natively support CMD+SHIFT alone for language switching. This app monitors for the CMD+SHIFT key combination and automatically sends CMD+SHIFT+SPACE to trigger the language switch.
- macOS 13.0 (Ventura) or later
- Xcode 15.0 or later (for building from source)
Before installing the app, you need to configure macOS to use CMD+SHIFT+SPACE for language switching:
- Go to System Settings > Keyboard > Keyboard Shortcuts > Input Sources
- Make sure both shortcuts are enabled:
- β "Select the previous input source" β ββ₯β (Control+Option+Down)
- β "Select next source in Input menu" β ββ₯Space (Control+Option+Space)
Note: The app will intercept CMD+SHIFT and automatically send CMD+SHIFT+SPACE to trigger the language switch.
make installThis will build and install the app to ~/Applications. Then just:
- Open Spotlight (CMD+Space) and search for "LanguageSwitcher"
- Or run:
open ~/Applications/LanguageSwitcher.app
make runThis builds and runs the app directly.
-
Grant Accessibility Permissions:
- When you first run the app, it will request accessibility permissions
- Go to System Settings > Privacy & Security > Accessibility
- Enable the checkbox next to "LanguageSwitcher"
- Restart the app after granting permissions:
make run
-
Verify the Menu Bar Icon:
- Look for the π globe icon in your menu bar
- Click it to see the menu
-
Optional - Start on Login:
- System Settings > General > Login Items
- Click the "+" button and add Language Switcher
make build # Just build, don't run
make clean # Clean build artifacts
make help # Show all commands- Launch the app - A π globe icon will appear in your menu bar
- Press CMD+SHIFT to switch languages (the app sends CMD+SHIFT+SPACE automatically)
- Click the menu bar icon to:
- View status
- Quit the app
-
Check Accessibility Permissions:
- System Settings > Privacy & Security > Accessibility
- Make sure LanguageSwitcher is enabled
-
Verify macOS keyboard shortcut:
- System Settings > Keyboard > Keyboard Shortcuts > Input Sources
- Ensure "Select the previous input source" is set to CMD+SHIFT+SPACE
-
Restart the app:
- Click the menu bar icon and select "Quit"
- Launch the app again
- The app runs as a menu bar-only application (no dock icon)
- Look for a globe icon in your menu bar
- If you don't see it, the app may not be running
- Make sure you've granted Accessibility permissions in System Settings
- You may need to remove and re-add the app in Accessibility settings
- AppDelegate.swift: Main application controller, manages menu bar item
- KeyboardMonitor.swift: Monitors global keyboard events and triggers language switch
- Uses
NSEvent.addGlobalMonitorForEventsfor keyboard monitoring - Uses
CGEventto simulate CMD+SHIFT+SPACE keypress
- The app only monitors modifier key states (CMD and SHIFT)
- No keystroke logging or data collection
- No network access
- Runs entirely locally on your Mac
- App Sandbox is disabled to allow global keyboard monitoring (required for this functionality)
- Accessibility: Required to monitor global keyboard events and simulate keypresses
Edit KeyboardMonitor.swift and modify the debounceInterval value (default: 0.3 seconds):
private let debounceInterval: TimeInterval = 0.3Replace the SF Symbol in AppDelegate.swift:
button.image = NSImage(systemSymbolName: "globe", accessibilityDescription: "Language Switcher")- Requires Accessibility permissions (this is a macOS security requirement for global keyboard monitoring)
- Only works when the app is running
- Depends on macOS's native CMD+SHIFT+SPACE shortcut being configured
- Quit the app from the menu bar
- Remove from Login Items if you added it
- Delete the app from Applications folder
- Remove Accessibility permissions:
- System Settings > Privacy & Security > Accessibility
- Remove LanguageSwitcher from the list
MIT License - see LICENSE file for details.
Feel free to submit issues or pull requests if you have suggestions for improvements!
If you encounter any issues, please check the Troubleshooting section above or open an issue on GitHub.
