Стиль окон переключения групп входного языка

Я хочу включить еще один входной язык, и интересно, там какой-либо способ сгруппировать подобные языки? Предположим, что у меня есть английский, русский и украинский язык. Русский язык и украинский язык подобны, и было бы удобно сгруппировать их. Связывать ctrl+shift - переключающийся между кириллическими и латинскими группами, alt+shift - переключающий внутреннюю группу между кириллическими языками. Действительно ли это возможно?

0
задан 6 February 2017 в 06:56

1 ответ

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

enter image description here

Подготовка

  1. В терминале, выполненном:

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

    Это произведет что-то как (в моем случае):

    [('xkb', 'us+intl'), ('xkb', 'us'), ('xkb', 'nl'), ('xkb', 'be')]
    
  2. Теперь просто создайте файл в Вашем $HOME каталог (точно) назвал:

    langsets
    

    где Вы группируете языки к своей симпатии. В моем примере я сгруппируюсь'us+intl' вместе с 'us', и 'nl' с 'be'. Я группирую их согласно их порядку в списке, который заканчивается в файл:

    содержание файла ~/home/langsets:

    1 2
    3 4
    

    Как Вы видите на каждой строке, я поместил числа индекса языков, разделенных пространством (где 1 первый язык в выходном списке).

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

  3. Сценарий

    #!/usr/bin/env python3
    import subprocess
    import os
    import sys
    import ast
    
    arg = sys.argv[1]
    
    key = "org.gnome.desktop.input-sources"
    
    f = [f for f in [l.strip().split() for l in open(
        os.path.join(os.environ["HOME"], "langsets")
        ).readlines()] if f]
    
    def get(cmd): return subprocess.check_output(cmd).decode("utf-8")
    
    def execute(cmd):
        subprocess.Popen(cmd)
    
    langs = ast.literal_eval(get(["gsettings", "get", key, "sources"]).strip())
    currlang = str(int(get(["gsettings", "get", key, "current"]).split()[-1].strip())+1)
    
    currgroup = [l for l in f if currlang in l][0]
    
    if arg == "nextcurr":
        currsub = currgroup.index(currlang)
        try:
            nextlang = currgroup[currsub+1]
        except IndexError:
            nextlang = currgroup[0]
        nextlang = str(int(nextlang)-1)
    
    elif arg == "nextgroup":
        try:
            nextlang = f[[i for i, l in enumerate(f) if f[i] == currgroup][0]+1][0]
        except IndexError:
            nextlang = f[0][0]
    
    subprocess.Popen(["gsettings", "set", key, "current", nextlang])
    
  4. Скопируйте сценарий в пустой файл, сохраните его как language_set.py

  5. Тестовый прогон сценарий с двумя командами:

    python3 /path/to/language_set.py nextgroup
    

    python3 /path/to/language_set.py nextcurr
    

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

  6. Если все хорошо работает, создайте два сочетания клавиш. Один для переключения на следующую группу, один для переключения в текущей группе.

    Выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команды ниже.

    1. Измениться между группами языка:

      python3 /path/to/language_set.py nextgroup
      
    2. Измениться между языками в группе:

      python3 /path/to/language_set.py nextcurr
      
3
ответ дан 7 November 2019 в 01:31

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

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