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
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
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.
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:
- Schakel in de instellingen de sneltoets voor het wisselen van toetsenbordindeling uit (schakel alle selectievakjes uit in het gedeelte Overschakelen naar een andere indeling);
- 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
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