Löser problemet med att byta med alt+shift i Linux, i Electron-applikationer

Hallå kollegor!

Jag vill dela med mig av min lösning på problemet som anges i rubriken. Jag blev inspirerad att skriva den här artikeln av en kollega brnovk, som inte var lat och erbjöd en partiell (för mig) lösning på problemet. Jag gjorde min egen "krycka" som hjälpte mig. Jag delar med dig.

Beskrivning av problemet

Jag använde Ubuntu 18.04 för arbetet och märkte nyligen att när jag växlade layouter med alt+shift i applikationer som Visual Studio Code, Skype, Slack och andra som skapades med Electron, uppstår följande problem: fokus från inmatningsfältet går till toppen panel i fönstret (menyn). Av andra skäl flyttade jag till Fedora + KDE och insåg att problemet inte hade försvunnit. När jag letade efter en lösning hittade jag en underbar artikel Hur du fixar Skype själv. Stort tack kamrat brnovk, som berättade i detalj om problemet och delade med sig av sin metod för att lösa det. Men metoden som anges i artikeln löste problemet med bara en applikation, nämligen Skype. För mig var det också avgörande att förstå Visual Studio Code, eftersom att skriva meddelanden med en hoppande meny, även om det är irriterande, är inte så mycket om du är involverad i utveckling. Dessutom föreslog en kollega en lösning där applikationsmenyn försvinner helt, och jag skulle egentligen inte vilja tappa menyn i VS Code.

Försökte förstå vad som är fel

Så jag bestämde mig för att ta mig tid att ta reda på vad som hände. Nu ska jag kort beskriva vägen jag tog, kanske någon mer kunnig i den här frågan kan hjälpa till att förklara de svårigheter jag stötte på.

Jag öppnade Visual Studio Code och började trycka på olika Alt+<%something%>-kombinationer för att se hur programmet svarade. I nästan alla fall fungerade alla kombinationer utom Alt+Skift utan att tappa fokus. Det verkade som om någon åt den nedtryckta Shift, som följde efter att ha hållit ned Alt, och applikationen trodde att jag tryckte på Alt, sedan inte tryckte på någonting, släppte Alt och den kastade glatt mitt fokus in i sin meny, vilket verkade ganska logiskt att Det.

Jag öppnade inställningarna för att byta tangentbordslayout (ni vet, den här långa listan med kryssrutor och alla möjliga inställningar för tangenter) och ställde in den för att byta layout med Alt-knappen, utan några ytterligare klick.

Löser problemet med att byta med alt+shift i Linux, i Electron-applikationer

Efter det slutade Alt+Tab för att byta fönster fungera. Endast Tab fungerade, det vill säga någon "åt" min Alt igen. Det fanns inga frågor kvar om vem den här "någon" var, men jag hade ingen aning om vad som kunde göras med honom.

Men eftersom problemet måste lösas på något sätt, kom en lösning att tänka på:

  1. I inställningarna, inaktivera snabbtangenten för att byta tangentbordslayout (avmarkera alla kryssrutor i avsnittet Växla till en annan layout);
  2. Skapa din egen snabbtangent som skulle byta layout för mig

Beskrivning av lösningen

Låt oss först installera ett program som låter dig tilldela kommandon till Xbindkeys-tangenterna. Tyvärr tillät standardverktyg mig inte att skapa en snabbtangent för en kombination som Alt+Skift genom ett vackert gränssnitt. Kan göras för Alt+S, Alt+1, Alt+shift+Y, etc. etc., men detta lämpar sig inte för vår uppgift.

sudo dnf install xbindkeysrc

Mer information om det finns på ArchWiki
Därefter kommer vi att skapa ett exempel på inställningsfilen för programmet. Exemplet är ganska kort, med några kommandon, precis vad du behöver för att ta reda på hur du arbetar med det:

xbindkeys -d > ~/.xbindkeysrc

Som du kan se från exemplet i filen måste vi ange snabbtangenten som vi vill använda och kommandot som ska köras. Ser enkelt ut.


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

Som en snabbtangent kan du använda läsbar skrift eller använda nyckelkoder. Det fungerade för mig bara med koder, men ingen förbjuder dig att experimentera lite.

För att få koderna måste du använda kommandot:

xbindkeys -k

Ett litet "X"-fönster öppnas. Du behöver bara trycka på tangenter när fokus är på detta fönster! Endast i det här fallet kommer du att se något så här i terminalen:


[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

I mitt fall ser tangentkombinationen Alt+Skift ut så här:

m:0x8 + c:50

Nu måste vi se till att layouten växlar när du klickar på den här kombinationen. Jag hittade bara ett fungerande kommando för att specificera layouten:


setxkbmap ru
setxkbmap us

Som du kan se från exemplet kan det bara aktivera en eller annan layout, så jag kom inte på något annat än att skriva ett manus.


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

Om nu filerna .xbindkeysrc och layout.sh finns i samma katalog, ser den slutliga vyn av filen .xbindkeysrc ut så här:


# 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

Därefter tillämpar vi ändringarna:


xbindkeys -p

Och du kan kolla. Glöm inte att inaktivera eventuella alternativ för att byta layout i standardinställningarna.

Totalt

Kolleger, jag hoppas att den här artikeln kan hjälpa någon att snabbt bli av med ett irriterande problem. Själv ägnade jag hela min lediga dag åt att försöka reda ut och lösa problemet på något sätt, så att jag inte längre skulle distraheras av det under arbetstid. Jag skrev den här artikeln för att spara tid och nerver för någon. Många av er använder en alternativ metod för att byta layout och förstår inte vad problemet är. Jag personligen gillar att byta med Alt+Skift. Och det är så jag vill att det ska fungera. Om du delar min åsikt och står inför det här problemet bör den här artikeln hjälpa dig.

Källa: will.com

Lägg en kommentar