Добры дзень, калегі!
Жадаю падзяліцца падзяліцца сваім рашэннем праблемы, якая пазначана ў загалоўку. Напісаннем артыкула натхніўся ад калегі
Апісанне праблемы
Выкарыстоўваў Ubuntu 18.04 для працы і ў апошні час заўважыў, што пры пераключэнні раскладкі па alt+shift у такіх прыкладаннях, як Visual Studio Code, Skype, Slack і іншых, якія створаны з дапамогай Electron узнікае наступная праблема: фокус з поля ўводу, пераходзіць да верхняй панэлі акна (меню). Па іншых прычынах пераехаў у Fedora KDE і зразумеў, што праблема нікуды не падзелася. У пошуках рашэння знайшоў цудоўны артыкул
Спрабаваў зразумець у чым справа
Такім чынам, я вырашыў вылучыць час і разабрацца, у чым справа. Цяпер коратка апішу якім шляхам я ішоў, можа быць нехта больш падкаваны ў дадзеным пытанні дапаможа растлумачыць тыя цяжкасці, з якімі я сутыкнуўся.
Я адкрыў Visual Studio Code і пачаў націскаць на розныя спалучэнні Alt+<%што-небудзь%>, гледзячы на рэакцыю прыкладання. Практычна ва ўсіх выпадках усе камбіянцыі, акрамя Alt+Shift адпрацоўвалі без страты фокусу. Складалася ўражанне, што хтосьці з'ядае націснуты Shift, які ішоў пасля заціску і ўтрыманні Alt і дадатак думае што я націснуў Alt, потым не націснуў нічога, адпусціў Alt і яно радасна кідала мой фокус у сваё меню, што яму здавалася цалкам лагічным.
Я адкрыў налады пераключэння раскладкі клавіятуры (ну ведаеце вось гэты вось доўгі спіс з чэкбоксамі і разнастайнымі наладамі для клавіш) і ўсталяваў пераключэнне раскладкі па кнопцы Alt, без якіх-небудзь дадатковых націскаў.
Пасля гэтага перастаў працаваць Alt+Tab для пераключэння вокнаў. Працаваў толькі Tab, гэта значыць хтосьці зноў "з'ядаў" мой Alt. Хто гэты "нехта" пытанняў ужо не заставалася, а вось што з ім можна зрабіць я паняцця не маю.
Але бо праблему вырашаць было трэба хоць неяк, тады ў галаву і прыйшло рашэнне:
- У наладах адключыць хоткей для пераключэння раскладкі клавіятуры (зняць усе чэкбоксы ў раздзеле Switch to another layout);
- Стварыць свой хоткей, які б пераключаў мне раскладку
Апісанне рашэння
Для пачатку ўсталюем праграму, якая дазваляе прызначаць каманды клавішам Xbindkeys. Нажаль, штатныя сродкі не дазволілі мне праз прыгожы інтэрфейс стварыць хоткей для спалучэння тыпу Alt+Shift. Можна зрабіць для Alt+S, Alt+1, Alt+shift+Y і г.д. і да т.п., але для нашай задачы гэта не падыходзіць.
sudo dnf install xbindkeysrc
Больш падрабязна пра яе ёсць на
Далей створым узор файла налад для праграмы. Узор даволі кароткі, з некалькімі камандамі якраз тое, што трэба, каб разабрацца як з ім працаваць:
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