Solução para o problema de alternância com alt+shift no Linux, em aplicativos Electron

Olá, colegas!

Quero compartilhar a solução que encontrei para o problema mencionado no título. A ideia para o artigo veio de um colega. brnovk, que não se intimidou e sugeriu uma solução parcial (para mim) para o problema. Eu fiz o meu "gambiarrão", que me ajudou. Estou compartilhando com vocês.

Descrição do problema

Usei o Ubuntu 18.04 para trabalhar e, recentemente, notei que, ao mudar o layout com alt+shift em aplicações como Visual Studio Code, Skype, Slack e outras criadas com Electron, surgia o seguinte problema: o foco do campo de entrada ia para a barra superior da janela (menu). Por outros motivos, migrei para Fedora + KDE e percebi que o problema persistia. Em busca de uma solução, encontrei um artigo maravilhoso Reparamos o Skype com as próprias mãos. Um enorme obrigado ao camarada brnovk, que detalhou o problema e compartilhou sua maneira de resolvê-lo. Mas o método indicado no artigo resolvia a questão apenas com um aplicativo, especificamente o Skype. Para mim, também era crítico entender o Visual Studio Code, porque escrever mensagens com o menu pulando é irritante, mas não tanto quando estou desenvolvendo. Além disso, o colega sugeriu uma solução na qual o menu do aplicativo desaparecia completamente, e eu realmente não queria perder o menu no VS Code.

Tentei entender qual era o problema

Então, decidi dedicar um tempo para investigar o que estava acontecendo. Agora vou descrever brevemente o caminho que segui, talvez alguém mais entendido neste assunto possa esclarecer as dificuldades que enfrentei.

Abri o Visual Studio Code e comecei a pressionar diferentes combinações de Alt+, observando a reação do aplicativo. Em quase todos os casos, todas as combinações, exceto Alt+Shift, funcionavam sem perda de foco. A impressão que tive foi que alguém estava

comendo

Solução para o problema de alternância com alt+shift no Linux, em aplicativos Electron

Depois disso, o Alt+Tab parou de funcionar para alternar entre janelas. Somente o Tab funcionava, ou seja, alguém novamente 'estava comendo' o meu Alt. Quem é esse 'alguém' já não tinha mais perguntas, mas não sei o que fazer com ele.

Mas como o problema precisava ser resolvido de alguma maneira, então me veio a solução:

  1. Nas configurações, desabilitar o atalho para alternar o layout do teclado (desmarcar todas as caixas na seção Alternar para outro layout);
  2. Criar meu próprio atalho que trocaria o layout para mim

Descrição da solução

Para começar, vamos instalar um programa que permite atribuir comandos a teclas, o Xbindkeys. Infelizmente, os recursos padrões não me permitiram criar um atalho para combinações como Alt+Shift através de uma interface bonita. É possível fazer para Alt+S, Alt+1, Alt+Shift+Y, etc., mas isso não serve para nossa tarefa.

sudo dnf install xbindkeysrc

Mais detalhes sobre isso estão disponíveis na ArchWiki
A seguir, criaremos um exemplo de arquivo de configurações para o programa. O exemplo é bem curto, com alguns comandos, exatamente o que precisamos para entender como trabalhar com ele:

xbindkeys -d > ~/.xbindkeysrc

Como pode ser visto no exemplo que está no arquivo, precisamos indicar o atalho que queremos usar 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 atalho, pode-se usar uma escrita compreensível ou códigos das teclas. Para mim, funcionou apenas com os códigos, mas ninguém proíbe você de experimentar um pouco.

Para obter os códigos, é necessário usar o comando:

xbindkeys -k

Uma pequena janela 'X' irá abrir. As teclas devem ser pressionadas apenas quando a janela estiver em foco! Somente neste caso você verá algo assim no terminal:


[podkmax@localhost ~]$ xbindkeys -k
Pressione a combinação de teclas ou/ou clique sob a janela.
Você pode usar uma das duas linhas após 'NoCommand'
em $HOME/.xbindkeysrc para vincular uma tecla.
"(Função do esquema)"
    m:0x4 + c:39
    Control + s

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

m:0x8 + c:50

Agora precisamos fazer com que, ao pressionar essa combinação, ocorra a troca de layout. Eu encontrei apenas um comando que funciona para indicar o layout:


setxkbmap ru
setxkbmap us

Como pode ser visto no exemplo, ele apenas consegue ativar um ou outro layout, portanto, além de escrever um script, não me veio nada à cabeça.


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 estão no mesmo diretório, o conteúdo final do arquivo .xbindkeysrc fica assim:


# 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 aplicamos as alterações:


xbindkeys -p

E podemos verificar. Não esqueça de desativar qualquer opção de alternância de layout nas configurações padrão.

Resultado

Colegas, espero que este artigo possa ajudar alguém a se livrar rapidamente desse problema incômodo. Pessoalmente, passei todo o meu dia de folga tentando entender e resolver o problema de alguma forma, para não ser mais interrompido durante o horário de trabalho. Escrevi este artigo com o objetivo de economizar tempo e nervos para alguém. Muitos de vocês usam uma forma alternativa de alternar o layout e não entendem qual é o problema. Pessoalmente, gosto de alternar usando Alt+Shift. E quero que funcione exatamente assim. Se você compartilha a minha opinião e encontrou este problema, este artigo deve ajudar você.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster