Исправление текста, напечатанного в другой раскладке

Дмитрий Корнев
4 декабря 2020

Под Linux мне не попадалось хорошей программы, чтобы исправлять набранное не в той раскладке. Они были либо глючными, либо какими-то сомнительными. Нашёл решение, как это делать при помощи простого bash-скрипта.

Идея отсюда. Но у меня скрипты получились немного проще.

Исправление выделенного текста:

#!/bin/bash
xdotool key Ctrl+Insert
sleep 0.1s
xsel | sed "y/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[]{};':\",.\/<>?@#\$^&\`~фисвуапршолдьтщзйкыегмцчняФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯхъХЪжэЖЭбюБЮ№ёЁ/фисвуапршолдьтщзйкыегмцчняФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯхъХЪжэЖЭбю.БЮ,\"№;:?ёЁabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[]{};':\",.<>#\`~/" | xsel -b -i
sleep 0.1s
xdotool key Shift+Insert
sleep 0.1s
xdotool key Shift+Alt

Исправление последнего слова, либо всей строки, если в ней нет пробелов:

#!/bin/bash
xsel --clear
sleep 0.1s
xdotool key Shift+Ctrl+Left
sleep 0.1s
xdotool key Ctrl+Insert
sleep 0.1s
xsel | sed "y/abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[]{};':\",.\/<>?@#\$^&\`~фисвуапршолдьтщзйкыегмцчняФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯхъХЪжэЖЭбюБЮ№ёЁ/фисвуапршолдьтщзйкыегмцчняФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯхъХЪжэЖЭбю.БЮ,\"№;:?ёЁabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ[]{};':\",.<>#\`~/" | xsel -b -i
sleep 0.1s
xdotool key Shift+Insert
sleep 0.1s
xdotool key Shift+Alt

Чтобы это работало нужны утилиты:

sudo apt install xdotool xsel

Утилита xdotool нажимает нужные кнопки, по коду видно, что происходит. В конце осуществляется ещё и переключение раскладки — Shift+Alt. Едиственное неудобство заключается в том, что приходится использовать буфер обмена, где может находиться, что-то нужное в этот момент.

Каждый приведенный код записывается в отдельный sh-файл. Файлам даются права на выполнение. Далее прописываем выполнение этих файлов по каким-нибудь удобным для себя комбинациям клавиш. В Elementary OS это делается здесь:

Запуск скриптов в Elementary OS по комбинациям клавиш

3 комментария

Вл
Xswitcher не? https://habr.com/ru/post/495748/
Спасибо, я видел эту публикацию. Меня смущает, что там надо запускать с правами root. Здесь же с bash-скриптом простейший вариант, никакого риска.
Ал
Заработало только после модификации: - добавил опцию в первую команду "xdotool key --clearmodifiers ctrl+Insert". Это понятно - скрипт запускаю нажатием Shift+Break, вот этот Shift нажатый мешал; - добавил опцию во вторую команду "xsel -o | sed "y/.....". Без -o никак. Переключение раскладки не работает ни в каком виде, даже просто из консоли "xdotool key Shift+Ctrl"