Как изменить источник ввода на другой язык с помощью сочетания клавиш (только одна комбинация клавиш)?

Я хочу использовать четыре языка в своей системе OS X (английский, испанский, китайский и японский), и я знаю, что могу изменить язык с помощью + Space. Тем не менее, я испытываю патологическую ненависть к переключению с ним, потому что он требует от меня выбора из такого, очень большого количества вариантов! Я также знаю, что могу изменить его в строке меню справа от панели, но это гораздо более отвратительное решение, чем решение + Space.

Поэтому я скорее хочу изменить его более простым ярлыком, например следующим:

  • левый переключается на английский
  • справа переключается на испанский
  • влево + влево + Cпереключает на китайский язык
  • вправо + вправо + Cпереключает на японский язык.

Пробовал использовать Karabiner(потомок от KeyRemap4MacBook), но не работает с первой попытки на китайском, на котором при переключении на китайский остается английский (иконка источника ввода на панели меню меняется, но клавиатура не работает ). Но по некоторым причинам, если я переключаюсь с английского на китайский с английского на китайский (две попытки), то китайская клавиатура наконец-то работает.

Поэтому мне не нравится идея использования Karabiner. Так как же лучше изменить источник ввода?

Ответы (3)

Я столкнулся с той же проблемой с китайским и японским языками. (Значок в строке меню изменился, но источник ввода фактически не изменился, пока я не переключился на другой источник ввода и обратно.) Это известная ошибка, согласно сообщению в списке рассылки Karabiner :

Это одна из самых раздражающих ошибок OS X.

Изменение источников ввода CJK непосредственно из программы не обрабатывается должным образом.

Итак, вам необходимы следующие процедуры.

Шаг 1:
включите «Выбрать следующий источник в меню ввода» (команда-параметр-пробел) в «Системных настройках»> «Клавиатура»> «Ярлыки».

Шаг 2:
Измените источник ввода, отправив команду-опция-пробел.

<autogen>
  __KeyToKey__
  KeyCode::K, ModifierFlag::OPTION_L,
  KeyCode::VK_CHANGE_INPUTMODE_US,
  KeyCode::VK_WAIT_100MS,
  KeyCode::SPACE, ModifierFlag::COMMAND_R | ModifierFlag::OPTION_L,
  <!-- adjust wait for your machine -->
  KeyCode::VK_WAIT_10MS,
  KeyCode::VK_WAIT_10MS,
  KeyCode::VK_WAIT_10MS,
  KeyCode::SPACE, ModifierFlag::COMMAND_R | ModifierFlag::OPTION_L,
  <!-- adjust wait for your machine -->
  KeyCode::VK_WAIT_10MS,
  KeyCode::VK_WAIT_10MS,
  KeyCode::VK_WAIT_10MS,
  KeyCode::SPACE, ModifierFlag::COMMAND_R | ModifierFlag::OPTION_L,

  Option::NOREPEAT,
</autogen>

changeinput подвержен той же ошибке.

Другой обходной путь — просто перейти на другой источник ввода и обратно:

<root>
  <vkchangeinputsourcedef>
    <name>KeyCode::VK_CHANGE_INPUTSOURCE_HIRAGANA</name>
    <inputsourceid_equal>com.apple.inputmethod.Kotoeri.Japanese</inputsourceid_equal>
  </vkchangeinputsourcedef>
  <vkchangeinputsourcedef>
    <name>KeyCode::VK_CHANGE_INPUTSOURCE_SPANISH</name>
    <inputsourceid_equal>com.apple.keylayout.Spanish</inputsourceid_equal>
  </vkchangeinputsourcedef>
  <vkchangeinputsourcedef>
    <name>KeyCode::VK_CHANGE_INPUTSOURCE_US</name>
    <inputsourceid_equal>com.apple.keylayout.US</inputsourceid_equal>
  </vkchangeinputsourcedef>
  <vkchangeinputsourcedef>
    <name>KeyCode::VK_CHANGE_INPUTSOURCE_CHINESE</name>
    <inputsourceid_equal>com.apple.inputmethod.TCIM.Pinyin</inputsourceid_equal>
  </vkchangeinputsourcedef>
  <item>
    <name>inputsources</name>
    <identifier>inputsources</identifier>
    <autogen>__KeyOverlaidModifier__ KeyCode::COMMAND_L, ModifierFlag::COMMAND_L | ModifierFlag::NONE, KeyCode::VK_CHANGE_INPUTSOURCE_US, KeyCode::COMMAND_L</autogen>
    <autogen>__KeyOverlaidModifier__ KeyCode::COMMAND_R, ModifierFlag::COMMAND_R | ModifierFlag::NONE, KeyCode::VK_CHANGE_INPUTSOURCE_SPANISH, KeyCode::COMMAND_R</autogen>
    <autogen>__KeyToKey__ KeyCode::C, ModifierFlag::OPTION_L | ModifierFlag::COMMAND_L | ModifierFlag::NONE, KeyCode::VK_CHANGE_INPUTSOURCE_CHINESE, KeyCode::VK_CHANGE_INPUTSOURCE_US, KeyCode::VK_CHANGE_INPUTSOURCE_CHINESE</autogen>
    <autogen>__KeyToKey__ KeyCode::C, ModifierFlag::OPTION_R | ModifierFlag::COMMAND_R | ModifierFlag::NONE, KeyCode::VK_CHANGE_INPUTSOURCE_HIRAGANA, KeyCode::VK_CHANGE_INPUTSOURCE_US, KeyCode::VK_CHANGE_INPUTSOURCE_HIRAGANA</autogen>
  </item>
</root>
Ваше второе решение отключает командную клавишу для всех других сочетаний клавиш (например, + Wдля закрытия окна), что определенно не то, что мне нужно... Что касается первого решения, я попробую его позже.
Что касается вашего первого решения, я не уверен, почему вы хотите ждать 160 мс и переключать его три раза...
Хммм... У меня все еще есть проблемы с __KeyOverlaidModifier__указанным выше, но я переключил источник ввода на японский и испанский языки, потому что источник ввода на японском языке может работать правильно, если вы установите его в настройках Karabiner в разделе источника ввода на японском языке. Спасибо за ответ.

является «мертвым» ключом, ключом-модификатором. Он ничего не делает сам по себе, хотя, поскольку он ведет подсчет количества нажатий, возможно, поэтому он работает со второй попытки.

Более того... зачем вам использовать для переключения языка ввода, тем самым исключив его использование для любой другой функции.

Почему бы вместо этого не использовать F-клавиши?

Лучшее решение может быть одним из этих...

https://superuser.com/questions/224161/переключиться на конкретный источник ввода

Я не придерживаюсь использования Apple Key. (может быть, вы перепутали (командную клавишу) с клавишей Apple...?)
Ну, это потому, что его проще всего печатать, а переключение между разными языками происходит очень часто.
моя точка зрения остается в силе.

Проверь это

переключаться простым нажатием left_shift -> us, right_shift->ua

"rules": [
                    {
                        "description": "Right Shift to UA",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "right_shift",
                                    "modifiers": {
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "right_shift",
                                        "lazy": true
                                    }
                                ],
                                "to_if_alone": [
                                    {
                                        "select_input_source": {
                                            "language": "uk"
                                        }
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },
                    {
                        "description": "Right Shift to US",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "left_shift",
                                    "modifiers": {
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "left_shift",
                                        "lazy": true
                                    }
                                ],
                                "to_if_alone": [
                                    {
                                        "select_input_source": {
                                            "language": "en"
                                        }
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    }
                ]
            }