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 sourcesIsso 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')(índice0e2):python3 /path/to/set_lang.py 1 3onde 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 3para 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 currentque 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 0para 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.pyApós a primeira execução, mude o idioma do menu, agora execute
python3/ path/to/switchlang.pynovamente. A partir de então, o script sempre alternará entre os dois últimos idiomas usados.

