我想启用另一种输入语言,我想知道是否有办法将相似的语言分组?假设我有英语、俄语和乌克兰语。俄语和乌克兰语相似,将它们分组会很方便。要绑定 ctrl+shift — 在西里尔语和拉丁语组之间切换,alt+shift — 在西里尔语组内切换。可以吗?
答案1
根据参数,脚本切换到下一个语言组,或者当前组内的下一种语言。
准备
在终端中运行:
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