Рашэнне праблемы з пераключэннем па alt+shift у Linux, у прыкладаннях на Electron

Добры дзень, калегі!

Жадаю падзяліцца падзяліцца сваім рашэннем праблемы, якая пазначана ў загалоўку. Напісаннем артыкула натхніўся ад калегі brnovk, які не заленаваўся і прапанаваў частковае (для мяне) вырашэнне праблемы. Я зрабіў свой «мыліц», які дапамог мне. Дзялюся з вамі.

Апісанне праблемы

Выкарыстоўваў Ubuntu 18.04 для працы і ў апошні час заўважыў, што пры пераключэнні раскладкі па alt+shift у такіх прыкладаннях, як Visual Studio Code, Skype, Slack і іншых, якія створаны з дапамогай Electron узнікае наступная праблема: фокус з поля ўводу, пераходзіць да верхняй панэлі акна (меню). Па іншых прычынах пераехаў у Fedora KDE і зразумеў, што праблема нікуды не падзелася. У пошуках рашэння знайшоў цудоўны артыкул Чынім Skype сваімі рукамі. Вялікі дзякуй таварышу brnovk, што падрабязна распавёў аб праблеме і падзяліўся сваім спосабам яе вырашэння. Але ўказаны ў артыкуле спосаб закрываў пытанне толькі з адным дадаткам, а менавіта Skype. Для мяне яшчэ было крытычным разабрацца з Visual Studio Code, таму як пісаць паведамленні з якая скача менюшкой хоць і раздражняе, але не так моцна калі займаешся распрацоўкай. Плюс да ўсяго, калега прапанаваў рашэнне, пры якім меню прыкладання знікае цалкам, а мне б не вельмі хацелася страціць меню ў VS Code.

Спрабаваў зразумець у чым справа

Такім чынам, я вырашыў вылучыць час і разабрацца, у чым справа. Цяпер коратка апішу якім шляхам я ішоў, можа быць нехта больш падкаваны ў дадзеным пытанні дапаможа растлумачыць тыя цяжкасці, з якімі я сутыкнуўся.

Я адкрыў Visual Studio Code і пачаў націскаць на розныя спалучэнні Alt+<%што-небудзь%>, гледзячы на ​​рэакцыю прыкладання. Практычна ва ўсіх выпадках усе камбіянцыі, акрамя Alt+Shift адпрацоўвалі без страты фокусу. Складалася ўражанне, што хтосьці з'ядае націснуты Shift, які ішоў пасля заціску і ўтрыманні Alt і дадатак думае што я націснуў Alt, потым не націснуў нічога, адпусціў Alt і яно радасна кідала мой фокус у сваё меню, што яму здавалася цалкам лагічным.

Я адкрыў налады пераключэння раскладкі клавіятуры (ну ведаеце вось гэты вось доўгі спіс з чэкбоксамі і разнастайнымі наладамі для клавіш) і ўсталяваў пераключэнне раскладкі па кнопцы Alt, без якіх-небудзь дадатковых націскаў.

Рашэнне праблемы з пераключэннем па alt+shift у Linux, у прыкладаннях на Electron

Пасля гэтага перастаў працаваць Alt+Tab для пераключэння вокнаў. Працаваў толькі Tab, гэта значыць хтосьці зноў "з'ядаў" мой Alt. Хто гэты "нехта" пытанняў ужо не заставалася, а вось што з ім можна зрабіць я паняцця не маю.

Але бо праблему вырашаць было трэба хоць неяк, тады ў галаву і прыйшло рашэнне:

  1. У наладах адключыць хоткей для пераключэння раскладкі клавіятуры (зняць усе чэкбоксы ў раздзеле Switch to another layout);
  2. Стварыць свой хоткей, які б пераключаў мне раскладку

Апісанне рашэння

Для пачатку ўсталюем праграму, якая дазваляе прызначаць каманды клавішам Xbindkeys. Нажаль, штатныя сродкі не дазволілі мне праз прыгожы інтэрфейс стварыць хоткей для спалучэння тыпу Alt+Shift. Можна зрабіць для Alt+S, Alt+1, Alt+shift+Y і г.д. і да т.п., але для нашай задачы гэта не падыходзіць.

sudo dnf install xbindkeysrc

Больш падрабязна пра яе ёсць на ArchWiki
Далей створым узор файла налад для праграмы. Узор даволі кароткі, з некалькімі камандамі якраз тое, што трэба, каб разабрацца як з ім працаваць:

xbindkeys -d > ~/.xbindkeysrc

Як відаць з прыкладу, які знаходзіцца ў файле, нам трэба паказаць хоткей, які мы жадаем выкарыстаць і каманду, якая павінна выканаецца. Выглядае проста.


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

У якасці хоткея можна выкарыстоўваць чалавеказразумелае напісанне або выкарыстоўваць коды клавіш. У мяне спрацавала толькі з кодамі, але ніхто не забараняе Вам крыху паэкспераментаваць.

Каб атрымаць коды трэба выкарыстоўваць каманду:

xbindkeys -k

Адкрыецца маленькае «Іксавае» акно. Націскаць клавішы трэба толькі пры фокусе на гэтае акно! Толькі ў гэтым выпадку Вы ўбачыце ў тэрмінале нешта такое:


[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

У маім выпадку камбінацыя для клавіш Alt+Shift выглядае вось так:

m:0x8 + c:50

Цяпер трэба зрабіць так, каб пры націску на гэтую камбаніцыю, адбывалася менавіта пераключэнне раскладкі. Я знайшоў толькі адну працоўную каманду для ўказання раскладкі:


setxkbmap ru
setxkbmap us

Як відаць з прыкладу яна ўмее толькі ўключаць тую ці іншую раскладку, таму нічога акрамя напісання скрыпту мне ў галаву не прыйшло.


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

Цяпер калі файлы .xbindkeysrc і layout.sh ляжаць у адной дырэкторыі, то канчатковы выгляд файла .xbindkeysrc выглядае так:


# 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

Пасля гэтага ўжываем змены:


xbindkeys -p

І можна правяраць. Не забудзьцеся адключыць любыя опцыі па пераключэнні раскладкі ў штатных наладах.

Вынік

Калегі, спадзяюся, што дадзены артыкул зможа дапамагчы хутка камусьці пазбавіцца ад назойлівай праблемы. Асабіста я выдаткаваў увесь свой выходны на тое, каб разабрацца і вырашыць праблему хоць неяк, каб больш не адцягвацца на гэта ў працоўны час. Напісаў дадзены артыкул з мэтай зэканоміць камусьці час і нервы. Многія з Вас выкарыстоўваюць альтэрнатыўны спосаб пераключэння раскладкі і не разумеюць у чым жа праблема. Мне асабіста падабаецца перамыкацца па Alt+Shift. І я хачу, каб працавала менавіта так. Калі Вы падзяляеце маё меркаванне і сутыкнуліся з дадзенай праблемай, гэты артыкул павінен Вам дапамагчы.

Крыніца: habr.com

Дадаць каментар