4

I have figured out a workable shell script using osascript (AppleScript) to automatically switch to US keyboard layout when MacVim activates (triggered by Keyboard Maestro), and Swedish layout when it deactivates:

osascript > /dev/null 2>&1 <<-RAW
on changeKeyboardLayout(layoutName)
    tell application "System Events" to tell process "SystemUIServer"
        tell (1st menu bar item of menu bar 1 whose description is "text input") to {click, click (menu 1's menu item layoutName)}
    end tell
end changeKeyboardLayout

changeKeyboardLayout("Svensk - Pro")
RAW
exit $?

However, AppleScript is truly slow and I also don't prefer to see the text input menu in the statusbar to flash open when switching back and forth.

Question:

Is there an alternative to my AppleScript approach to instantly switch layout?

…I envision something like a defaults command or altering any .plist file as potential candidates for the job, only I don't know any specifics.

Two things related to the answer(s) I'm seeking:

  1. I'm keen to have the change propagate instantly – faster than the sluggish AppleScript execution.

  2. I prefer not installing new software daemons to achieve this. (Suggestions are always welcome, though, but 3rd party apps will likely not qualify as the accepted answer.)

2

~/Library/Preferences/ByHost/com.apple.HIToolbox.*.plist has an AppleSelectedInputSources key, but modifying it directly doesn't seem to actually change the layout.

Most of the solutions posted at MacScripter just use UI scripting as well.

There's a small Objective-C utility called changeInput though that should change the layout almost instantly.

  • Wow. That command really does the trick. Lots of thanks, Lri. – Henrik Feb 8 '12 at 12:18
  • The command's website is down, and now redirects to ads. – Spotlight Mar 23 '15 at 12:34
2

I write a little program on objective-c cover it in an Alfred Workflow, and you can try it: https://github.com/bimawa/alfredWorkFlows/blob/master/DirectlySwitchKeyboard.alfredworkflow And now compile binary for cli 64 bit: https://github.com/bimawa/alfredWorkFlows/blob/master/Utilites/DirectlySwitchKeyboard/KeyboardSwitcher/bin/KeyboardSwitcher on enter wait one argument like "com.apple.keylayout.US" With BTT working faster.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .