Üleminekuprobleemi lahendamine alt+shift abil Linuxis, Electroni rakendustes

Tere kolleegid!

Tahan jagada oma lahendust pealkirjas märgitud probleemile. Selle artikli kirjutamiseks inspireeris mind kolleeg brnovk, kes polnud laisk ja pakkus probleemile osalise (minu jaoks) lahenduse. Tegin ise oma “kargu”, mis mind aitas. Ma jagan teiega.

Probleemi kirjeldus

Kasutasin tööks Ubuntu 18.04 ja märkasin hiljuti, et kui vahetan paigutusi alt+shift abil sellistes rakendustes nagu Visual Studio Code, Skype, Slack jt, mis loodi Electroni abil, ilmneb järgmine probleem: fookus sisestusväljalt läheb üles akna paneel (menüü). Muudel põhjustel kolisin Fedora + KDE-sse ja mõistsin, et probleem pole kadunud. Lahendust otsides leidsin suurepärase artikli Kuidas Skype'i ise parandada. Suur tänu seltsimees brnovk, kes rääkis probleemist üksikasjalikult ja jagas oma meetodit selle lahendamiseks. Kuid artiklis näidatud meetod lahendas probleemi ainult ühe rakendusega, nimelt Skype'iga. Minu jaoks oli kriitilise tähtsusega ka Visual Studio Code’i mõistmine, sest hüppava menüüga sõnumite kirjutamine, kuigi tüütu, ei ole niivõrd, kui oled arendusega seotud. Lisaks pakkus kolleeg välja lahenduse, mille puhul rakendusmenüü kaob täielikult ja ma ei tahaks tegelikult VS Code'is menüüd kaotada.

Püüdis aru saada, mis viga

Seega otsustasin võtta aega, et aru saada, mis toimub. Nüüd kirjeldan lühidalt teed, mille läbisin, võib-olla aitab keegi, kes on selles küsimuses teadlikum, selgitada raskusi, millega kokku puutusin.

Avasin Visual Studio Code ja hakkasin vajutama erinevaid Alt+<%something%> kombinatsioone, et näha, kuidas rakendus reageerib. Peaaegu kõigil juhtudel töötasid kõik kombinatsioonid peale Alt+Shift fookust kaotamata. Tundus, et keegi sõi vajutatud Shift klahvi, mis järgnes peale Alt all hoidmist ja rakendus arvas, et ma vajutasin Alt, siis ei vajutanud midagi, vabastas Alt ja see viskas mu fookuse rõõmsalt oma menüüsse, mis tundus üsna loogiline. seda.

Avasin klaviatuuripaigutuse vahetamise sätted (teate küll, see pikk loend, kus on linnukesed ja kõikvõimalikud klahvide sätted) ja panin selle paigutust vahetama Alt nupuga, ilma lisaklõpsudeta.

Üleminekuprobleemi lahendamine alt+shift abil Linuxis, Electroni rakendustes

Pärast seda lakkas akende vahetamiseks Alt+Tab töötamast. Ainult Tab töötas, see tähendab, et keegi “sõi” mu Alti uuesti. Ei jäänud küsimusi, kes see “keegi” on, aga mul polnud õrna aimugi, mida temaga teha saaks.

Aga kuna probleem tuli kuidagi lahendada, siis tuli meelde lahendus:

  1. Seadetes keelake kiirklahv klaviatuuripaigutuse vahetamiseks (tühjendage kõik märkeruudud jaotises Lülitu teisele paigutusele);
  2. Looge oma kiirklahv, mis muudaks minu jaoks paigutust

Lahenduse kirjeldus

Esmalt installime programmi, mis võimaldab Xbindkeysi klahvidele käske määrata. Kahjuks ei võimaldanud standardtööriistad ilusa liidese kaudu kiirklahvi luua kombinatsioonile nagu Alt+Shift. Saab teha Alt+S, Alt+1, Alt+Shift+Y jne puhul. jne, kuid see ei sobi meie ülesandeks.

sudo dnf install xbindkeysrc

Lisateavet selle kohta leiate aadressilt ArchWiki
Järgmisena loome programmi jaoks näidisseadete faili. Näidis on üsna lühike, mõne käsuga, just see, mida vajate sellega töötamiseks:

xbindkeys -d > ~/.xbindkeysrc

Nagu näete failis olevast näitest, peame märkima kiirklahvi, mida soovime kasutada, ja käsu, mida tuleks täita. Näeb lihtne välja.


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

Kiirklahvina saate kasutada inimloetavat kirjutamist või kasutada klahvikoode. Minu jaoks töötas see ainult koodidega, kuid keegi ei keela teil natuke katsetada.

Koodide saamiseks peate kasutama käsku:

xbindkeys -k

Avaneb väike "X" aken. Klahve tuleb vajutada ainult siis, kui fookus on sellel aknal! Ainult sel juhul näete terminalis midagi sellist:


[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

Minu puhul näeb klahvikombinatsioon Alt + Shift välja selline:

m:0x8 + c:50

Nüüd peame veenduma, et kui klõpsate sellel kombinatsioonil, lülitub paigutus. Paigutuse määramiseks leidsin ainult ühe töötava käsu:


setxkbmap ru
setxkbmap us

Nagu näitest näha, saab see lubada ainult üht või teist küljendust, nii et peale skripti kirjutamise ei tulnud mulle midagi pähe.


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

Nüüd, kui failid .xbindkeysrc ja layout.sh asuvad samas kataloogis, näeb faili .xbindkeysrc lõppvaade välja järgmine:


# 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

Pärast seda rakendame muudatused:


xbindkeys -p

Ja saate kontrollida. Ärge unustage standardsetes seadetes keelata kõiki paigutuste vahetamise valikuid.

Summaarne

Kolleegid, ma loodan, et see artikkel aitab kellelgi tüütust probleemist kiiresti vabaneda. Mina isiklikult veetsin terve oma vaba päeva, püüdes probleemi kuidagi välja mõelda ja lahendada, et see mind tööajal enam ei segaks. Kirjutasin selle artikli, et säästa kellegi aega ja närve. Paljud teist kasutavad paigutuse vahetamiseks alternatiivset meetodit ega saa aru, milles probleem on. Mulle isiklikult meeldib vahetada Alt+Shift. Ja nii ma tahan, et see toimiks. Kui jagate minu arvamust ja seisate selle probleemiga silmitsi, peaks see artikkel teid aitama.

Allikas: www.habr.com

Lisa kommentaar