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

Дмитрий Корнев
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 по комбинациям клавиш

В Ubuntu (Gnome) здесь:

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

5 комментариев

Вл
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"
Ka
> Едиственное неудобство заключается в том, что приходится использовать буфер обмена, где может находиться, что-то нужное в этот момент. Чтобы это обойти можно заранее копировать то что сейчас в буфере, после вставки, возвращать скопированное обратно: ``` # save original buffer orig_bufer=$(xsel --clipboard --output) # to buffer and insert printf %s "$forconvert" | xsel --clipboard --input xdotool key Shift+Insert # Return original bufer back printf %s "$orig_bufer" | xsel --clipboard --input ```
Спасибо!