É possível atribuir o idioma padrão do teclado para aplicativos específicos? Eu sei que existe uma opção para sempre iniciar um aplicativo com um idioma de teclado padrão, mas não é isso que eu quero.
Estou procurando algo semelhante a "áreas de trabalho fixas" que você pode definir usando o CompizConfig (você define o Chrome para sempre abrir no X1Y1, terminal no X2Y1 etc.). Algo onde eu definiria Chrome: Czech, terminal: English, Spotify: English, ...
Respostas:
Introdução
O script abaixo define o idioma para cada programa definido pelo usuário, de acordo com a posição desse idioma no menu de idiomas. Por exemplo, se meu pedido for: inglês (1), chinês (2) e russo (3), posso configurar o Firefox para o idioma 2, o terminal para o idioma 1 e o LibreOffice para o idioma 3.
O script vem em duas partes: a primeira parte é o script real que faz o trabalho, o segundo script serve como um elemento de controle. A idéia é executar o script de configuração de idioma como um aplicativo de inicialização e sempre que você precisar alterar manualmente o idioma - clique duas vezes no atalho do script do controlador.
Pré-requisitos
wmctrl
programa comsudo apt-get install wmctrl
.Roteiro
Script do Controlador
Arquivo do iniciador (.desktop) para o script set-lang.sh
Arquivo do Launcher (.desktop) para set-lang-controller.sh
Fazendo o script funcionar
bin
. Você pode fazer isso no gerenciador de arquivos ou usar o comandomkdir $HOME/bin
no terminalbin
pasta, crie dois arquivos:set-lang.sh
eset-lang-control.sh
. Salve o scriptset-lang.sh
e o script do controlador emset-lang-control.sh
. Torne os dois scripts executáveis comsudo chmod +x $HOME/bin/set-lang-control.sh $HOME/bin/set-lang.sh
.desktop
arquivos. Um éset-lang.desktop
. Deve ser colocado no.config/autostart
diretório oculto . O segundo éset-lang-controller.desktop
, pode ser colocado em suabin
pasta. Em seguida, arraste e fixe oset-lang-controller.desktop
arquivo no iniciador . Isso se tornará o atalho para interromper e retomar temporariamente a execução do script.Observe que a linha
Exec=
deve ser alterada para ter seu nome de usuário real no caminho para o script (porque esse é seu diretório pessoal). Por exemplo, o meu seriaExec=/home/serg/bin/set-lang.sh
Explicação e personalização:
O próprio script é executado em um loop while infinito e verifica a janela ativa atual. Se a janela ativa atual corresponder a uma das opções na estrutura do caso, mudaremos para o idioma apropriado. Para evitar a configuração constante, cada parte da estrutura do caso possui uma instrução if que verifica se o idioma já foi definido com o valor desejado.
O clique duplo no iniciador
set-lang-controller.sh
verificará o status doset-lang.sh
script; se o script estiver em execução - ele será pausado e, se o script estiver em pausa, será retomado. Uma notificação será mostrada com a mensagem apropriada.Para personalizar o script, você pode abrir os aplicativos desejados, executar
wmctrl -lx
e anotar a terceira coluna - a classe da janela. Saída de amostra:Selecione as classes de janela apropriadas para cada programa. Em seguida, vá para a parte do script que permite a personalização e adicione duas entradas para PROG_CLASS e LANG. Em seguida, adicione a entrada apropriada na estrutura do caso.
Por exemplo, se eu quiser adicionar o Writer do LibreOffice, abro a janela do LibreOffice Writer, vou para o terminal e corro
wmctrl -lx
. Isso me dirá que a janela do Writer tem classelibreoffice.libreoffice-writer
. Em seguida, irei ao script, adicionareiPROG_CLASS_4=libreoffice.libreoffice-writer
eLANG4=3
na área apropriada. Observe o número correspondente 4. Em seguida, vá para estrutura do caso e adicione a seguinte entrada entre last;;
eesac
:Mais uma vez, observe o sinal $ e o número correspondente 4.
Além disso, se o script estiver sendo executado como um item de inicialização automática e você desejar pará-lo temporariamente para personalizá-lo, use
pkill set-lang.sh
e continue comnohup set-lang.sh > /dev/null 2&>1 &
Nota pequena: outra maneira de descobrir a classe de janela para um programa (o material que antecede o suporte redondo único na estrutura do caso) é usar this
xprop
eawk
oneliner:xprop | awk '/WM_CLASS/ {gsub(/"/," "); print $3"."$5}
fonte
kill -STOP $(pgrep set-lang.sh)
e depois continuar com o scriptkill -CONT $(pgrep set-lang.sh)
. Dessa forma, você pode pausá-lo, alternar idiomas normalmente e depois continuar.~/bin
não precisam do caminho (nem da extensão, pois está$PATH
após um novo login, consulte: lintian.debian.org/tags/script-with-language-extension .html ) e você pode combinar parar / iniciar em um.desktop
arquivo; em uma lista rápida ou em uma função de alternância. parece muito perfeito para mim.Você pode instalar
gxneur
para isso executandoEste software pode alternar automaticamente os layouts, mas não é perfeito com isso.
Mas possui ferramentas muito boas para configurar opções de layout manual.
Você pode fazer exatamente o que quiser. Para definir layouts específicos para aplicativos específicos.
fonte
O script abaixo é uma versão editada deste , que foi postada como uma solução semelhante para um único aplicativo (
gnome-terminal
) há um tempo atrás.O script foi parcialmente reescrito para esta pergunta, para poder usá-lo para definir automaticamente idiomas para vários aplicativos.
Como usar na prática; lembrar automaticamente o idioma definido por aplicativo
Se o script for iniciado pela primeira vez, o idioma atual é assumido como sendo o idioma padrão, que é lembrado em um arquivo oculto:
~/.lang_set
.Então o uso é simples: se você executar, por exemplo,
gedit
na janela da frente, e definir um idioma diferente, esse idioma será automaticamente conectado agedit
partir de então, até você mudar o idioma novamente comgedit
na frente.O número de idiomas / aplicativos específicos é, em princípio, ilimitado; basta executar o aplicativo e definir o idioma com a janela do aplicativo na frente. O aplicativo será automaticamente definido e lembrado sem editar o código.
Evento impulsionado?
Embora o script seja executado em um loop, o consumo de recursos é mínimo. Evento orientado significaria que o evento é uma alteração na janela da frente. Não vejo outra opção senão "espionar" a janela da frente mais do que fazer check-in em um loop.
O script
Como configurar
O script usa ambos
xdotool
ewmctrl
:Copie o script acima em um arquivo vazio, salve-o como
set_language.py
Execute-o de teste pelo comando:
Se tudo funcionar como esperado, adicione-o a Aplicativos de inicialização: Adicionar a Aplicativos de inicialização: Dash> Aplicativos de inicialização> Adicionar. Adicione o comando:
fonte