
異なるキーボード レイアウト間で入力を変換する簡単な bash スクリプトを作成したいと考えています。たとえば、システムにロシア語と英語のレイアウトがあり、このスクリプトに「Руддщ」という文字列を渡すと、「Hello」が出力されるはずです。
現在、私はこのコードを使用しています:
echo "$@" | iconv -t cp1251 | tr $(echo "[йцукенгшщзхъфывапролджэ\\ячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,\"№;:?Ёё]" | iconv -t cp1251) "[qwertyuiop\[\]asdfghjkl;'\\zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"|ZXCVBNM<>?@#$^&~\`]"
明らかな欠点があります:
iconv
私のシステムは utf8 を使用しており、tr
それを使用できないため、 を使用する必要があります。- すべての文字を手動で入力する必要があるため、適用性が低くなり、エラーが発生する可能性が高くなります。
同様の機能があることは知っていますxneur
が、オンザフライでレイアウトを切り替えるのではなく、リクエストに応じて文字列を翻訳するだけです。xneur
ソースコードを調べましたが、役立つものは見つかりませんでした。
答え1
私は推測するいくつかのこのためのライブラリは存在します(Google 内部のみでしょうか?)。たとえば、https://www.google.com/search?q=hjccbzроссияの検索結果を正しく表示します。グーただし、(おそらく、привет をこのように間違って綴るのはよくある内輪のジョークだからでしょうか?)
実際、これらの文字列を検索すると、明らかに直接適用できるものはありませんが、ある程度有望なヒットがいくつか表示されます。
いずれにせよ、スクリプトに独自のコードを挿入できない理由はなく、これにより、これを正しく再入力する必要がなくなるのは明らかです。
これをエディターから CP1251 エンコーディングで保存すると、ネストされた を回避できますiconv
。
#!/bin/sh
LC_ALL=C
iconv -t cp1251 |
tr 'йцукенгшщзхъфывапролджэ\ячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,"№;:?Ёё' "qwertyuiop[]asdfghjkl;'\\zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"|ZXCVBNM<>?@#$^&~\`"
私考えるあなたは、引数を角括弧で囲む必要があるという誤った仮定をしていましたが、tr
私もそれを修正しようとしました。
PATH
覚えやすく入力しやすい名前 で内の場所に保存すればchmod +x
、完了です。
答え2
特定のレイアウトでは、同じ文字を入力する方法が複数ある可能性があるため、これが可能だとは思えません。たとえば、フランス語のレイアウトでは、 を有効にして入力するか、- - -とCapsLock
入力することで「É」を入力できます。é
Compose
'
Shift
e