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
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
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í.
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:
- 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);
- 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
Ď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