Есть ли библиотека или инструмент для «перевода» строки с одного раскладки клавиатуры на другой?

Я хочу написать простой скрипт bash, который преобразует входные данные между различными раскладками клавиатуры. Например, если в моей системе есть русские и английские макеты, и я передаю строку «Руддщ» этому скрипту, он должен вывести «Hello».

В настоящее время я использую этот код:

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

Есть очевидные недостатки:

  • Я должен использовать iconv , потому что моя система использует utf8, и tr не может ее использовать.
  • Я должен вводить все символы вручную, что приводит к отсутствию применимости и высокой вероятности ошибок.

Я знаю, что xneur имеет simillar функциональность, но я не хочу переключать макет на лету, просто переведите строки по запросу. Я просмотрел исходный код xneur , но не нашел ничего полезного.

Думаю, какая-то библиотека для этого существует (если только внутри Google?). Например, https://www.google.com/search?q=hjccbz правильно отображает результаты для россии. Это не работает для ghbdtn , хотя (возможно, потому, что орфографическая привет, как это обычная шутка?)

Фактически, поиск этих строк вызывает некоторые полуобещающие хиты, хотя ничто прямо не применимо непосредственно.

Во всяком случае, нет причин, по которым вы не могли бы поместить свой собственный код в скрипт, что, очевидно, устраняет необходимость правильного повторного ввода.

Если вы сохраните это с помощью кодировки CP1251 из своего редактора, вы можете избежать вложенного iconv :

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

Я думаю, у вас было ложное предположение о необходимости использовать квадратные скобки вокруг аргументов tr которые я также попытался исправить.

Сохраните место в вашем PATH с запоминающимся и простым именем, chmod +x , и у вас оно есть.

Я не думаю, что это возможно, так как с макетом дат может быть несколько способов ввода одного и того же символа. Например, с помощью моего французского макета я могу ввести «É» либо, включив CapsLock , либо набрав é , либо Compose'Shifte .