Resolvendo o problema de troca usando alt+shift no Linux, em aplicativos Electron

Olá colegas!

Quero compartilhar minha solução para o problema indicado no título. Fui inspirado a escrever este artigo por um colega brnovk, que não foi preguiçoso e ofereceu uma solução parcial (para mim) para o problema. Fiz minha própria “muleta” que me ajudou. Estou compartilhando com você.

Descrição do problema

Usei o Ubuntu 18.04 para trabalhar e notei recentemente que ao alternar layouts usando alt+shift em aplicativos como Visual Studio Code, Skype, Slack e outros que foram criados usando Electron, ocorre o seguinte problema: o foco do campo de entrada vai para o topo painel da janela (menu). Por outros motivos, mudei para o Fedora + KDE e percebi que o problema não havia desaparecido. Enquanto procurava uma solução, encontrei um artigo maravilhoso Como consertar o Skype você mesmo. Muito obrigado camarada brnovk, que falou detalhadamente sobre o problema e compartilhou seu método para resolvê-lo. Mas o método indicado no artigo resolveu o problema com apenas uma aplicação, nomeadamente o Skype. Para mim também foi fundamental entender o Visual Studio Code, pois escrever mensagens com menu saltitante, embora chato, não é tanto se você estiver envolvido no desenvolvimento. Além disso, um colega sugeriu uma solução em que o menu do aplicativo desaparece completamente, e eu realmente não gostaria de perder o menu no VS Code.

Tentei entender o que há de errado

Então, decidi reservar um tempo para descobrir o que estava acontecendo. Agora vou descrever brevemente o caminho que percorri, talvez alguém com mais conhecimento no assunto ajude a explicar as dificuldades que encontrei.

Abri o Visual Studio Code e comecei a usar diferentes combinações de Alt+<%something%> para ver como o aplicativo respondia. Em quase todos os casos, todas as combinações, exceto Alt+Shift, funcionaram sem perder o foco. Parecia que alguém estava comendo o Shift pressionado, que veio depois de manter Alt pressionado, e o aplicativo pensou que eu pressionei Alt, então não pressionei nada, soltei Alt e alegremente lançou meu foco em seu menu, o que parecia bastante lógico para isto.

Abri as configurações para alternar layouts de teclado (você sabe, esta longa lista com caixas de seleção e todos os tipos de configurações de teclas) e configurei-o para alternar layouts usando o botão Alt, sem nenhum clique adicional.

Resolvendo o problema de troca usando alt+shift no Linux, em aplicativos Electron

Depois disso, Alt+Tab para alternar janelas parou de funcionar. Apenas Tab funcionou, ou seja, alguém “comeu” meu Alt novamente. Não restavam dúvidas sobre quem era esse “alguém”, mas eu não tinha ideia do que poderia ser feito com ele.

Mas como o problema precisava ser resolvido de alguma forma, uma solução me veio à mente:

  1. Nas configurações, desative a tecla de atalho para alternar o layout do teclado (desmarque todas as caixas de seleção na seção Mudar para outro layout);
  2. Crie sua própria tecla de atalho que mudaria o layout para mim

Descrição da solução

Primeiro, vamos instalar um programa que permite atribuir comandos às teclas Xbindkeys. Infelizmente, as ferramentas padrão não me permitiram criar uma tecla de atalho para uma combinação como Alt+Shift através de uma interface bonita. Pode ser feito para Alt+S, Alt+1, Alt+shift+Y, etc. etc., mas isso não é adequado para nossa tarefa.

sudo dnf install xbindkeysrc

Mais detalhes sobre o assunto estão disponíveis em ArchWiki
A seguir, criaremos um arquivo de configurações de exemplo para o programa. O exemplo é bem curto, com alguns comandos, exatamente o que você precisa para descobrir como trabalhar com ele:

xbindkeys -d > ~/.xbindkeysrc

Como você pode ver no exemplo do arquivo, precisamos indicar a tecla de atalho que queremos utilizar e o comando que deve ser executado. Parece simples.


# Examples of commands:
"xbindkeys_show"
  control+shift + q
# set directly keycode (here control + f with my keyboard)
"xterm"
  c:41 + m:0x4

Como tecla de atalho, você pode usar escrita legível ou códigos de teclas. Funcionou para mim apenas com códigos, mas ninguém proíbe experimentar um pouco.

Para obter os códigos você precisa usar o comando:

xbindkeys -k

Uma pequena janela “X” será aberta. Você só precisa pressionar as teclas quando o foco estiver nesta janela! Somente neste caso você verá algo assim no terminal:


[podkmax@localhost ~]$ xbindkeys -k
Press combination of keys or/and click under the window.
You can use one of the two lines after "NoCommand"
in $HOME/.xbindkeysrc to bind a key.
"(Scheme function)"
    m:0x4 + c:39
    Control + s

No meu caso, a combinação de teclas Alt+Shift fica assim:

m:0x8 + c:50

Agora precisamos ter certeza de que quando você clica nesta combinação, o layout muda. Encontrei apenas um comando funcional para especificar o layout:


setxkbmap ru
setxkbmap us

Como você pode ver no exemplo, ele só pode habilitar um ou outro layout, então nada me veio à mente além de escrever um script.


vim ~/layout.sh
#!/bin/bash
LAYOUT=$(setxkbmap -print | awk -F + '/xkb_symbols/ {print $2}')
if [ "$LAYOUT" == "ru" ]
        then `/usr/bin/setxkbmap us`
        else `/usr/bin/setxkbmap ru`
fi

Agora, se os arquivos .xbindkeysrc e layout.sh estiverem localizados no mesmo diretório, a visualização final do arquivo .xbindkeysrc será semelhante a esta:


# Examples of commands:

"xbindkeys_show"
  control+shift + q

# set directly keycode (here control + f with my keyboard)
"xterm"
  c:41 + m:0x4

# specify a mouse button
"xterm"
  control + b:2
#А вот то, что добавил я
"./layout.sh"
  m:0x8 + c:50

Depois disso aplicamos as alterações:


xbindkeys -p

E você pode verificar. Não se esqueça de desabilitar todas as opções de troca de layout nas configurações padrão.

Total

Colegas, espero que este artigo possa ajudar alguém a se livrar rapidamente de um problema chato. Pessoalmente, passei o dia inteiro de folga tentando descobrir e resolver o problema de alguma forma, para não me distrair mais durante o horário de trabalho. Escrevi este artigo para economizar tempo e nervosismo de alguém. Muitos de vocês usam um método alternativo de troca de layout e não entendem qual é o problema. Pessoalmente, gosto de alternar com Alt+Shift. E é assim que quero que funcione. Se você compartilha da minha opinião e se depara com esse problema, este artigo deve ajudá-lo.

Fonte: habr.com

Adicionar um comentário