1. Alternar entre dois idiomas (fixos)
O que você descreve é basicamente um atalho de teclado para alternar entre dois idiomas de entrada. O script abaixo oferecerá a opção.
#!/usr/bin/env python3
import subprocess
import sys
args = sys.argv[1:]
k = ["org.gnome.desktop.input-sources", "current"]
def get(command): return subprocess.check_output(command).decode("utf-8")
currlang = get(["gsettings", "get", k[0], k[1]]).strip().split()[-1]
newlang = args[1] if currlang == args[0] else args[0]
subprocess.Popen(["gsettings", "set", k[0], k[1], newlang])
Como usar
- Copie o script em um arquivo vazio, salve-o como
set_lang.py
-
Em uma janela de terminal, execute o comando:
gsettings get org.gnome.desktop.input-sources sources
Isso será exibido como:
[('xkb', 'us+intl'), ('xkb', 'us'), ('xkb', 'nl')]
Esta lista representa seus idiomas de entrada. O índice dos idiomas é igual à posição na lista, começando com
0
, por ex.('xkb', 'us')
tem índice 1 (no meu caso). -
Agora teste e execute o script para alternar entre dois índices. Para alternar entre
('xkb', 'us+intl')
e('xkb', 'nl')
(índice0
e2
):python3 /path/to/set_lang.py 1 3
onde as linguagens bot são representadas pelos argumentos
1 3
-
Se tudo funcionar bem, adicione-o a uma tecla de atalho: escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:
python3 /path/to/set_lang.py 1 3
para um atalho de sua escolha.
Você pode usar o atalho existente para navegar em todos os idiomas ou, é claro, no menu.
Breve explicação
-
Os idiomas disponíveis podem ser recuperados pelo comando:
gsettings get org.gnome.desktop.input-sources sources
-
A linguagem atualmente definida pode ser recuperada pelo comando:
gsettings get org.gnome.desktop.input-sources current
que irá mostrar (a.o.) o índice do idioma atualmente definido.
-
Podemos definir o idioma por (por exemplo) o comando:
gsettings set org.gnome.desktop.input-sources current 0
para definir o idioma como o primeiro da lista (índice 0)
Resumindo: se rodarmos o script em duas linguagens (indices) como argumentos, o script irá procurar qual é o índice atual, irá mudar para o outro.
2. Alterna entre os dois últimos idiomas usados
A versão do script abaixo irá alternar entre os dois últimos idiomas usados , o que acabou sendo semelhante ao comportamento dos MacOs.
#!/usr/bin/env python3
import subprocess
import os
k = ["org.gnome.desktop.input-sources", "current"]
stored = os.path.join(os.environ["HOME"], ".lastlang")
def get(command): return subprocess.check_output(command).decode("utf-8")
currlang = get(["gsettings", "get", k[0], k[1]]).strip().split()[-1]
try:
newlang = open(stored).read().strip()
except FileNotFoundError:
newlang = currlang
open(stored, "wt").write(currlang)
subprocess.Popen(["gsettings", "set", k[0], k[1], newlang])
Eu adicionei esta versão como uma opção adicional. Os dois últimos idiomas usados persistirão (sejam lembrados) após a reinicialização.
Como usar
- Copie o script em um arquivo vazio, salve-o como
switchlang.py
-
Teste- execute o script pelo comando:
python3/ path/to/switchlang.py
Após a primeira execução, mude o idioma do menu, agora execute
python3/ path/to/switchlang.py
novamente. A partir de então, o script sempre alternará entre os dois últimos idiomas usados.