Hallo, collega's!
Ik wil mijn oplossing delen voor het probleem dat in de titel wordt genoemd. Ik werd geïnspireerd om dit artikel te schrijven door een collega , die de moeite nam om een gedeeltelijke (voor mij) oplossing voor het probleem aan te bieden. Ik heb mijn eigen 'workaround' gemaakt die me heeft geholpen. Ik deel het met jullie.
Probleemomschrijving
Ik gebruikte Ubuntu 18.04 voor mijn werk en merkte de laatste tijd dat, bij het schakelen van indeling met alt+shift in applicaties zoals Visual Studio Code, Skype, Slack en anderen die zijn gemaakt met Electron, het volgende probleem zich voordeed: de focus van het invoerveld verschuift naar de bovenste menubalk van het venster. Om andere redenen ben ik overgestapt naar Fedora + KDE en ontdekte dat het probleem nog steeds bestond. Tijdens mijn zoektocht naar een oplossing vond ik een geweldig artikel . Een enorme dank aan de vriend , die het probleem uitgebreid heeft beschreven en zijn oplossing heeft gedeeld. Maar de in het artikel beschreven methode loste het probleem slechts op voor één applicatie, namelijk Skype. Voor mij was het ook cruciaal om het probleem met Visual Studio Code op te lossen, omdat het verstoren van berichten met een verspringend menu, hoewel irritant, niet zo erg was als je bezig bent met ontwikkelen. Bovendien stelde een collega een oplossing voor waarbij het menu van de applicatie volledig verdwijnt, maar ik wil het menu in VS Code niet graag verliezen.
Ik probeerde te begrijpen waar het probleem lag
Dus besloot ik de tijd te nemen om te begrijpen waar het probleem lag. Ik zal kort beschrijven welke weg ik heb bewandeld; misschien kan iemand die meer kennis heeft over dit onderwerp de moeilijkheden die ik ben tegengekomen verduidelijken.
Ik opende Visual Studio Code en begon verschillende combinaties van Alt+ te drukken, kijkend naar de reactie van de applicatie. In bijna alle gevallen werkten alle combinaties, behalve Alt+Shift, zonder verlies van focus. Het leek erop dat er iemand was die de ingedrukte Shift op at, die volgde na het ingedrukt houden van Alt, en de applicatie dacht dat ik Alt had ingedrukt, daarna niets had ingedrukt, Alt had losgelaten en het gooide mijn focus blij naar zijn menu, wat voor hem heel logisch leek.
Ik heb de instellingen voor het wisselen van toetsenborden geopend (je weet wel, die lange lijst met selectievakjes en allerlei instellingen voor de toetsen) en heb het wisselen van de indeling ingesteld op de Alt-toets, zonder verdere drukken.

Daarna stopte Alt+Tab met werken om vensters te wisselen. Alleen Tab werkte, wat betekent dat iemand weer mijn Alt ‘op at’. Wie deze ‘iemand’ was, liet geen ruimte meer voor vragen, maar wat ik ermee moet doen, daar heb ik geen idee van.
Maar omdat het probleem op de een of andere manier opgelost moest worden, kwam het idee op:
- Schakel de sneltoets voor het wisselen van de toetsenbordindeling uit in de instellingen (haal alle selectievakjes weg in de sectie Wissel naar een andere indeling);
- Maak een eigen sneltoets die de indeling voor me wisselt.
Oplossingsbeschrijving
Laten we beginnen met het installeren van het programma om toetsen aan opdrachten toe te wijzen: Xbindkeys. Helaas hebben de standaard hulpmiddelen me niet toegelaten om via een mooie interface een sneltoets te maken voor combinaties zoals Alt+Shift. Je kunt wel sneltoetsen maken voor Alt+S, Alt+1, Alt+Shift+Y enzovoorts, maar dat past niet bij onze taak.
sudo dnf install xbindkeysrc Er is meer informatie over het programma op
Vervolgens maken we een voorbeeld van het configuratiebestand voor het programma. Het voorbeeld is vrij kort, met enkele opdrachten, precies wat nodig is om te begrijpen hoe het werkt:
xbindkeys -d > ~/.xbindkeysrcZoals te zien is in het voorbeeld in het bestand, moeten we de sneltoets opgeven die we willen gebruiken en de opdracht die moet worden uitgevoerd. Het lijkt eenvoudig.
# Examples of commands:
"xbindkeys_show"
control+shift + q
# set directly keycode (here control + f with my keyboard)
"xterm"
c:41 + m:0x4
Als sneltoets kun je een begrijpelijke schrijfwijze gebruiken of de toetscodes. Bij mij werkte het alleen met codes, maar niemand staat je in de weg om wat te experimenteren.
Om de codes te krijgen, moet je de volgende opdracht gebruiken:
xbindkeys -kEr opent een klein ‘X-venster’. Je moet alleen op de toetsen drukken als dit venster gefocust is! Alleen dan zie je iets dergelijks in de terminal:
[podkmax@localhost ~]$ xbindkeys -k
Druk op een combinatie van toetsen of klik in het venster.
Je kunt een van de twee regels na "NoCommand"
in $HOME/.xbindkeysrc gebruiken om een toets te binden.
"(Scheme functie)"
m:0x4 + c:39
Ctrl + s
In mijn geval ziet de combinatie voor de toetsen Alt+Shift er als volgt uit:
m:0x8 + c:50Nu moet je ervoor zorgen dat er bij het indrukken van deze combinatie daadwerkelijk een indeling switch plaatsvindt. Ik vond alleen één werkende opdracht om de indeling aan te geven:
setxkbmap ru
setxkbmap us
Zoals uit het voorbeeld blijkt, kan het alleen de ene of de andere indeling inschakelen, dus het enige wat bij me opkwam was 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
Nu, als de bestanden .xbindkeysrc en layout.sh in dezelfde map liggen, heeft het bestand .xbindkeysrc de volgende vorm:
# 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
Pas daarna brengen we de wijzigingen aan:
xbindkeys -p
En je kunt het testen. Vergeet niet om eventuele opties voor indeling wisseling in de standaardinstellingen uit te schakelen.
Conclusie
Collega’s, ik hoop dat dit artikel iemand snel kan helpen om zich te ontdoen van dit vervelende probleem. Persoonlijk heb ik de hele dag van mijn weekend besteed om het probleem te begrijpen en op te lossen, zodat ik er tijdens werktijd niet meer door afgeleid word. Ik heb dit artikel geschreven om iemand tijd en zenuwen te besparen. Velen van jullie gebruiken een alternatieve manier om tussen indelingen te wisselen en begrijpen niet waar het probleem ligt. Persoonlijk vind ik het fijn om over te schakelen met Alt+Shift. En ik wil dat het precies zo werkt. Als je mijn mening deelt en met dit probleem bent geconfronteerd, zou dit artikel je moeten helpen.
Bron: habr.com
