У меня есть 3 источника ввода (языки), настроенные в настройках ввода текста. Давайте назовем их E (как на английском) и A и B для двух других языков. В основном я переключаюсь между английским и A или английским и B и почти никогда не переключаюсь между A и B. Однако переключение горячих клавиш всегда переключает их в направлении E-> A-> B или E < -A < -B. Это очень неудобно.
Я ищу способ сделать это, так как он реализован в MacOS, где переключатель переключается между двумя последними языками по умолчанию, но вы можете заставить его перейти на третий, используя отдельный ярлык или через меню панели инструментов, как показано на скриншоте ниже:
Можно ли настроить что-то подобное в Ubuntu?
РЕДАКТИРОВАТЬ: Джейкоба Решение ниже позволяет создать собственный ярлык для переключения между двумя языками. Я изменил его скрипт для репликации схемы переключения MacOS, где последние 2 языка автоматически циклические. Вы можете видеть это здесь . Сообщение в блоге, объясняющее детали здесь .
То, что Вы описываете, является в основном сочетанием клавиш для переключения между двумя входными языками. Сценарий ниже предложит опцию.
#!/usr/bin/env python3
import subprocess
import sys
args = sys.argv[1:]
k = ["org.gnome.desktop.input-sources", "current"]
def get(command): return subprocess.check_output(command).decode("utf-8")
currlang = get(["gsettings", "get", k[0], k[1]]).strip().split()[-1]
newlang = args[1] if currlang == args[0] else args[0]
subprocess.Popen(["gsettings", "set", k[0], k[1], newlang])
set_lang.py
В окне терминала, выполненном команда:
gsettings get org.gnome.desktop.input-sources sources
Это произведет как:
[('xkb', 'us+intl'), ('xkb', 'us'), ('xkb', 'nl')]
Этот список представляет Ваши входные языки. Индекс языков равен положению в списке, начиная с 0
, например. ('xkb', 'us')
имеет индекс 1 (в моем случае).
Теперь тестовый прогон сценарий для переключения между двумя индексами. Переключаться между ('xkb', 'us+intl')
и ('xkb', 'nl')
(индекс 0
и 2
):
python3 /path/to/set_lang.py 1 3
где языки бота представлены аргументами
1 3
Если все хорошо работает, добавьте его к shortut ключу: выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду:
python3 /path/to/set_lang.py 1 3
к ярлыку по Вашему выбору.
Можно затем использовать существующий ярлык для просмотра всех языков или (конечно) меню.
Доступные языки могут быть получены командой:
gsettings get org.gnome.desktop.input-sources sources
В настоящее время язык набора может быть получен командой:
gsettings get org.gnome.desktop.input-sources current
который произведет (a.o). индекс в настоящее время языка набора.
Мы можем установить язык (например). команда:
gsettings set org.gnome.desktop.input-sources current 0
установить язык на первое в списке (индекс 0)
Короче говоря: если мы запустим скрипт мы два языка (индексы) как аргументы, то сценарий посмотрит, каков текущий индекс, переключится на другой.
Версия сценария ниже переключится между двумя последними используемыми языками, которые оказались подобными поведению MacOs.
#!/usr/bin/env python3
import subprocess
import os
k = ["org.gnome.desktop.input-sources", "current"]
stored = os.path.join(os.environ["HOME"], ".lastlang")
def get(command): return subprocess.check_output(command).decode("utf-8")
currlang = get(["gsettings", "get", k[0], k[1]]).strip().split()[-1]
try:
newlang = open(stored).read().strip()
except FileNotFoundError:
newlang = currlang
open(stored, "wt").write(currlang)
subprocess.Popen(["gsettings", "set", k[0], k[1], newlang])
Я добавил эту версию как дополнительную опцию. Два последних используемых языка сохранятся (помниться) после перезагрузки.
switchlang.py
Тестовый прогон сценарий командой:
python3/ path/to/switchlang.py
После первого показа, языка переключателя из меню, теперь выполненного
python3/ path/to/switchlang.py
снова. С тех пор сценарий будет всегда переключаться между последними двумя используемыми языками.
Go:> Системные настройки> Ввод текста
and add languages to "Input sources to use:"
, обязательно отметьте «Показать текущий источник входного сигнала в строке меню» "просто выберите источники входного сигнала из выпадающего меню.
В последних версиях Ubuntu с рабочим столом GNOME по умолчанию все работает именно так (по крайней мере, в моем случае с сочетанием клавиш Ctrl+Пробел). Но в десктопной версии Unity это все еще проблема...
Обходным путем для Unity является использование переключателя ibus, который обеспечивает функцию переключения MRU из коробки. Он используется Unity и обычно устанавливается вместе с ним по умолчанию. (Если нет, установите его и задайте в Системных настройках -> Языковая поддержка -> Система ввода с клавиатуры.)
Вы можете настроить его с помощью ibus-setup
gui (запуск из терминала):
Теперь удалите ярлыки в конфигурации Unity в разделе «Системные настройки» -> «Ввод текста» и снимите флажок «Показать текущий источник ввода в строке меню» (в любом случае это не будет работать с переключателем ibus).
Теперь все настроено, и все должно работать. Если вы не смогли найти свой язык в ibus (как это случилось со мной с английским (Великобритания)) - вы можете легко добавить его вручную, проверьте обходной путь здесь - https://bugs.launchpad.net/ubuntu/+ источник/ibus/+ошибка/1540587.
И еще напоследок: у ibus есть свой индикатор, но он уродлив и все равно не отображается в строке меню Unity, так что если хотите увидеть индикатор текущего языка — попробуйте gxkb. Он покажет красивый флаг страны вашего текущего языка. (Вы можете добавить gxkb в Startup Applications для автоматического запуска при входе в систему.)