Punto Switcher для Linux

Домашняя страница

Что умеет скрипт?

  1. Конвертировать последнее слово перед курсором.

  2. Конвертировать выделенное.

  3. Конвертировать последнее слово в строке терминала Gnome.

  4. Конвертировать выделенное в строке терминала Gnome.

  5. Назначать отдельные сочетания клавиш для переключения на каждую из раскладок.

Направление конвертации (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 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 (Fn + p) - для конвертации последнего слова.

  • И Control + Alt + z - для выделенного текста.

Можно посмотреть "xbindkeys --defaults", там есть примеры и описание:

xbindkeys --defaults

Возможно Вам пригодится еще это (после запуска будет инструкция, о том, что нужно делать):

xbindkeys --key

4. Перезапускаем xbindkeys:

killall xbindkeys
xbindkeys

4) Возможно, у Вас еще нужно будет поменять:

'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.sh

6) Если с ходу нет нужного результата (не работает):

Нужно будет заняться отладкой.

На всякий случай -> Что такое отладка?

Скрипты можно запускать в консоли и (или) делать вывод результатов в файл.

  1. Стоит обратить внимание на значения пауз (sleep) в коде. Возможно, нужно будет увеличивать время пауз или добавлять новые.

  2. Соответствия символов можно переопределить в 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" и исправьте на нужное значение.

Вся логика тут: