Punto Switcher для Linux
Домашняя страница




Что умеет скрипт?
Конвертировать последнее слово перед курсором.
Конвертировать выделенное.
Конвертировать последнее слово в строке терминала Gnome.
Конвертировать выделенное в строке терминала Gnome.
Назначать отдельные сочетания клавиш для переключения на каждую из раскладок.
Направление конвертации (ru_to_us или us_to_ru) и менять ли раскладку после, определяется автоматически. Зависит от количества совпадений с раскладкой в конвертируемом слове, если это не удалось определить, то от текущей раскладки.
Всего должно быть 2 раскладки (но легко переделать и под более, чем 2). Все соответствия настраиваются в ru_to_us и us_to_ru в src/functions.sh. Даже не важно какие 2 раскладки у Вас в системе... В ru_to_us и us_to_ru можно настроить любые 2.
Важно понимать:
Скрипт работает на x11. Проверяем:
echo $XDG_SESSION_TYPEПереключиться на x11 сейчас можно при входе в систему. Например, в Ubuntu:

Если выводит wayland, работать не будет...
Как правило - все ок, но:
Скрипт (или часть логики) может не заработать даже если у Вас, как и у меня - Linux Mint 22.1 Cinnamon...
По сути скрипт делает то, что Вы сами сделали бы нажатиями клавиш, т.е. - автоматизацию...
В src/functions.sh много пауз (sleep) значения которых, как мне кажется, могут быть у Вас немного другими.
Значения пауз зависит от конкретного железа, драйверов, ПО или когда компьютер подвисает...
По этому, с��азу наберитесь сил и терпения т.к., возможно, придется лезть в код, если с ходу не заработает.
Далее я попробую описать так, чтоб Вам было как можно легче все настроить и разобраться...
1) Установка утилит:
sudo apt install -y xautomation # xte
sudo apt install -y xsel xdotool xbindkeys2) Установка прав на выполнение:
cd ./punto_switcher
chmod u=rwx,g=rwx,o=rx ./switch_last.sh
chmod u=rwx,g=rwx,o=rx ./switch_select.sh3) Настройка горячих клавиш:
Сочетания клавиш, для работы скриптов, нужно указывать именно через xbindkeys. Т.к. в xbindkeys можно указать тип события "Release", т.е. когда все клавиши были отпущены. Иначе, работать точно не будет. Отпускать клавиши надо в обратном порядке. Сначала z, а потом остальные.
1. Добавляем в конец ~/.xbindkeysrc (если нету, то нужно создать):
"~/my_soft_path/punto_switcher/switch_last.sh"
Release + Pause
"~/my_soft_path/punto_switcher/switch_select.sh"
Release + Control + Alt + z2. Меняем ~/my_soft_path на свой путь до папки punto_switcher.
3. Можно выбрать свои свободные комбинации клавиш:
У меня это
Pause(Fn + p) - для конвертации последнего слова.И
Control + Alt + z- для выделенного текста.
Можно посмотреть "xbindkeys --defaults", там есть примеры и описание:
xbindkeys --defaultsВозможно Вам пригодится еще это (после запуска будет инструкция, о том, что нужно делать):
xbindkeys --key4. Перезапускаем xbindkeys:
killall xbindkeys
xbindkeys4) Возможно, у Вас еще нужно будет поменять:
's/on/ru/g; s/off/us/g' на 's/on/us/g; s/off/ru/g' в src/functions.sh...
5) Назначение отдельных сочетания клавиш для переключения на каждую из раскладок:
Назначить клавиши, можно через GUI в Вашей ОС. Но у меня, иногда они не срабатывали, хотя нажатия клавиш были, если смотреть по xinput test <ID клавиатуры>. Скорее всего, это проблема в моей ОС... Если у Вас все в порядке, то просто назначьте клавиши для этих команд:
~/my_soft_path/punto_switcher/switch_layout.sh us
~/my_soft_path/punto_switcher/switch_layout.sh ruМеняем ~/my_soft_path на свой путь до папки punto_switcher.
Если как и у меня, иногда не срабатывают, назначенные через GUI сочетания:
Если хотите использовать сочетания не модификаторы, то опять же подойдет xbindkeys. Просто добавьте те команды через него... xbindkeys, как и его аналог sxhkd, не работает с модификаторами. По этому, если Вы хотите модификаторы, то Вам нужно добавить в ~/.profile демона:
if [ -f ~/my_soft_path/punto_switcher/switch_layout.sh ]; then
~/my_soft_path/punto_switcher/switch_layout.sh daemon &
fiМеняем ~/my_soft_path на свой путь до папки punto_switcher. Но сперва демона нужно будет настроить...
В switch_layout.sh нужно указать:
cfg_keyboard_id=14
cfg_combo_key_us_1="Super_L"
cfg_combo_key_us_2="Shift_L"
cfg_combo_key_ru_1="Super_L"
cfg_combo_key_ru_2="Control_L"Как указать cfg_keyboard_id можно почитав "Как посмотреть список устройств ввода?" и "Как посмотреть события нажатия клавиш?" ниже. Если Вы хотите настроить свои сочетания клавиш, посмотрите "Как посмотреть коды и названия клавиш?". Вообще, я выбрал именно эти сочетания, по разным причинам. У меня эти клавиши находятся рядом. И они, являются единственными свободными сочетаниями-модификаторами, которые больше не используются ни в каких программах.
Установите права на выполнение:
cd ./punto_switcher
chmod u=rwx,g=rwx,o=rx ./switch_layout.sh6) Если с ходу нет нужного результата (не работает):
Нужно будет заняться отладкой.
На всякий случай -> Что такое отладка?
Скрипты можно запускать в консоли и (или) делать вывод результатов в файл.
Стоит обратить внимание на значения пауз (
sleep) в коде. Возможно, нужно будет увеличивать время пауз или добавлять новые.Соответствия символов можно переопределить в
us_to_ruиru_to_us.
Все делается в src/functions.sh.
7) Что возможно пригодится?
Как посмотреть список устройств ввода?
xinput listВ моем случае клавиатура, оказалось с ID 14...

Как посмотреть события нажатия клавиш?
14 - это ID моей клавиатуры. Свой ID, можно поискать так: xinput list. Если ID верный, мы будем видеть подобное, нажимая на клавиши.
xinput test 14
Как посмотреть коды и названия клавиш?
xmodmap -pke
Для настройки конвертации в терминале (Gnome terminal):
См��трим что выводит:
xprop -id "$(xdotool getactivewindow)" WM_CLASS | awk -F '"' '{print $4}'Если команда, выполненная в активном окне Gnome terminal, выводит не "Gnome-terminal", то найдите в src/functions.sh "Gnome-terminal" и исправьте на нужное значение.
Вся логика тут:
