Я хочу включить еще один входной язык, и интересно, там какой-либо способ сгруппировать подобные языки? Предположим, что у меня есть английский, русский и украинский язык. Русский язык и украинский язык подобны, и было бы удобно сгруппировать их. Связывать ctrl+shift - переключающийся между кириллическими и латинскими группами, alt+shift - переключающий внутреннюю группу между кириллическими языками. Действительно ли это возможно?
В терминале, выполненном:
gsettings get org.gnome.desktop.input-sources sources
Это произведет что-то как (в моем случае):
[('xkb', 'us+intl'), ('xkb', 'us'), ('xkb', 'nl'), ('xkb', 'be')]
Теперь просто создайте файл в Вашем $HOME
каталог (точно) назвал:
langsets
где Вы группируете языки к своей симпатии. В моем примере я сгруппируюсь'us+intl'
вместе с 'us'
, и 'nl'
с 'be'
. Я группирую их согласно их порядку в списке, который заканчивается в файл:
содержание файла ~/home/langsets
:
1 2
3 4
Как Вы видите на каждой строке, я поместил числа индекса языков, разделенных пространством (где 1 первый язык в выходном списке).
Можно установить любую комбинацию языков (как долго, поскольку Вы не помещаете языки в несколько групп), и любое количество групп языка, просто создайте новую строку с индексами.
Сценарий
#!/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])
Скопируйте сценарий в пустой файл, сохраните его как language_set.py
Тестовый прогон сценарий с двумя командами:
python3 /path/to/language_set.py nextgroup
python3 /path/to/language_set.py nextcurr
видеть, перемещается ли сценарий (впоследствии) к следующей группе языка или к следующему языку в текущей группе.
Если все хорошо работает, создайте два сочетания клавиш. Один для переключения на следующую группу, один для переключения в текущей группе.
Выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команды ниже.
Измениться между группами языка:
python3 /path/to/language_set.py nextgroup
Измениться между языками в группе:
python3 /path/to/language_set.py nextcurr