Grupos de idiomas de entrada que alternam o estilo das janelas

0

Eu quero ativar mais um idioma de entrada e gostaria de saber se há alguma maneira de agrupar idiomas semelhantes? Suponha que eu tenha inglês, russo e ucraniano. Russo e ucraniano são semelhantes e seria conveniente agrupá-los. Para ligar ctrl + shift - alternando entre grupos cirílicos e latinos, alt + shift - alternando dentro do grupo entre os idiomas cirílicos. É possível?

    
por Михаил Павлов 02.02.2017 / 18:21

1 resposta

3

Script para alternar para o próximo grupo de idiomas ou para o próximo idioma dentro do grupo atual, dependendo do argumento.

Preparação

  1. Emumterminal,execute:

    gsettingsgetorg.gnome.desktop.input-sourcessources

    Issoproduziráalgocomo(nomeucaso):

    [('xkb','us+intl'),('xkb','us'),('xkb','nl'),('xkb','be')]
  2. Agora,bastacriarumarquivodentrododiretório$HOME(exatamente)chamado:

    langsets

    ondevocêagrupaosidiomasdeacordocomoseugosto.Nomeuexemplo,agruparei'us+intl'juntocom'us'e'nl'com'be'.Agrupá-losporordemnalista,oqueresultaemumarquivo:

    conteúdodoarquivo~/home/langsets:

     1 2 3 4

    Como você pode ver, em cada linha, eu coloco os números do índice dos idiomas, separados por um espaço (onde 1 é o primeiro idioma na lista de saída).

    Você pode definir qualquer combinação de idiomas (desde que não coloque idiomas em vários grupos), e qualquer número de grupos de idiomas , basta criar um novo linha com índices.

  3. O script

    #!/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. Copie o script em um arquivo vazio, salve-o como language_set.py

  5. Teste- execute o script com os dois comandos:

    python3 /path/to/language_set.py nextgroup
    

    um

    python3 /path/to/language_set.py nextcurr
    

    para ver se o script (subseqüentemente) se move para o próximo grupo de idiomas ou para o próximo idioma no grupo atual.

  6. Se tudo funcionar bem, crie dois atalhos de teclado. Um para mudar para o próximo grupo, um para mudar dentro do grupo atual.

    Escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione os comandos abaixo.

    1. Para alterar entre grupos de idiomas:

      python3 /path/to/language_set.py nextgroup
      
    2. Para mudar entre os idiomas dentro de um grupo :

      python3 /path/to/language_set.py nextcurr
      
por Jacob Vlijm 02.02.2017 / 20:33