Olá colegas!
Gostaria de compartilhar minha solução para o problema mencionado no título. Fui inspirado a escrever este artigo por um colega. , que se deu ao trabalho de me oferecer uma solução parcial (para mim) para o problema. Criei meu próprio "truque" que me ajudou. Estou compartilhando com vocês.
Descrição do problema
Usado Ubuntu Tenho usado o Ubuntu 18.04 no trabalho e recentemente notei que, ao alternar o layout usando Alt+Shift em aplicativos como Visual Studio Code, Skype, Slack e outros desenvolvidos com Electron, ocorre o seguinte problema: o foco muda do campo de entrada para o painel superior da janela (menu). Por outros motivos, mudei para o Fedora com KDE e percebi que o problema persistia. Enquanto procurava uma solução, encontrei este excelente artigo. Muito obrigado, camarada. , que descreveu o problema em detalhes e compartilhou sua solução. No entanto, a solução descrita no artigo só funcionava com um aplicativo, o Skype. Também era crucial para mim entender o Visual Studio Code, porque, embora enviar mensagens com um menu que pula de um lado para o outro seja irritante, não é tão ruim assim para quem está desenvolvendo. Além disso, um colega sugeriu uma solução que faz o menu do aplicativo desaparecer completamente, e eu realmente não queria perder o menu no VS Code.
Tentei entender o que estava acontecendo.
Então, decidi dedicar um tempo para descobrir o que estava acontecendo. Vou descrever brevemente o caminho que percorri; talvez alguém com mais conhecimento nessa área possa ajudar a esclarecer as dificuldades que encontrei.
Abri o Visual Studio Code e comecei a pressionar várias combinações de Alt+<%alguma%>, observando a resposta do aplicativo. Em quase todos os casos, todas as combinações, exceto Alt+Shift, funcionaram sem perder o foco. Parecia que algo estava consumindo a tecla Shift que eu pressionava depois de segurar Alt, e o aplicativo interpretava que eu havia pressionado Alt, depois não pressionado nada, soltado Alt e, então, movia meu foco para o menu, o que lhe parecia perfeitamente lógico.
Abri as configurações de troca de layout do teclado (sabe, aquela longa lista com caixas de seleção e todos os tipos de configurações para teclas) e defini a troca de layout para a tecla Alt, sem precisar pressioná-la novamente.

Depois disso, Alt+Tab parou de funcionar para alternar entre janelas. Apenas a tecla Tab funcionava, o que significava que alguém estava "consumindo" minha tecla Alt novamente. Não havia mais dúvidas sobre quem era esse "alguém", mas eu não fazia ideia do que fazer com isso.
Mas como o problema precisava ser resolvido de alguma forma, então uma solução surgiu na mente:
- Nas configurações, desative a tecla de atalho para alternar o layout do teclado (desmarque todas as caixas de seleção na seção "Alternar para outro layout");
- Criar minha própria tecla de atalho para alternar meu layout
Descrição da solução
Primeiro, vamos instalar o Xbindkeys, um programa que permite atribuir comandos a teclas. Infelizmente, as ferramentas integradas não me permitiram criar uma tecla de atalho para uma combinação como Alt+Shift usando sua interface intuitiva. É possível criar atalhos para Alt+S, Alt+1, Alt+Shift+Y e assim por diante, mas isso não é adequado para o nosso propósito.
sudo dnf install xbindkeysrc Mais detalhes sobre isso podem ser encontrados em
Em seguida, vamos criar um arquivo de configurações de exemplo para o programa. É bem curto, com apenas alguns comandos, exatamente o que você precisa para entender como usá-lo:
xbindkeys -d > ~/.xbindkeysrcComo você pode ver no exemplo do arquivo, precisamos especificar a tecla de 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
Você pode usar a grafia legível por humanos ou códigos de teclas como atalho. Os códigos de teclas foram a única coisa que funcionou para mim, mas sinta-se à vontade para experimentar um pouco.
Para obter os códigos, você precisa usar o comando:
xbindkeys -kUma pequena janela com um "X" será aberta. Você só deve pressionar as teclas quando esta janela estiver em foco! Somente então você verá algo como isto 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 se parece com isto:
m:0x8 + c:50Agora preciso fazer com que pressionar essa combinação de teclas realmente altere o layout do teclado. Encontrei apenas um comando funcional para especificar o layout do teclado:
setxkbmap ru
setxkbmap us
Como você pode ver no exemplo, ele só permite ativar um ou outro layout, então a única coisa que me veio à mente foi 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 aparência final do arquivo .xbindkeysrc será a seguinte:
# 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
Em seguida, aplicamos as alterações:
xbindkeys -p
E você pode verificar. Não se esqueça de desativar quaisquer opções de troca de layout nas configurações padrão.
Total
Colegas, espero que este artigo ajude alguém a se livrar rapidamente de um problema irritante. Pessoalmente, passei o fim de semana inteiro tentando descobrir e resolver esse problema para não ter que me preocupar com ele novamente durante o expediente. Escrevi este artigo para poupar tempo e frustração a alguém. Muitos de vocês usam um método alternativo para alternar entre os layouts de teclado e não entendem o problema. Eu, particularmente, prefiro Alt+Shift e quero que funcione dessa forma. Se você compartilha da minha opinião e está enfrentando esse problema, este artigo pode te ajudar.
Fonte: habr.com
