Ahoj kolegové!
Rád bych se s vámi podělil o své řešení problému uvedeného v názvu. K napsání tohoto článku mě inspiroval kolega. , který si dal tu práci a nabídl mi částečné (pro mě) řešení problému. Vytvořil jsem si vlastní „cheat“, který mi pomohl. Sdílím ho s vámi.
Popis problému
Použitý Ubuntu Používám verzi 18.04 pro práci a nedávno jsem si všiml, že při přepínání rozvržení pomocí Alt+Shift v aplikacích jako Visual Studio Code, Skype, Slack a dalších vytvořených v Electronu dochází k následujícímu problému: fokus se přesune ze vstupního pole do horního panelu okna (menu). Z jiných důvodů jsem přešel na Fedoru + KDE a zjistil jsem, že problém přetrvává. Při hledání řešení jsem narazil na tento vynikající článek. Moc děkuji, soudruhu. , který problém podrobně popsal a podělil se o své řešení. Řešení popsané v článku však fungovalo pouze s jednou aplikací, Skypem. Bylo pro mě také klíčové pochopit Visual Studio Code, protože i když je posílání zpráv s skákacím menu otravné, není to tak hrozné, pokud vyvíjíte. Navíc kolega navrhl řešení, které nabídku aplikace úplně zmizí, a já jsem o menu ve VS Code opravdu přijít nechtěl.
Snažil jsem se pochopit, co se děje.
Rozhodl jsem se tedy, že si udělám čas na to, abych zjistil, co se děje. Stručně popíšu cestu, kterou jsem se vydal; možná mi někdo, kdo se v této oblasti lépe orientuje, pomůže objasnit potíže, se kterými jsem se setkal.
Otevřel jsem Visual Studio Code a začal mačkat různé kombinace Alt+<%something%> a sledoval odezvu aplikace. Téměř ve všech případech všechny kombinace kromě Alt+Shift fungovaly bez ztráty fokusu. Měl jsem pocit, jako by něco hltalo klávesu Shift, kterou jsem stiskl po podržení Alt, a aplikace si myslela, že jsem stiskl Alt, pak nestiskla nic, uvolnila Alt a spokojeně přesunula můj fokus do své nabídky, což se jí zdálo naprosto logické.
Otevřel jsem nastavení přepínání rozložení klávesnice (víte, ten dlouhý seznam se zaškrtávacími políčky a všemožnými nastaveními pro klávesy) a nastavil přepínání rozložení na klávesu Alt, bez jakéhokoli dalšího stisknutí.

Poté přestalo fungovat přepínání oken pomocí klávesy Alt+Tab. Fungoval pouze Tab, což znamenalo, že mi někdo zase „žral“ klávesu Alt. Už nebylo pochyb o tom, kdo ten „někdo“ je, ale neměl jsem tušení, co s tím mám dělat.
Ale protože problém bylo potřeba nějak vyřešit, napadlo mě řešení:
- V nastavení zakažte 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í);
- Vytvořit si vlastní klávesovou zkratku, která by přepínala rozložení
Popis řešení
Nejprve si nainstalujme Xbindkeys, program, který umožňuje přiřazovat příkazy klávesám. Bohužel mi vestavěné nástroje neumožnily vytvořit klávesovou zkratku pro kombinaci jako Alt+Shift s využitím jejího atraktivního rozhraní. Můžete ji vytvořit pro Alt+S, Alt+1, Alt+shift+Y atd., ale pro naše účely to není vhodné.
sudo dnf install xbindkeysrc Více podrobností o tom naleznete na
Dále si vytvořme ukázkový soubor s nastavením programu. Je poměrně krátký, obsahuje jen několik příkazů, přesně to, co potřebujete k pochopení jeho používání:
xbindkeys -d > ~/.xbindkeysrcJak vidíte z příkladu v souboru, musíme zadat klávesovou zkratku, kterou chceme použít, a příkaz, který se má spustit. 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 pravopis srozumitelný pro člověka nebo kódy kláves. Klávesové kódy byly jediné, co mi fungovalo, ale klidně trochu experimentujte.
Pro získání kódů je potřeba použít příkaz:
xbindkeys -kOtevře se malé okno s křížkem. Klávesy byste měli stisknout pouze tehdy, když je toto okno aktivní! Teprve poté uvidíte v terminálu něco jako toto:
[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:50Teď potřebuji udělat tak, aby stisknutí této kombinace skutečně přepínalo rozložení klávesnice. Našel jsem pouze jeden funkční příkaz pro určení rozložení:
setxkbmap ru
setxkbmap us
Jak je vidět z příkladu, umí povolit pouze jedno nebo druhé rozvrž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
Pokud se soubory .xbindkeysrc a layout.sh nacházejí ve stejném adresáři, vypadá konečný vzhled souboru .xbindkeysrc 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 se podívat. Nezapomeňte ve výchozím nastavení vypnout všechny možnosti přepínání rozvržení.
Celkový
Kolegové, doufám, že tento článek někomu pomůže rychle se zbavit otravného problému. Osobně jsem strávil celý víkend snahou přijít na to, jak ho vyřešit, abych se s ním nemusel znovu trápit během pracovní doby. Napsal jsem tento článek, abych někomu ušetřil čas a frustraci. Mnozí z vás používají alternativní způsob přepínání rozložení klávesnice a problému nerozumí. Osobně preferuji Alt+Shift a chci, aby to tak fungovalo. Pokud sdílíte můj názor a máte s tímto problémem problémy, měl by vám tento článek pomoci.
Zdroj: www.habr.com
