Pull to refresh

Полезные мелочи: перекодировка неправильной раскладки

Reading time 2 min
Views 8.2K
Часто случается, что текст набран в неправильной раскладке.
Владение методом слепого набора, конечно, существенно уменьшает эту вероятность, но казусы всё равно случаются.
Особенно обидно, если текст довольно большой и перенабирать лень.


1. unix way

Самое очевидное — написать перекодировщик из stdin в stdout:
#!/usr/bin/perl -CS
use utf8;
$lat=q(`~!@#$%^&qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>?);
$cyr=q(ёЁ!"№;%:?йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,);
while(<>) { eval "tr{$lat$cyr}{$cyr$lat}"; print; }

/* '-CS' тут устанавливает кодировку utf8 для stdin и stdout, 'use utf8' — кодировку самого текста скрипта.
В принципе, можно засунуть всё это в однострочник:
perl -CS -Mutf8 -pe 'tr/qwerty...цйук.../йцук...qwert.../;'
*/

Upd:
Вместо perl можно использовать более дефолтовый sed:
sed -e 'y/qwerty...цйук.../йцук...qwerty.../'

Этот скрипт вполне естественно прикрутить, например, в klipper из kde:
Для регулярного выражения .* (любой текст), команда: echo -n "%s" | translit
В gnome наверняка есть что-нибудь похожее.
Правда, вызвать его не очень удобно, поскольку klipper не умеет привешивать хоткеи на отдельные действия:
  1. Выделить текст
  2. Поместить в буффер
  3. Вызвать меню действий
  4. Выбрать действие (курсором)
  5. Вставить текст из буффера


2. xclip

С помощью утилитки xclip можно вытаскивать текст из буфера и помещать его обратно.
Причём можно обрабатывать как буфер обмена (clipboard), так и текст выделенный мышью (primary selection).
Команда: xclip -out | translit | xclip -in
Перекодирует выделенное левой кнопкой мыши, результат можно вставить средней кнопкой мыши.
Чтобы обрабатывать не мышиное выделение, а буфер обмена:
xclip -out -sel clip| translit | xclip -in -sel clip

3. xdotool

Универсальной команды «поместить выделенный текст в буфер/из буфера» в иксах нету.
Зато в большинстве программ это выполняется нажатиями Ctrl-C/Ctrl-V.
Нажатия этих клавиш можно симулировать утилитой xdotool.
Команда в результате получется такая:
xdotool key 'ctrl+c'; xclip -out -sel clip | translit | xclip -in -sel clip; xdotool key 'ctrl+v'
Её можно повесить на глобальный хот-кей.
  1. Выделяем текст как угодно
  2. Нажимаем хот-кей
Tags:
Hubs:
+31
Comments 79
Comments Comments 79

Articles