Riešenie problému s prepínaním pomocou alt+shift v Linuxe, v aplikáciách Electron

Ahojte kolegovia!

Chcem sa podeliť o svoje riešenie problému, ktorý je uvedený v nadpise. K napísaniu tohto článku ma inšpiroval kolega brnovk, ktorý nelenil a ponúkol čiastočné (pre mňa) riešenie problému. Vyrobil som si vlastnú „barličku“, ktorá mi pomohla. Zdieľam s vami.

Popis problému

Na prácu som používal Ubuntu 18.04 a nedávno som si všimol, že pri prepínaní rozložení pomocou alt+shift v aplikáciách, ako sú Visual Studio Code, Skype, Slack a iné, ktoré boli vytvorené pomocou Electronu, sa vyskytuje nasledujúci problém: zameranie zo vstupného poľa ide hore panel okna (menu). Z iných dôvodov som prešiel na Fedora + KDE a uvedomil som si, že problém nezmizol. Pri hľadaní riešenia som našiel úžasný článok Ako opraviť Skype sami. Veľká vďaka súdruh brnovk, ktorý o probléme podrobne porozprával a podelil sa o spôsob jeho riešenia. Ale metóda uvedená v článku vyriešila problém iba s jednou aplikáciou, a to Skype. Pre mňa bolo tiež dôležité porozumieť Visual Studio Code, pretože písanie správ pomocou skokového menu, aj keď je otravné, nie je až také, ak sa podieľate na vývoji. Navyše kolega navrhol riešenie, v ktorom menu aplikácie úplne zmizne a ja by som naozaj nechcel stratiť menu vo VS Code.

Snažil som sa pochopiť, čo sa deje

Rozhodol som sa teda nájsť si čas a zistiť, čo sa deje. Teraz stručne opíšem cestu, ktorou som sa vydal, možno niekto znalejší v tejto veci pomôže vysvetliť ťažkosti, s ktorými som sa stretol.

Otvoril som Visual Studio Code a začal som stláčať rôzne kombinácie Alt+<%something%>, aby som zistil, ako aplikácia reaguje. Takmer vo všetkých prípadoch fungovali všetky kombinácie okrem Alt+Shift bez straty zamerania. Zdalo sa mi, že niekto jedol stlačený Shift, ktorý nasledoval po podržaní Alt a aplikácia si myslela, že som stlačil Alt, potom nestlačil nič, uvoľnil Alt a ono to radostne hodilo moju pozornosť do svojho menu, čo sa mi zdalo celkom logické. to.

Otvoril som nastavenia na prepínanie rozložení klávesnice (viete, tento dlhý zoznam so začiarkavacími políčkami a všemožnými nastaveniami pre klávesy) a nastavil som na prepínanie rozložení pomocou tlačidla Alt bez ďalších kliknutí.

Riešenie problému s prepínaním pomocou alt+shift v Linuxe, v aplikáciách Electron

Potom prestali fungovať Alt+Tab na prepínanie okien. Fungoval iba Tab, teda niekto mi opäť „zožral“ Alt. Nezostali žiadne otázky o tom, kto je tento „niekto“, ale netušil som, čo sa s ním dá robiť.

Ale keďže sa problém musel nejako vyriešiť, prišlo na um riešenie:

  1. V nastaveniach vypnite klávesovú skratku na prepínanie rozložení klávesnice (zrušte začiarknutie všetkých políčok v časti Prepnúť na iné rozloženie);
  2. Vytvorte si vlastnú klávesovú skratku, ktorá by mi zmenila rozloženie

Popis riešenia

Najprv si nainštalujte program, ktorý vám umožní priradiť príkazy klávesom Xbindkeys. Bohužiaľ, štandardné nástroje mi neumožnili vytvoriť klávesovú skratku pre kombináciu ako Alt + Shift cez krásne rozhranie. Dá sa to urobiť pre Alt+S, Alt+1, Alt+shift+Y atď. atď., ale to nie je vhodné pre našu úlohu.

sudo dnf install xbindkeysrc

Ďalšie podrobnosti o ňom sú k dispozícii na ArchWiki
Ďalej vytvoríme vzorový súbor s nastaveniami programu. Ukážka je pomerne krátka, obsahuje niekoľko príkazov, presne to, čo potrebujete, aby ste zistili, ako s ňou pracovať:

xbindkeys -d > ~/.xbindkeysrc

Ako môžete vidieť z príkladu v súbore, musíme uviesť klávesovú skratku, ktorú chceme použiť, a príkaz, ktorý sa má vykonať. Vyzerá jednoducho.


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

Ako klávesovú skratku môžete použiť ľudsky čitateľný text alebo použiť kódy kláves. Mne to fungovalo len s kódmi, ale nikto vám nezakazuje trochu experimentovať.

Ak chcete získať kódy, musíte použiť príkaz:

xbindkeys -k

Otvorí sa malé okno „X“. Stačí stlačiť klávesy, keď je zameranie na toto okno! Iba v tomto prípade uvidíte v termináli niečo také:


[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

V mojom prípade kombinácia klávesov Alt + Shift vyzerá takto:

m:0x8 + c:50

Teraz sa musíme uistiť, že po kliknutí na túto kombináciu sa rozloženie prepne. Našiel som iba jeden funkčný príkaz na určenie rozloženia:


setxkbmap ru
setxkbmap us

Ako môžete vidieť z príkladu, môže povoliť iba jedno alebo druhé rozloženie, takže ma nenapadlo nič iné ako písanie 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

Ak sú súbory .xbindkeysrc a layout.sh umiestnené v rovnakom adresári, potom konečný pohľad na súbor .xbindkeysrc vyzerá takto:


# 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

Potom aplikujeme zmeny:


xbindkeys -p

A môžete skontrolovať. Nezabudnite vypnúť všetky možnosti prepínania rozložení v štandardných nastaveniach.

Celkový

Kolegovia, dúfam, že tento článok niekomu pomôže rýchlo sa zbaviť nepríjemného problému. Osobne som sa celý deň voľna snažil problém nejako vymyslieť a vyriešiť, aby ma to už nerozptyľovalo počas pracovnej doby. Tento článok som napísal, aby som niekomu ušetril čas a nervy. Mnohí z vás používajú alternatívny spôsob prepínania rozložení a nechápu, v čom je problém. Osobne sa mi páči prepínanie pomocou Alt+Shift. A tak chcem, aby to fungovalo. Ak zdieľate môj názor a stretávate sa s týmto problémom, tento článok by vám mal pomôcť.

Zdroj: hab.com

Pridať komentár