Rješavanje problema s prebacivanjem pomoću alt+shift u Linuxu, u Electron aplikacijama

Zdravo kolege!

Želim podijeliti svoje rješenje za problem koji je naznačen u naslovu. Na pisanje ovog članka inspirisao me je kolega brnovk, koji nije bio lijen i ponudio djelomično (za mene) rješenje problema. Napravio sam svoju “štaku” koja mi je pomogla. Dijelim sa vama.

Opis problema

Koristio sam Ubuntu 18.04 za rad i nedavno sam primijetio da se prilikom prebacivanja rasporeda koristeći alt+shift u aplikacijama kao što su Visual Studio Code, Skype, Slack i druge koje su kreirane pomoću Electron-a, javlja sljedeći problem: fokus iz polja za unos ide na vrh panel prozora (meni). Iz drugih razloga, prešao sam na Fedora + KDE i shvatio da problem nije nestao. Tražeći rješenje, pronašao sam divan članak Kako sami popraviti Skype. Mnogo hvala druže brnovk, koji je detaljno govorio o problemu i podijelio svoj način njegovog rješavanja. Ali metoda navedena u članku riješila je problem sa samo jednom aplikacijom, a to je Skype. Za mene je takođe bilo kritično razumjeti Visual Studio Code, jer pisanje poruka sa skakačkim menijem, iako dosadno, nije toliko ako se bavite razvojem. Osim toga, kolega je predložio rješenje u kojem meni aplikacije potpuno nestaje, a ja ne bih baš želio da izgubim meni u VS Code-u.

Pokušao da shvatim šta nije u redu

Stoga sam odlučio da odvojim vrijeme da shvatim šta se dešava. Sada ću ukratko opisati put kojim sam krenuo, možda će neko bolje upućen u ovu materiju objasniti poteškoće na koje sam naišao.

Otvorio sam Visual Studio Code i počeo da udaram različite kombinacije Alt+<%something%> da vidim kako je aplikacija reagovala. U gotovo svim slučajevima, sve kombinacije osim Alt+Shift su radile bez gubitka fokusa. Činilo se kao da neko jede pritisnut Shift, koji je uslijedio nakon držanja Alt, a aplikacija je mislila da sam pritisnuo Alt, pa nisam ništa pritisnuo, pustio Alt i radosno je bacio moj fokus u svoj meni, što se činilo sasvim logičnim to.

Otvorio sam podešavanja za prebacivanje rasporeda tastature (znate, ovu dugačku listu sa kvadratićima za potvrdu i svim vrstama podešavanja za tastere) i podesio je da menja raspored pomoću dugmeta Alt, bez ikakvih dodatnih klikova.

Rješavanje problema s prebacivanjem pomoću alt+shift u Linuxu, u Electron aplikacijama

Nakon toga, Alt+Tab za promjenu prozora prestao je raditi. Proradio je samo Tab, odnosno neko je opet "pojeo" moj Alt. Više nije bilo pitanja ko je taj „neko“, ali nisam imao pojma šta bi se moglo uraditi sa njim.

Ali pošto je problem morao nekako da se reši, palo mi je na pamet rešenje:

  1. U postavkama onemogućite prečicu za promjenu rasporeda tastature (poništite sve potvrdne okvire u odjeljku Prebaci na drugi raspored);
  2. Kreirajte svoj vlastiti hotkey koji bi promijenio izgled umjesto mene

Opis rješenja

Prvo, instalirajmo program koji vam omogućava da dodijelite komande tipkama Xbindkeys. Nažalost, standardni alati mi nisu omogućili da kreiram prečicu za kombinaciju poput Alt+Shift preko prekrasnog interfejsa. Može se uraditi za Alt+S, Alt+1, Alt+shift+Y, itd. itd., ali ovo nije prikladno za naš zadatak.

sudo dnf install xbindkeysrc

Više detalja o tome dostupno je na ArchWiki
Zatim ćemo kreirati uzorak datoteke postavki za program. Uzorak je prilično kratak, sa nekoliko naredbi, upravo ono što vam je potrebno da shvatite kako raditi s njim:

xbindkeys -d > ~/.xbindkeysrc

Kao što možete vidjeti iz primjera u datoteci, moramo naznačiti prečicu koju želimo koristiti i naredbu koju treba izvršiti. Izgleda jednostavno.


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

Kao interventni taster, možete koristiti čitljivo pisanje ili koristiti šifre tastera. Meni je išlo samo sa kodovima, ali niko ti ne brani da malo eksperimentišeš.

Da biste dobili kodove trebate koristiti naredbu:

xbindkeys -k

Otvoriće se mali „X“ prozor. Potrebno je samo pritisnuti tipke kada je fokus na ovom prozoru! Samo u ovom slučaju ćete vidjeti nešto poput ovoga u terminalu:


[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

U mom slučaju kombinacija tipki Alt+Shift izgleda ovako:

m:0x8 + c:50

Sada moramo biti sigurni da kada kliknete na ovu kombinaciju, raspored se promijeni. Našao sam samo jednu radnu naredbu za određivanje izgleda:


setxkbmap ru
setxkbmap us

Kao što možete vidjeti iz primjera, može omogućiti samo jedan ili drugi izgled, tako da mi ništa nije palo na pamet osim pisanja skripte.


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

Sada, ako se datoteke .xbindkeysrc i layout.sh nalaze u istom direktoriju, konačni prikaz datoteke .xbindkeysrc izgleda ovako:


# 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

Nakon toga primjenjujemo promjene:


xbindkeys -p

I možete provjeriti. Ne zaboravite onemogućiti sve opcije za promjenu izgleda u standardnim postavkama.

Rezultat

Kolege, nadam se da će ovaj članak nekome pomoći da se brzo riješi dosadnog problema. Lično sam ceo svoj slobodan dan proveo pokušavajući da nekako shvatim i rešim problem, kako mi više ne bi smetao tokom radnog vremena. Napisao sam ovaj članak da nekome uštedim vrijeme i živce. Mnogi od vas koriste alternativnu metodu prebacivanja rasporeda i ne razumiju u čemu je problem. Ja lično volim da prelazim sa Alt+Shift. I tako želim da funkcionira. Ako dijelite moje mišljenje i suočeni ste s ovim problemom, ovaj članak bi vam trebao pomoći.

izvor: www.habr.com

Dodajte komentar