Het probleem oplossen met schakelen met alt+shift in Linux, in Electron-toepassingen

Hallo collega's!

Ik wil mijn oplossing delen voor het probleem dat in de titel wordt aangegeven. Tot het schrijven van dit artikel werd ik geïnspireerd door een collega brnovk, die niet lui was en een gedeeltelijke (voor mij) oplossing voor het probleem aanbood. Ik maakte mijn eigen “kruk” die mij hielp. Ik deel het met jou.

beschrijving van het probleem

Ik gebruikte Ubuntu 18.04 voor mijn werk en merkte onlangs dat bij het wisselen van lay-out met alt+shift in applicaties zoals Visual Studio Code, Skype, Slack en andere die zijn gemaakt met Electron, het volgende probleem optreedt: de focus van het invoerveld gaat naar de top paneel van het venster (menu). Om andere redenen verhuisde ik naar Fedora + KDE en besefte ik dat het probleem niet was verdwenen. Terwijl ik naar een oplossing zocht, vond ik een prachtig artikel Hoe u Skype zelf kunt repareren. Hartelijk dank kameraad brnovk, die gedetailleerd over het probleem sprak en zijn methode om het op te lossen deelde. Maar de in het artikel aangegeven methode loste het probleem op met slechts één applicatie, namelijk Skype. Voor mij was het ook van cruciaal belang om Visual Studio Code te begrijpen, omdat het schrijven van berichten met een springmenu, hoewel vervelend, niet zozeer is als je betrokken bent bij de ontwikkeling. Bovendien stelde een collega een oplossing voor waarbij het applicatiemenu volledig verdwijnt, en ik zou het menu in VS Code niet echt willen verliezen.

Ik probeerde te begrijpen wat er mis is

Daarom besloot ik de tijd te nemen om uit te zoeken wat er aan de hand was. Nu zal ik kort het pad beschrijven dat ik heb gevolgd. Misschien kan iemand met meer kennis op dit gebied de moeilijkheden die ik tegenkwam helpen verklaren.

Ik opende Visual Studio Code en begon verschillende Alt+<%something%> combinaties te gebruiken om te zien hoe de applicatie reageerde. In bijna alle gevallen werkten alle combinaties behalve Alt+Shift zonder de focus te verliezen. Het leek alsof iemand de ingedrukte Shift aan het eten was, die volgde nadat ik Alt ingedrukt hield, en de applicatie dacht dat ik op Alt drukte, vervolgens op niets drukte, Alt losliet en mijn focus met vreugde naar het menu verplaatste, wat nogal logisch leek Het.

Ik opende de instellingen voor het wisselen van toetsenbordindeling (je weet wel, deze lange lijst met selectievakjes en allerlei instellingen voor toetsen) en stelde deze in om van indeling te wisselen met de Alt-knop, zonder extra klikken.

Het probleem oplossen met schakelen met alt+shift in Linux, in Electron-toepassingen

Daarna werkte Alt+Tab om van venster te wisselen niet meer. Alleen Tab werkte, dat wil zeggen, iemand heeft mijn Alt weer "opgegeten". Er waren geen vragen meer over wie deze ‘iemand’ was, maar ik had geen idee wat ik met hem kon doen.

Maar omdat het probleem op de een of andere manier moest worden opgelost, kwam er een oplossing in me op:

  1. Schakel in de instellingen de sneltoets voor het wisselen van toetsenbordindeling uit (schakel alle selectievakjes uit in het gedeelte Overschakelen naar een andere indeling);
  2. Maak uw eigen sneltoets die de lay-out voor mij zou veranderen

Beschrijving van de oplossing

Laten we eerst een programma installeren waarmee u opdrachten aan de Xbindkeys-toetsen kunt toewijzen. Helaas lieten standaardtools me niet toe om via een prachtige interface een sneltoets te maken voor een combinatie als Alt+Shift. Kan worden gedaan voor Alt+S, Alt+1, Alt+shift+Y, enz. enz., maar dit is niet geschikt voor onze taak.

sudo dnf install xbindkeysrc

Meer details hierover zijn beschikbaar op ArchWiki
Vervolgens maken we een voorbeeldinstellingenbestand voor het programma. Het voorbeeld is vrij kort, met een paar commando's, precies wat je nodig hebt om erachter te komen hoe je ermee kunt werken:

xbindkeys -d > ~/.xbindkeysrc

Zoals u kunt zien in het voorbeeld in het bestand, moeten we de sneltoets aangeven die we willen gebruiken en de opdracht die moet worden uitgevoerd. Ziet er eenvoudig uit.


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

Als sneltoets kunt u voor mensen leesbaar schrift of sleutelcodes gebruiken. Bij mij werkte het alleen met codes, maar niemand verbiedt je om een ​​beetje te experimenteren.

Om de codes te krijgen, moet je de opdracht gebruiken:

xbindkeys -k

Er wordt een klein “X”-venster geopend. U hoeft alleen maar op toetsen te drukken als de focus op dit venster ligt! Alleen in dit geval zie je zoiets in de 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

In mijn geval ziet de Alt+Shift-toetscombinatie er als volgt uit:

m:0x8 + c:50

Nu moeten we ervoor zorgen dat wanneer u op deze combinatie klikt, de lay-out verandert. Ik heb slechts één werkende opdracht gevonden om de lay-out te specificeren:


setxkbmap ru
setxkbmap us

Zoals je in het voorbeeld kunt zien, kan het alleen een of andere lay-out inschakelen, dus er kwam niets anders in me op dan het schrijven van een 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

Als de .xbindkeysrc- en layout.sh-bestanden zich nu in dezelfde map bevinden, ziet de uiteindelijke weergave van het .xbindkeysrc-bestand er als volgt uit:


# 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

Daarna passen we de wijzigingen toe:


xbindkeys -p

En je kunt het controleren. Vergeet niet om eventuele opties voor het wisselen van lay-out in de standaardinstellingen uit te schakelen.

Totaal

Collega's, ik hoop dat dit artikel iemand kan helpen snel van een vervelend probleem af te komen. Persoonlijk heb ik mijn hele vrije dag besteed aan het uitzoeken en oplossen van het probleem, zodat ik er tijdens werktijd niet meer door afgeleid zou worden. Ik heb dit artikel geschreven om iemand tijd en zenuwen te besparen. Velen van jullie gebruiken een alternatieve methode om van lay-out te wisselen en begrijpen niet wat het probleem is. Persoonlijk schakel ik graag met Alt+Shift. En zo wil ik dat het werkt. Als u mijn mening deelt en met dit probleem wordt geconfronteerd, zou dit artikel u moeten helpen.

Bron: www.habr.com

Voeg een reactie