Řešení problému s přepínáním pomocí alt+shift v Linuxu, v aplikacích Electron

Ahoj kolegové!

Chci se podělit o své řešení problému, který je uveden v názvu. K napsání tohoto článku mě inspiroval kolega brnovk, který nelenil a nabídl částečné (pro mě) řešení problému. Vyrobil jsem si vlastní „berličku“, která mi pomohla. Sdílím s vámi.

Popis problému

K práci jsem používal Ubuntu 18.04 a nedávno jsem si všiml, že při přepínání rozložení pomocí alt+shift v aplikacích jako Visual Studio Code, Skype, Slack a dalších, které byly vytvořeny pomocí Electronu, dochází k následujícímu problému: fokus ze vstupního pole jde nahoru panelu okna (menu). Z jiných důvodů jsem přešel na Fedora + KDE a uvědomil jsem si, že problém nezmizel. Při hledání řešení jsem našel úžasný článek Jak opravit Skype sami. Mnohokrát děkuji soudruhu brnovk, který o problému podrobně hovořil a podělil se o způsob jeho řešení. Ale metoda uvedená v článku vyřešila problém pouze s jednou aplikací, konkrétně Skype. Pro mě bylo také důležité porozumět kódu Visual Studio, protože psaní zpráv pomocí skákacího menu, i když otravné, není tolik, pokud se podílíte na vývoji. Navíc kolega navrhl řešení, ve kterém nabídka aplikace úplně zmizí, a opravdu bych nechtěl přijít o nabídku ve VS Code.

Snažil jsem se pochopit, co je špatně

Rozhodl jsem se tedy dát si čas a zjistit, co se děje. Nyní stručně popíšu cestu, kterou jsem šel, možná někdo znalejší v této věci pomůže vysvětlit potíže, se kterými jsem se setkal.

Otevřel jsem Visual Studio Code a začal jsem makat na různé kombinace Alt+<%něco%>, abych viděl, jak aplikace reaguje. Téměř ve všech případech fungovaly všechny kombinace kromě Alt+Shift bez ztráty zaměření. Vypadalo to, jako by někdo jedl stisknutý Shift, který následoval po podržení Alt a aplikace si myslela, že jsem stiskl Alt, pak nic nestiskl, pustil Alt a radostně mě vrhla do své nabídky, což se mi zdálo celkem logické. to.

Otevřel jsem nastavení pro přepínání rozložení klávesnice (znáte tento dlouhý seznam se zaškrtávacími políčky a všemožnými nastaveními kláves) a nastavil jsem na přepínání rozložení pomocí tlačítka Alt, bez dalších kliknutí.

Řešení problému s přepínáním pomocí alt+shift v Linuxu, v aplikacích Electron

Poté přestala fungovat Alt+Tab pro přepínání oken. Fungoval pouze Tab, tedy někdo mi zase „sežral“ Alt. Nezůstaly žádné otázky o tom, kdo ten „někdo“ je, ale neměl jsem ponětí, co by se s ním dalo dělat.

Ale protože problém musel být nějak vyřešen, pak přišlo na mysl řešení:

  1. V nastavení deaktivujte klávesovou zkratku pro přepínání rozložení klávesnice (zrušte zaškrtnutí všech políček v části Přepnout na jiné rozložení);
  2. Vytvořte si vlastní klávesovou zkratku, která by mi změnila rozložení

Popis řešení

Nejprve si nainstalujme program, který vám umožní přiřadit příkazy klávesám Xbindkeys. Bohužel mi standardní nástroje neumožnily vytvořit klávesovou zkratku pro kombinaci jako Alt+Shift přes krásné rozhraní. Lze provést pro Alt+S, Alt+1, Alt+shift+Y atd. atd., ale to se pro náš úkol nehodí.

sudo dnf install xbindkeysrc

Další podrobnosti o něm jsou k dispozici na ArchWiki
Dále vytvoříme vzorový soubor nastavení programu. Ukázka je poměrně krátká, obsahuje několik příkazů, přesně to, co potřebujete, abyste zjistili, jak s tím pracovat:

xbindkeys -d > ~/.xbindkeysrc

Jak můžete vidět z příkladu v souboru, musíme označit klávesovou zkratku, kterou chceme použít, a příkaz, který se má provést. Vypadá to jednoduše.


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

Jako klávesovou zkratku můžete použít písmo čitelné pro člověka nebo použít kódy kláves. Osvědčilo se mi to jen s kódy, ale nikdo vám nezakazuje trochu experimentovat.

Chcete-li získat kódy, musíte použít příkaz:

xbindkeys -k

Otevře se malé okno „X“. Stačí stisknout klávesy, když je fokus na toto okno! Pouze v tomto případě uvidíte v terminálu něco takového:


[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 mém případě vypadá kombinace kláves Alt+Shift takto:

m:0x8 + c:50

Nyní se musíme ujistit, že po kliknutí na tuto kombinaci se rozložení přepne. Našel jsem pouze jeden funkční příkaz k určení rozložení:


setxkbmap ru
setxkbmap us

Jak je vidět z příkladu, umí povolit jen to či ono rozložení, takže mě nenapadlo nic jiného než napsat 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

Nyní, pokud jsou soubory .xbindkeysrc a layout.sh umístěny ve stejném adresáři, pak konečný pohled na soubor .xbindkeysrc vypadá 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

Poté aplikujeme změny:


xbindkeys -p

A můžete zkontrolovat. Nezapomeňte ve standardním nastavení zakázat jakékoli možnosti přepínání rozložení.

Celkový

Kolegové, doufám, že tento článek někomu pomůže rychle se zbavit nepříjemného problému. Osobně jsem celý den volna strávil tím, že jsem se snažil problém nějak vymyslet a vyřešit, abych se tím v pracovní době už nerozptyloval. Tento článek jsem napsal, abych někomu ušetřil čas a nervy. Mnoho z vás používá alternativní způsob přepínání rozložení a nechápe, v čem je problém. Osobně rád přepínám pomocí Alt+Shift. A tak chci, aby to fungovalo. Pokud sdílíte můj názor a čelíte tomuto problému, tento článek by vám měl pomoci.

Zdroj: www.habr.com

Přidat komentář