Немодальное переключение раскладок клавиатуры в OS X Yosemite
После апгрейда до OS X Yosemite 10.10.3 я обнаружил, что описанный мной раньше способ немодального переключения раскладок в OS X перестал работать, поскольку утилита changeInput, по всей видимости, несовместима с данной версией ОС. Поэтому встал вопрос: как жить дальше?
Оказалось, что проблему можно решить при помощи AppleScript — встроенного в OS X языка программирования и автоматизации.
Итак, запускаем утилиту Script Editor и создаём скрипт следующего содержания:
set theInputSource to "Russian"
tell application "System Events" to tell process "SystemUIServer"
click (menu bar item 1 of menu bar 1 whose description is "text input")
click menu item theInputSource of menu 1 of result
end tell
Сохраняем этот скрипт под именем Input Source - Russian.scpt
. Далее создаём аналогичные скрипты для других раскладок (для этого достаточно заменить "Russian" в первой строчке на название нужной раскладки, например, "U.S." или "Ukrainian").
Теперь копируем эти скрипты в папку ~/Library/Scripts
(или /Library/Scripts
, это дело вкуса).
Как и в предыдущем решении, для вызова скриптов нам понадобится FastScripts или аналогичная утилита (бесплатной версии будет более чем достаточно).
После установки FastScripts автоматом подхватит нужные скрипты, нам останется только пойти в настройки и настроить горячие клавиши.
Следующий шаг: идём в системные настройки безопасности и в разделе Accessibility на закладке Privacy разрешаем управление компьютером приложениям FastScripts и Script Editor:
Теперь, по идее, всё должно заработать.
К сожалению, этот метод объективно хуже предыдущего. Он использует скрипты для управления элементами графического интерфейса системы, поэтому когда вы вызываете скрипт, он как бы «кликает» на иконку индикатора раскладок в строке меню и «выбирает» нужный пункт из раскрывшегося списка. Переключение раскладки в этом случае занимает примерно 0.2 секунды, что очень много при быстрой печати. (Пока скрипт не отработал, текстовый ввод невозможен.) Кроме того, данный способ работает только в том случае, если у вас включено отображение индикатора текущего языка ввода. Но это всё равно лучше, чем циклическое переключение раскладок по ⌘+пробел. ♦