Use Caps Lock to switch to and from languages on Sierra

My tests indicate that the Caps Lock switching feature now works with Cyrillic, Greek, and Armenian keyboards in High Sierra. (These do not work in Sierra).


To switch keyboard layout with caps-lock key you need to remap caps-lock to F18 with command (in Terminal.app):

hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000039,"HIDKeyboardModifierMappingDst":0x70000006D}]}'

Then, go to System Preferences/Keyboard/Shortcuts/Input Sources, use key 'caps lock' to switch input source.

No additional software is required on mac os Sierra.

To keep this working after you logout do the following: create file ~/bin/caps2f18.sh with the following content:

hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000039,"HIDKeyboardModifierMappingDst":0x70000006D}]}' > /dev/null 2>&1

Make it executable:

chmod +x ~/bin/caps2f18.sh

Create file ~/Library/LaunchAgents/com.user.loginscript.plist with the following content:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Label</key>
   <string>com.user.loginscript</string>
   <key>ProgramArguments</key>
   <array>
        <string>zsh</string>
        <string>-c</string>
        <string>~/bin/caps2f18.sh</string>
   </array>
   <key>RunAtLoad</key>
   <true/>
   <key>ThrottleInterval</key>
   <integer>86400</integer>
</dict>
</plist>

Execute

launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist

logout login, or execute launchctl start com.user.loginscript


Although both Seil and the classic Karabiner don't work anymore under Sierra, Karabiner rewrite, "Karabiner Elements" (in a very early beta) actually works.

The UI key mapping doesn't yet work, but you can edit the config json file under ~/.karabiner.d/configuration/karabiner.json (see an example below) to map Caps Lock to F19. From there it's all the same as before - disable Caps Lock, map keyboard layout triggering to F19, profit.

Example karabiner.json:

{  "profiles": [
    {
      "name": "Default profile",
      "selected": true,
      "simple_modifications": {
        "caps_lock": "f19"
      }
    }
  ]
}

Downgrade deferred!