Probleem alt+shift vahetamisega Linuxis, Electroni rakendustes

Tere, kolleegid!

Soovin jagada oma lahendust probleemile, mis on välja toodud pealkirjas. Artikli kirjutamiseks sain inspiratsiooni kolleegilt brnovk, kes ei olnud laisk ja pakkus mulle osalist lahendust probleemile. Valmistasin enda „kõkse“ ja see aitas mind. Jagame seda teiega.

Probleemi kirjeldus

Kasin Ubuntu 18.04 töös ja viimasel ajal märkasin, et rakendustes nagu Visual Studio Code, Skype, Slack ja muudes, mis on loodud Electroniga, tekkis järgmine probleem: fookus sisestusväljast liikudes läheb ülemisse aknapaanile (menüü). Muudel põhjustel kolisin Fedora + KDE juurde ja sain aru, et probleem polnud kadunud. Lahenduse otsimisel leidsin imelise artikli Korrastame Skype'i ise. Suur tänu sõbrale brnovk, mis ta rääkis probleemist ja jagas oma lahendust. Kuid artiklis toodud meetod lahendas küsimuse vaid ühe rakenduse, nimelt Skype'i osas. Minu jaoks oli kriitiline ka Visual Studio Code'iga toime tulla, kuna sõnumite kirjutamine hüpikmenüüga on küll tüütav, kuid mitte nii väga, kui oled arendustegevuses. Lisaks pakkus kolleeg lahendust, kus rakenduse menüü kaob täielikult, ja ma ei sooviks VS Code'is menüüd kaotada.

Püüdsin aru saada, mis on vale

Nii et otsustasin aega võtta ja välja selgitada, mis on vale. Praegu kirjeldan lühidalt, milliseid samme ma astusin, võib-olla keegi, kes on selles küsimuses oskuslikum, aitab mul selgitada neid raskusi, millega ma silmitsi seisin.

Avasin Visual Studio Code'i ja hakkasin vajutama erinevaid kombinatsioone Alt+, vaadates rakenduse reaktsiooni. Peaaegu kõigis juhtudel töötasid kõik kombinatsioonid, välja arvatud Alt+Shift, fokuse kaotamata. Tekkis mulje, et keegi sööb ära vajutatud Shift'i, mis järgnes Alt'i all hoidmisele, ja rakendus arvab, et vajutasin Alt, siis mitte midagi, vabastasin Alt'i ja see viskas mu fokuse oma menüüsse, mis tundus talle täiesti loogiline.

Avasin klaviatuuriskeemi vahetamise seaded (noh, teate seda pikka nimekirja, kus on kontrollkastid ja kõikvõimalikud seaded klahvide jaoks) ning seadsin klaviatuuri jaotuse vahetamiseks Alt'i nupu kasutamise, ilma täiendavate vajutusteta.

Probleem alt+shift vahetamisega Linuxis, Electroni rakendustes

Pärast seda lõpetas Alt+Tab akende vahetamise töö. Töötab ainult Tab, seega keegi jälle "sööb" ära minu Alt'i. Kes see "keegi" on, selles ei olnud enam küsimusi, aga mis sellega teha, mul pole aimugi.

Kuna probleemi tuli kuidagi lahendada, siis tuli mulle mõte:

  1. Seadetes keelata klaviatuuriskeemi vahetamise hotkey (tühjendage kõik kontrollkastid jaotises Vaheta teise jaotuse vastu);
  2. Loo oma kiireklahv, mis vahetab mulle keelekorralduse

Lahenduse kirjeldus

Alustuseks paigaldame programmi Xbindkeys, mis võimaldab klahvikäsklusi määrata. Kahjuks ei suutnud sisseehitatud tööriistad mul luua ilusa liidese kaudu kiireklahvi kombinatsioonide nagu Alt+Shift jaoks. Saab luua Alt+S, Alt+1, Alt+Shift+Y jne, kuid meie ülesande jaoks see ei sobi.

sudo dnf install xbindkeysrc

Rohkem teavet selle kohta leiate ArchWiki
Järgmisena loome programmi seadistusfaili näidise. Näidis on küllaltki lühike ja sisaldab mitmeid käske, just seda, et saaksime aru, kuidas sellega töötada:

xbindkeys -d > ~/.xbindkeysrc

Kuidas näha failis olevalt näidiselt, peame määrama kiireklahvi, mida soovime kasutada, ja käsu, mis peab täituma. See näeb välja lihtne.


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

Kiireklahvina võib kasutada arusaadavat kirjutamist või klahvikoodide kasutamist. Mul töötas ainult koodidega, aga keegi ei keela teil natuke katsetada.

Koodide saamiseks tuleb kasutada käsku:

xbindkeys -k

Avaneb väikese "X" akna. Klahve tuleb vajutada ainult siis, kui see aken on fookuses! Ainult sel juhul näete terminalis midagi sellist:


[podkmax@localhost ~]$ xbindkeys -k
Vajutage klahvikombinatsiooni või / ja klõpsake akna all.
Saate kasutada ühte kahest reast pärast "NoCommand"
$HOME/.xbindkeysrc failis, et siduda klahv.
"(Schema funktsioon)"
    m:0x4 + c:39
    Control + s

Minu puhul näeb Alt+Shift kombinatsioon välja nii:

m:0x8 + c:50

Nüüd tuleb teha nii, et selle kombinatsiooni vajutamisel toimuks just keelevahetus. Olen leidnud ainult ühe töötava käsu keele määramiseks:


setxkbmap ru
setxkbmap us

Nagu näha näitest, suudab see ainult lülitada sisse mõne keele, seega ei tulnud mulle muud peale skripti kirjutamise 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 direktoriumis, näeb .xbindkeysrc faili lõplik versioon välja selline:


# 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. Ära unusta keelata kõiki keelevahetuse valikuid vaikimisi seadetes.

Kokkuvõte

Kolleegid, loodan, et see artikkel aitab kellelgi kiiresti vabaneda sellest tüütu probleemist. Isiklikult kulutasin terve oma vaba päeva, et aru saada ja probleemi mingil moel lahendada, et ma ei peab enam selle pärast tööl segama. Kirjutasin selle artikli, et kellelegi aega ja närve säästa. Paljusid teist kasutavad alternatiivset meetodit klaviatuuriskeemi vahetamiseks ega mõista, mis probleem on. Mulle meeldib vahetada Alt+Shift abil, ja ma tahan, et see töötaks just nii. Kui jagate minu arvamust ja olete selle probleemiga silmitsi seisnud, siis see artikkel peaks teid aitama.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster