
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 undtr
es nicht verwenden kann. - Ich muss alle Zeichen manuell eingeben, was zu mangelnder Anwendbarkeit und hoher Fehlerwahrscheinlichkeit führt.
Ich weiß, xneur
dass es ähnliche Funktionen hat, aber ich möchte das Layout nicht spontan ändern, sondern nur Zeichenfolgen auf Anfrage übersetzen. Ich habe den xneur
Quellcode 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 PATH
mit einem einprägsamen und leicht einzutippenden Namen, chmod +x
und 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 CapsLock
und Eintippen é
oder durch Compose
- '
- Shift
- eingeben e
.