Pozdrav svima!
Želim podijeliti svoje rješenje problema navedenog u naslovu. Inspiraciju za pisanje ovog članka dobio sam od kolege , koji se nije ustručavao i ponudio djelomično (za mene) rješenje problema. Napravio sam svoj 'patch' koji mi je pomogao. Dijelim to s vama.
Opis problema
Koristio sam Ubuntu 18.04 za rad i nedavno sam primijetio da pri prebacivanju jezika pomoću alt+shift u aplikacijama poput Visual Studio Code, Skype, Slack i drugih koje su napravljene pomoću Electron nastaje sljedeći problem: fokus iz ulaznog polja prelazi na gornju traku prozora (izbornik). Zbog drugih razloga prešao sam na Fedora + KDE i shvatio da problem nije nestao. U potrazi za rješenjem pronašao sam divan članak . Veliko hvala kolegi , koji je detaljno objasnio problem i podijelio svoj način rješavanja. Međutim, navedena metoda u članku rješavala je pitanje samo za jednu aplikaciju, a to je Skype. Za mene je također bilo ključno doći do rješenja za Visual Studio Code, jer pisanje poruka s iskačućim izbornikom iako iritira, nije toliko strašno kad se bavite razvojem. Također, kolega je predložio rješenje pri kojem izbornik aplikacije potpuno nestaje, a ja ne bih želio izgubiti izbornik u VS Code-u.
Pokušavao sam shvatiti u čemu je problem
Dakle, odlučio sam odvojiti vrijeme i detaljno istražiti u čemu je problem. Sada ću ukratko opisati kojim sam putem išao, možda će netko tko je više upućen u ovu temu pomoći razjasniti poteškoće s kojima sam se suočio.
Otvorio sam Visual Studio Code i počeo pritiskati različite kombinacije Alt+, promatrajući reakciju aplikacije. U gotovo svim slučajevima sve kombinacije, osim Alt+Shift, su radile bez gubitka fokusa. Ostvario se dojam da netko 'jede' pritisnut Shift, koji je uslijedio nakon pritisnute i zadržane Alt, i aplikacija misli da sam pritisnuo Alt, a zatim nisam pritisnuo ništa, pustio Alt i ona sretno prebacuje moj fokus u svoje izbornike, što se čini logičnim.
Otvorio sam postavke prebacivanja jezika tipkovnice (znate, onaj dugi popis s okvirima za potvrdu i raznim postavkama za tipke) i postavio prebacivanje jezika na tipku Alt, bez ikakvih dodatnih pritisaka.

Nakon toga prestala je raditi Alt+Tab za prebacivanje prozora. Radila je samo Tab, odnosno netko je ponovno 'pojeo' moj Alt. Tko je taj 'netko' više nije bilo sumnje, ali što učiniti s njim, nemam pojma.
No, budući da je problem trebalo riješiti na bilo koji način, tada mi je pala na pamet ideja:
- U postavkama isključite prečac za prebacivanje rasporeda tipkovnice (uklonite sve potvrdne okvire u odjeljku 'Prebaci na drugi raspored');
- Stvorite svoj prečac koji će mi prebacivati raspored
Opis rješenja
Za početak, instalirat ćemo program koji omogućuje dodjeljivanje komandi tipkama, Xbindkeys. Nažalost, ugrađeni alati nisu mi omogućili da stvorim prečac za kombinaciju poput Alt+Shift kroz lijepu sučelje. Može se napraviti za Alt+S, Alt+1, Alt+Shift+Y i slično, ali za naš zadatak to nije prikladno.
sudo dnf install xbindkeysrc Detaljnije o njemu možete pročitati na
Sljedeće ćemo stvoriti uzorak datoteke postavki za program. Uzorak je prilično kratak, s nekoliko komandi, baš ono što nam treba da razumijemo kako raditi s njim:
xbindkeys -d > ~/.xbindkeysrcKao što se može vidjeti iz primjera koji se nalazi u datoteci, trebamo navesti prečac koji želimo koristiti i komandu koja se 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 prečac možete koristiti razumljiv naziv ili koristiti kodove tipki. Meni je upalilo samo s kodovima, no nitko vam ne brani da malo eksperimentirate.
Za dobivanje kodova potrebno je koristiti komandu:
xbindkeys -kOtvorit će se malo 'X' okno. Tipke je potrebno pritiskati samo kada je fokus na tom prozoru! Samo u tom slučaju ćete vidjeti u terminalu nešto poput ovoga:
[podkmax@localhost ~]$ xbindkeys -k
Pritisnite kombinaciju tipki ili kliknite ispod prozora.
Možete koristiti jedan od dva retka nakon "NoCommand"
u $HOME/.xbindkeysrc za vezivanje tipke.
"(Funkcija sheme)"
m:0x4 + c:39
Control + s
U mom slučaju kombinacija za tipke Alt+Shift izgleda ovako:
m:0x8 + c:50Sada je potrebno napraviti da pri pritisku na ovu kombinaciju dođe do prebacivanja rasporeda. Pronašao sam samo jednu radnu komandu za određivanje rasporeda:
setxkbmap ru
setxkbmap us
Kao što se može vidjeti iz primjera, ona može samo uključiti određeni raspored, stoga mi nije preostalo ništa osim da napišem skriptu.
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 izgled datoteke .xbindkeysrc bi izgledao 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 isključiti sve opcije za prebacivanje rasporeda u standardnim postavkama.
Zaključak
Dragi kolege, nadam se da će vam ovaj članak pomoći da brzo riješite dosadni problem. Osobno sam proveo cijeli vikend pokušavajući shvatiti i riješiti problem kako bih se više ne ometao tokom radnog vremena. Napisao sam ovaj članak s ciljem da uštedim nekome vrijeme i živce. Mnogi od vas koriste alternativni način prebacivanja rasporeda i ne razumiju u čemu je problem. Osobno mi se sviđa prebacivati se koristeći Alt+Shift. I želim da to radi upravo tako. Ako dijelite moje mišljenje i imali ste sličan problem, ovaj članak će vam pomoći.
Izvor: habr.com
