输入语言组切换窗口样式

输入语言组切换窗口样式

我想启用另一种输入语言,我想知道是否有办法将相似的语言分组?假设我有英语、俄语和乌克兰语。俄语和乌克兰语相似,将它们分组会很方便。要绑定 ctrl+shift — 在西里尔语和拉丁语组之间切换,alt+shift — 在西里尔语组内切换。可以吗?

答案1

根据参数,脚本切换到下一个语言组,或者当前组内的下一种语言。

在此处输入图片描述

准备

  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
      

相关内容