Probleemi lahendamine alt+shift vahetamisel Linuxis, Electroni rakendustes

Tere, kolleegid!

Soovin jagada oma lahendust probleemile, mis on esitatud pealkirjas. Artikli kirjutamiseks inspiratsiooni sain kolleegilt brnovk, kes ei lasknud end mugavusest häirida ja pakkus mulle osalist lahendust probleemile. Tegin enda "kõrvallahenduse", mis aitas mind. Jagame seda teiega.

Probleemi kirjeldus

Kasutasin Ubuntu 18.04 ja viimasel ajal märkasin, et klaviatuurikate vahetamisel alt+shift sellistes rakendustes nagu Visual Studio Code, Skype, Slack ja teistes, mis on loodud Electroni abil, tekib järgmine probleem: fokuseerimine sisestusväljast liikub akna ülemisse menüüriba. Teiste põhjuste tõttu kolisin Fedora + KDE peale ja sain aru, et probleem polnud kadunud. Lahenduse otsingul leidsin suurepärase artikli Parandame Skype'i oma kätega. Suur tänu sõbrale brnovk, kes rääkis probleemist põhjalikult ja jagas oma lahendusviisi. Kuid artiklis toodud lahendus kattis küsimuse vaid ühe rakendusega, nimelt Skype'iga. Minu jaoks oli kriitilise tähtsusega välja selgitada ka Visual Studio Code'i probleem, sest hüppav menüü sõnumite kirjutamisel on küll häiriv, kuid see pole nii oluline, kui tegeled arendamisega. Peale selle pakkus kolleeg lahenduse, mille puhul rakenduse menüü kaob täielikult, aga ma ei tahaks VS Code'is menüüd kaotada.

Püüdsin aru saada, mis toimub

Nii et otsustasin võtta aega ja uurida, mis toimub. Praegu kirjeldan lühidalt, milliseid teid ma käisin, võib-olla suudab keegi paremini kursis olev aidata selgitada keerulisi asjaolusid, millega ma silmitsi seisin.

Avasin Visual Studio Code'i ja hakkasin vajutama erinevaid Alt+ kombinatsioone, jälgides rakenduse reaktsiooni. Peaaegu kõigis juhtudel toimisid kõik kombinatsioonid, välja arvatud Alt+Shift, fokuseerimata. Tekkis mulje, et keegi sööb ära vajutatud Shift'i, mis järgnes Alt'i all hoidmisele, ja rakendus arvas, et ma vajutasin Alt'ile, seejärel ei vajutanud midagi, lasin Alt'ist lahti ja see rõõmsalt suunas mu fokuse oma menüüd, mis tundus selle jaoks täiesti loogiline.

Avasin klaviatuurikatte vahetamise seadistused (teate küll seda pikka loendit, kus on ruudud ja erinevad seaded nuppude jaoks) ja seadsin klaviatuurikatte vahetamise Alt-nupule, ilma lisavajutusteta.

Probleemi lahendamine alt+shift vahetamisel Linuxis, Electroni rakendustes

Pärast seda ei töötanud Alt+Tab akende vahetamiseks. Tööle jäi ainult Tab, seega keegi „sööb” jälle mu Alti ära. Kes see „keegi” oli, ei jäänud enam küsimusi, aga mida sellega teha, ei tea ma.

Aga kuna probleemi oli vaja kuidagi lahendada, tuli mõte:

  1. Seadistustes keelata klahvikombinatsioon klaviatuuri paigutuse vahetamiseks (tühjendada kõik kastid jaotises 'Vaheta teise paigutuse juurde');
  2. Loo oma klahvikombinatsioon, mis vahetaks mulle paigutuse

Lahenduse kirjeldus

Alustuseks paigaldame programmi, mis võimaldab klahvidele käske seada, nimega Xbindkeys. Kahjuks ei võimaldanud vaikimisi tööriistad mul ilusas liideses luua klahvikombinatsiooni, nagu Alt+Shift. Saame teha näiteks Alt+S, Alt+1, Alt+shift+Y jne, kuid meie ülesande jaoks see ei sobi.

sudo dnf install xbindkeysrc

Rohkem teavet selle kohta on ArchWiki
Seejärel loome programmi seadistusfaili näidise. Näidis on üsna lühike, mõne käsuga, just seda, mida on vaja, et aru saada, kuidas sellega töötada:

xbindkeys -d > ~/.xbindkeysrc

Kuidas näha näitest, mis on failis, peame määrama klahvikombinatsiooni, mida soovime kasutada, ja käsu, mis peab täidetama. Tundub lihtne.


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

Klahvikombinatsioonina võib kasutada arusaadavat kirjutamist või klahvikoodide kasutamist. Mul töötas ainult koodide puhul, kuid keegi ei keela sul pisut eksperimenteerida.

Koodide saamiseks tuleb kasutada käsku:

xbindkeys -k

Avatakse väike „X-aken”. Klahve tuleb vajutada ainult siis, kui see aken on fookuses! Alles siis näed terminalis midagi sellist:


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

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

m:0x8 + c:50

Nüüd on vaja teha nii, et selle kombinatsiooni vajutamisel toimuks just paigutuse vahetamine. Ma leidsin ainult ühe töötava käsu paigutuse määramiseks:


setxkbmap ru
setxkbmap us

Kuidas näha näitest, suudab see ainult lülitada ühte või teist paigutust, seega ei tulnud mul midagi muud pähe, kui kirjutada skript.


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 kaustas, näeb fail .xbindkeysrc 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 nüüd saab kontrollida. Ärge unustage keelata kõiki paigutuse vahetamise valikuid põhiseadetest.

Kokkuvõte

Kolleegid, loodan, et see artikkel aitab kellegil kiiresti lahti saada sellest tüütust probleemist. Isiklikult kulutasin kogu oma vaba päeva, et sellest probleemist aru saada ja seda kuidagi lahendada, et see enam ei segaks mu tööaega. Kirjutasin selle artikli, et säästa kelleltki aega ja närve. Paljud teist kasutavad alternatiivset paigutuse vahetamise meetodit ja ei saa aru, mis probleem on. Mulle endale meeldib vahetada Alt+Shift abil. Ja ma tahan, et see töötaks just nii. Kui jagate minu arvamust ja olete selle probleemiga silmitsi seisnud, peaks see artikkel teile abiks olema.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster