Как я могу быстро переключаться между двумя из нескольких языков?

У меня есть 3 источника ввода (языки), настроенные в настройках ввода текста. Давайте назовем их E (как на английском) и A и B для двух других языков. В основном я переключаюсь между английским и A или английским и B и почти никогда не переключаюсь между A и B. Однако переключение горячих клавиш всегда переключает их в направлении E-> A-> B или E < -A < -B. Это очень неудобно.

Я ищу способ сделать это, так как он реализован в MacOS, где переключатель переключается между двумя последними языками по умолчанию, но вы можете заставить его перейти на третий, используя отдельный ярлык или через меню панели инструментов, как показано на скриншоте ниже:

enter image description here

Можно ли настроить что-то подобное в Ubuntu?

РЕДАКТИРОВАТЬ: Джейкоба Решение ниже позволяет создать собственный ярлык для переключения между двумя языками. Я изменил его скрипт для репликации схемы переключения MacOS, где последние 2 языка автоматически циклические. Вы можете видеть это здесь . Сообщение в блоге, объясняющее детали здесь .

6
задан 14 January 2017 в 04:32

3 ответа

1. Переключитесь между двумя (фиксированными) языками

То, что Вы описываете, является в основном сочетанием клавиш для переключения между двумя входными языками. Сценарий ниже предложит опцию.

#!/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])

Как использовать

  1. Скопируйте сценарий в пустой файл, сохраните его как set_lang.py
  2. В окне терминала, выполненном команда:

    gsettings get org.gnome.desktop.input-sources sources
    

    Это произведет как:

    [('xkb', 'us+intl'), ('xkb', 'us'), ('xkb', 'nl')]
    

    Этот список представляет Ваши входные языки. Индекс языков равен положению в списке, начиная с 0, например. ('xkb', 'us') имеет индекс 1 (в моем случае).

  3. Теперь тестовый прогон сценарий для переключения между двумя индексами. Переключаться между ('xkb', 'us+intl') и ('xkb', 'nl') (индекс 0 и 2):

    python3 /path/to/set_lang.py 1 3
    

    где языки бота представлены аргументами

    1 3
    
  4. Если все хорошо работает, добавьте его к 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)

Короче говоря: если мы запустим скрипт мы два языка (индексы) как аргументы, то сценарий посмотрит, каков текущий индекс, переключится на другой.




2. Переключитесь между двумя последними используемыми языками

Версия сценария ниже переключится между двумя последними используемыми языками, которые оказались подобными поведению 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])

Я добавил эту версию как дополнительную опцию. Два последних используемых языка сохранятся (помниться) после перезагрузки.

Как использовать

  1. Скопируйте сценарий в пустой файл, сохраните его как switchlang.py
  2. Тестовый прогон сценарий командой:

    python3/ path/to/switchlang.py
    

    После первого показа, языка переключателя из меню, теперь выполненного

    python3/ path/to/switchlang.py
    

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

6
ответ дан 14 January 2017 в 14:32
  • 1
    Большое спасибо за Вашу справку. На самом деле я сбросил все, но все еще doesn' t работа. Я помню меня Набор где-нибудь " Ctrl +1" не в системе, больше как в Методе ввода. в то время как теперь я удаляю весь метод ввода, все еще не работаю. – techch3 12 November 2018 в 05:46

Go:> Системные настройки> Ввод текста

  and add languages to "Input sources to use:"

enter image description here

, обязательно отметьте «Показать текущий источник входного сигнала в строке меню» "просто выберите источники входного сигнала из выпадающего меню.

0
ответ дан 14 January 2017 в 04:32

В последних версиях Ubuntu с рабочим столом GNOME по умолчанию все работает именно так (по крайней мере, в моем случае с сочетанием клавиш Ctrl+Пробел). Но в десктопной версии Unity это все еще проблема...

Обходным путем для Unity является использование переключателя ibus, который обеспечивает функцию переключения MRU из коробки. Он используется Unity и обычно устанавливается вместе с ним по умолчанию. (Если нет, установите его и задайте в Системных настройках -> Языковая поддержка -> Система ввода с клавиатуры.)

Вы можете настроить его с помощью ibus-setup gui (запуск из терминала):

  1. на вкладке «Дополнительно» снимите флажок «Использовать системную раскладку клавиатуры»;
  2. добавьте свои языки на вкладке «Метод ввода»;
  3. добавьте ярлык для переключения на вкладке «Общие».

Теперь удалите ярлыки в конфигурации Unity в разделе «Системные настройки» -> «Ввод текста» и снимите флажок «Показать текущий источник ввода в строке меню» (в любом случае это не будет работать с переключателем ibus).

Теперь все настроено, и все должно работать. Если вы не смогли найти свой язык в ibus (как это случилось со мной с английским (Великобритания)) - вы можете легко добавить его вручную, проверьте обходной путь здесь - https://bugs.launchpad.net/ubuntu/+ источник/ibus/+ошибка/1540587.

И еще напоследок: у ibus есть свой индикатор, но он уродлив и все равно не отображается в строке меню Unity, так что если хотите увидеть индикатор текущего языка — попробуйте gxkb. Он покажет красивый флаг страны вашего текущего языка. (Вы можете добавить gxkb в Startup Applications для автоматического запуска при входе в систему.)

0
ответ дан 6 December 2020 в 14:54

Другие вопросы по тегам:

Похожие вопросы: