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. , 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 . Um enorme obrigado ao camarada , 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

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:
- Nas configurações, desabilitar o atalho para alternar o layout do teclado (desmarcar todas as caixas na seção Alternar para outro layout);
- 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
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 > ~/.xbindkeysrcComo 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 -kUma 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:50Agora 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
