Здравейте, колеги!
Искам да споделя своето решение на проблема, която е посочена в заглавието. Вдъхнових се да напиша статия от колега , който не се е поколебал и предложи частично (за мен) решение на проблема. Направих своя „хак“, който ми помогна. Споделям с вас.
Описание на проблема
Използвах Ubuntu 18.04 за работа и напоследък забелязах, че когато сменям разкладката с alt+shift в приложения като Visual Studio Code, Skype, Slack и други, създадени с помощта на Electron, възниква следният проблем: фокусът от полето за въвеждане преминава към горната част на прозореца (менюто). По други причини преминах на Fedora + KDE и разбрах, че проблемът не е изчезнал. В търсене на решение намерих чудесна статия . Огромно благодаря на другарят , който детайлно разказа за проблема и сподели своя метод за решението му. Но указаното в статията решение закриваше въпроса само с едно приложение, а именно Skype. За мен беше критично да разбера и Visual Studio Code, защото писането на съобщения с подскачащо меню, макар и дразнещо, не е толкова болезнено, когато се занимаваш с разработка. Плюс на всичкото, колегата предложи решение, при което менюто на приложението напълно изчезва, а на мен не ми се искаше да загубя менюто в VS Code.
Опитах да разбера какво става
И така, реших да отделя време да разбера какво става. Сега накратко ще опиша по кой път минах, може би някой по-запознат с въпроса ще помогне да изясни трудностите, с които се срещнах.
Отворих Visual Studio Code и започнах да натискам различни комбинации Alt+, наблюдавайки реакцията на приложението. Практически във всички случаи всички комбинации, освен Alt+Shift, работеха без загуба на фокус. Възникваше впечатление, че някой поглъща натиснатия Shift, който следваше след задържането на Alt, и приложението мислеше, че съм натиснал Alt, след това не натискам нищо, пускам Alt и то радостно прехвърляше фокуса ми в своето меню, което му се струваше напълно логично.
Отворих настройките за превключване на клавиатурната разклатка (знаете, този дълъг списък с чекбоксове и всякакви настройки за клавишите) и зададох превключването на разклатката с бутона Alt, без допълнителни натискания.

След това Alt+Tab спря да работи за превключване между прозорците. Работеше само Tab, т.е. някой отново е "изял" моя Alt. Кой е този "някой" вече няма въпроси, но нямам представа какво може да се направи с него.
Но тъй като беше необходимо да се реши проблема по някакъв начин, в главата ми дойде решение:
- В настройките деактивирайте хоткея за превключване на клавиатурната подредба (премахнете всички отметки в раздела Превключване на друга подредба);
- Създайте свой собствен хоткей, който ще променя моята подредба
Описание на решението
Първо ще инсталираме програма, която позволява да назначавате команди на клавиши 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
Натиснете комбинация от клавиши и/или кликнете под прозореца.
Можете да използвате една от двете линии след "NoCommand"
в $HOME/.xbindkeysrc за свързване на клавиш.
"(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
