Изменить раскладку клавиатуры OSX("источник ввода") программно через терминал или AppleScript?
в настоящее время я переключаю источники ввода, запустив GUI AppleScript через Alfred, и сценарий GUI может когда-то занять до 1s, чтобы завершить изменение. Временами это начинает раздражать.
я наткнулся определите раскладку клавиатуры OS X ("Источник ввода") в терминале/скрипте. И я хочу знать, так как мы можем узнать текущий источник ввода, если есть способ изменить источник ввода программно? Я пытался переписать com.яблоко.Хитулбокс.plist, но он не меняет вход.
(Я понимаю, что есть ярлык отображения источников ввода, доступных в предпочтении системы, однако я предпочитаю ключевые слова отображения с Альфредом)
3 ответов
вы можете сделать это с помощью API служб ввода текста:
NSArray* sources = CFBridgingRelease(TISCreateInputSourceList((__bridge CFDictionaryRef)@{ (__bridge NSString*)kTISPropertyInputSourceID : @"com.apple.keylayout.French" }, FALSE));
TISInputSourceRef source = (__bridge TISInputSourceRef)sources[0];
OSStatus status = TISSelectInputSource(source);
if (status != noErr)
/* handle error */;
словарь в первой строке может использовать другие свойства для других критериев выбора источника ввода.
там же NSTextInputContext
. У него есть selectedKeyboardInputSource
который можно установить в ID источника входного сигнала для выбора другого источника входного сигнала. Проблема в том, что вам нужен экземпляр NSTextInputContext
для работы, и один из них существует только тогда, когда у вас есть ключевое окно с текстовым представлением в качестве первого Ответчик.
@ Ken Thomases' решение, вероятно, самый надежный , но он требует создания утилиты командной строки.
A non-GUI-scripting shell scripting / AppleScripting решение, к сожалению,не опции: пока is на *.plist
файл, который отражает текущий выбранный источник ввода (раскладка клавиатуры) -~/Library/Preferences/com.apple.HIToolbox.plist
- система игнорировать в изменение.
(Если вы просто хотели через установленные макеты, используя комбинацию клавиш, определенную в Системных настройках, вероятно, ваш лучший выбор; преимущество этой решение заключается в том, что вы можете цель конкретные макет.)
обратите внимание на предварительные условия, упомянутые в комментариях.
# Example call
my switchToInputSource("Spanish")
# Switches to the specified input source (keyboard layout) using GUI scripting.
# Prerequisites:
# - The application running this script must be granted assisistive access.
# - Showing the Input menu in the menu bar must be turned on
# (System Preferences > Keyboard > Input Sources > Show Input menu in menu bar).
# Parameters:
# name ... input source name, as displayed when you open the Input menu from
# the menu bar; e.g.: "U.S."
# Example:
# my switchToInputSource("Spanish")
on switchToInputSource(name)
tell application "System Events" to tell process "SystemUIServer"
tell (menu bar item 1 of menu bar 1 whose description is "text input")
# !! Sadly, we must *visibly* select (open) the text-input menu-bar extra in order to
# !! populate its menu with the available input sources.
select
tell menu 1
# !! Curiously, using just `name` instead of `(get name)` didn't work: 'Access not allowed'.
click (first menu item whose title = (get name))
end tell
end tell
end tell
end switchToInputSource
на AppleScript вы должны взять только cmd + "пробел" (или что-то другое, что вы используете для изменения источника клавиатуры).
и все, что вам нужно:
key code 49 using command down
49-код кнопки "пробел" в ASCII для AppleScript.
P. S.: Не забудьте сделать доступ для вас помощью AppleScript программы в Системные настройки.