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.
Важно понимать:
Как правило - все ок, но:
Скрипт (или часть логики) может не заработать даже если у Вас, как и у меня - Linux Mint 22.1 Cinnamon...
По сути скрипт делает то, что Вы сами сделали бы нажатиями клавиш, т.е. - автоматизацию...
В src/functions.sh много пауз (sleep) значения которых, как мне кажется, могут быть у Вас немного другими.
Значения пауз зависит от конкретного железа, драйверов, ПО и т.д.
По этому, сразу наберитесь сил и терпения т.к., возможно, придется лезть в код, если с ходу не заработает.
Далее я попробую описать так, чтоб Вам было как можно легче все настроить и разобраться...
1) Установка утилит:
sudo apt install -y xautomation # xte
sudo apt install -y xsel xdotool xbindkeys
2) Установка прав на выполнение:
cd ./punto_switcher
chmod u=rwx,g=rwx,o=rx ./switch_last.sh
chmod u=rwx,g=rwx,o=rx ./switch_select.sh
3) Настройка горячих клавиш:
Сочетания клавиш, для работы скриптов, нужно указывать именно через 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 + z
2. Меняем ~/my_soft_path на свой путь до папки punto_switcher.
3. Можно выбрать свои свободные комбинации клавиш:
У меня это
Pause- для конвертации последнего слова.И
Control + Alt + z- для выделенного текста.
Можно посмотреть "xbindkeys --defaults", там есть примеры и описание:
xbindkeys --defaults
4. Перезапускаем xbindkeys:
killall xbindkeys
xbindkeys
4) Возможно, у Вас еще нужно будет поменять:
's/on/ru_lng/g; s/off/us_lng/g' на 's/on/us_lng/g; s/off/ru_lng/g' в src/functions.sh...
5) Если с ходу нет нужного результата (не работает):
Нужно будет заняться отладкой.
На всякий случай -> Что такое отладка?
Скрипты можно запускать в консоли и (или) делать вывод результатов в файл.
Стоит обратить внимание на значения пауз (
sleep) в коде. Возможно, нужно будет увеличивать время пауз или добавлять новые.Соответствия символов можно переопределить в
us_to_ruиru_to_us.
Все делается в src/functions.sh.
6) Что возможно пригодится?
Тут находим ID своей клавиатуры:
В моем случае это оказалось 14... Как определить свой ID смори далее.
xinput list

Тут будет видно нажатия клавиш, их числовой код:
xinput test 14
Если ID верный, мы будем видеть подобное, нажимая на клавиши:

Тут будет видно все клавиши, их коды и названия:
xmodmap -pke

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

Комментарии (5)

KonstantinTokar
31.10.2025 13:24Я как то заморочился тем же, пользуюсь на kubuntu 22.04 и 24.04
https://github.com/Pilat66/layout_switcher
От всего кроме конвертации выделенного текста я отказался, оно работает ненадёжно и в пунто, и в gxneur, - вплоть до порчи текста, - так что скоре всего это нерешаемая задача. Сам код на питоне и вроде попроще.
Verstov
на wayland тестировалось?
mi8888 Автор
X11... Когда на mint будет wayland, что нибудь придумаем =)