Resolvendo o problema de alternar com alt + shift no Linux, em aplicativos no Electron

Olá colegas!

Quero compartilhar para compartilhar minha solução para o problema, que é indicado no cabeçalho. O artigo foi inspirado por um colega brnovk , que não era muito preguiçoso e sugeriu uma solução parcial (para mim) para o problema. Fiz minha “muleta” que me ajudou. Eu compartilho com você

Descrição do problema


Usei o Ubuntu 18.04 para trabalhar e notei recentemente que, ao alternar layouts por alt + shift em aplicativos como o Visual Studio Code, Skype, Slack e outros criados com o Electron, surge o seguinte problema: o foco no campo de entrada passa para painel superior da janela (menu). Por outras razões, mudei para o Fedora + KDE e percebi que o problema não desapareceu. Em busca de uma solução, encontrei um artigo maravilhoso Faça você mesmo, Skype . Muito obrigado ao camarada brnovk por explicar em detalhes o problema e compartilhar seu caminho para resolvê-lo. Mas o método especificado no artigo abordou a questão com apenas um aplicativo, o Skype. Ainda era crítico para mim lidar com o Visual Studio Code, porque escrever mensagens com um menu de salto é irritante, mas não tanto se você estiver desenvolvendo. Além disso, um colega propôs uma solução na qual o menu do aplicativo desapareceu completamente, mas eu realmente não gostaria de perder o menu no VS Code.

Eu tentei entender qual era o problema


Então, decidi reservar um tempo e descobrir o que estava acontecendo. Agora vou descrever brevemente o caminho que segui, talvez alguém com mais conhecimento sobre esse assunto ajude a esclarecer as dificuldades que encontrei.

Abri o Visual Studio Code e comecei a clicar em diferentes combinações Alt + <% something%>, observando a reação do aplicativo. Em quase todos os casos, todas as combinações, exceto Alt + Shift, funcionavam sem perda de foco. Parecia que alguém comeu a Shift pressionada, que se seguiu após segurar e segurar Alt, e o aplicativo pensa que eu pressionei Alt, depois não pressionei nada, soltei Alt e ele alegremente lançou meu foco em seu menu, o que lhe parecia lógico.

Abri as configurações de alternância do layout do teclado (bem, você conhece esta longa lista com caixas de seleção e todos os tipos de configurações de teclas) e defini a alternância do layout do teclado pelo botão Alt, sem pressionar mais.

imagem

Depois disso, Alt + Tab parou de funcionar para mudar de janela. Somente Tab funcionou, ou seja, alguém novamente "comeu" meu Alt. Quem é esse "alguém" não tem mais dúvidas, mas não tenho ideia do que pode ser feito com ele.

Mas como o problema tinha que ser resolvido pelo menos de alguma maneira, a solução veio à minha mente:

  1. Nas configurações, desative a tecla de atalho para alterar o layout do teclado (remova todas as caixas de seleção na seção Alternar para outro layout);
  2. Crie sua própria tecla de atalho para mudar meu layout

Descrição da solução


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

sudo dnf install xbindkeysrc 

Há mais sobre isso no ArchWiki
Em seguida, crie um arquivo de configurações de amostra para o programa. O exemplo é bastante curto, com apenas alguns comandos, exatamente o que você precisa para descobrir como trabalhar com ele:

 xbindkeys -d > ~/.xbindkeysrc 

Como você pode ver no exemplo que está no 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 

Como tecla de atalho, você pode usar a ortografia legível por humanos ou os códigos de teclas. Funcionou para mim apenas com códigos, mas ninguém proíbe que você experimente 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 com o foco 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, o atalho de teclado Alt + Shift se parece com o seguinte:

 m:0x8 + c:50 

Agora você precisa ter certeza de que, ao clicar nessa combinação, o layout será alterado exatamente. Encontrei apenas um comando de trabalho para especificar o layout:

 setxkbmap ru setxkbmap us 

Como você pode ver no exemplo, ela só sabe como ativar um ou outro layout, então nada me veio à mente, exceto a escrita de 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 no mesmo diretório, a forma final do arquivo .xbindkeysrc ficará 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 disso, aplique as alterações:

 xbindkeys -p 

E você pode conferir. Não esqueça de desativar nenhuma opção para alternar layouts nas configurações padrão.

Sumário


Colegas, espero que este artigo possa ajudar alguém a se livrar rapidamente do problema irritante. Pessoalmente, passei o dia inteiro resolvendo e resolvendo o problema de alguma forma, para não me distrair mais com isso durante o horário de trabalho. Escrevi este artigo para economizar tempo e nervos a alguém. Muitos de vocês usam uma maneira alternativa de alternar layouts e não entendem qual é o problema. Eu pessoalmente gosto de mudar Alt + Shift. E eu quero que funcione dessa maneira. Se você compartilha minha opinião e encontrou esse problema, este artigo deve ajudá-lo.

Source: https://habr.com/ru/post/pt476996/


All Articles