Gibt es eine Bibliothek oder ein Tool zum „Übersetzen“ von Zeichenfolgen von einem Tastaturlayout in ein anderes?

Gibt es eine Bibliothek oder ein Tool zum „Übersetzen“ von Zeichenfolgen von einem Tastaturlayout in ein anderes?

Ich möchte ein einfaches Bash-Skript schreiben, das Eingaben zwischen verschiedenen Tastaturlayouts übersetzt. Wenn mein System beispielsweise über russische und englische Layouts verfügt und ich diesem Skript die Zeichenfolge „Руддщ“ übergebe, sollte es „Hallo“ ausgeben.

Derzeit verwende ich diesen Code:

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

Die Nachteile sind offensichtlich:

  • Ich muss verwenden iconv, da mein System UTF-8 verwendet und tres nicht verwenden kann.
  • Ich muss alle Zeichen manuell eingeben, was zu mangelnder Anwendbarkeit und hoher Fehlerwahrscheinlichkeit führt.

Ich weiß, xneurdass es ähnliche Funktionen hat, aber ich möchte das Layout nicht spontan ändern, sondern nur Zeichenfolgen auf Anfrage übersetzen. Ich habe den xneurQuellcode durchgesehen, aber nichts Nützliches gefunden.

Antwort1

Ich schätzemancheBibliothek dafür existiert (wenn auch nur intern bei Google?). Zum Beispielhttps://www.google.com/search?q=hjccbzzeigt die Ergebnisse für Russland korrekt an. Es funktioniert nicht fürAbonnieren, allerdings (vielleicht weil die falsche Schreibweise von „привет“ auf diese Weise ein gängiger Insiderwitz ist?)

Tatsächlich führt die Suche nach diesen Zeichenfolgen zu einigen halbwegs vielversprechenden Treffern, allerdings nichts, was eindeutig direkt anwendbar wäre.

Es gibt jedenfalls keinen Grund, warum Sie Ihren Code nicht in ein Skript einfügen könnten, wodurch die Notwendigkeit, ihn erneut korrekt einzugeben, offensichtlich entfällt.

Wenn Sie dies mit einer CP1251-Kodierung aus Ihrem Editor speichern, können Sie die verschachtelten vermeiden iconv:

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

ICHdenkenSie gingen fälschlicherweise davon aus, dass die Argumente in eckige Klammern gesetzt werden müssten tr. Auch das habe ich versucht zu korrigieren.

Speichern Sie es an einem Ort in Ihrem System PATHmit einem einprägsamen und leicht einzutippenden Namen, chmod +xund fertig.

Antwort2

Ich kann mir nicht vorstellen, dass das möglich ist, da es bei einem bestimmten Layout mehrere Möglichkeiten gibt, dasselbe Zeichen einzugeben. Beispielsweise kann ich bei meinem französischen Layout „É“ entweder durch Aktivieren CapsLockund Eintippen éoder durch Compose- '- Shift- eingeben e.

verwandte Informationen