
我想編寫簡單的 bash 腳本,在不同的鍵盤佈局之間轉換輸入。例如,如果我的系統有俄語和英語佈局,並且我將“Руддщ”字串傳遞給此腳本,則它應該輸出“Hello”。
目前我正在使用這段程式碼:
echo "$@" | iconv -t cp1251 | tr $(echo "[йцукенгшщзхъфывапролджэ\\ячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,\"№;:?Ёё]" | iconv -t cp1251) "[qwertyuiop\[\]asdfghjkl;'\\zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:\"|ZXCVBNM<>?@#$^&~\`]"
有明顯的缺點:
- 我必須使用
iconv
,因為我的系統使用utf8並且tr
不能使用它。 - 我必須手動輸入所有字符,這導致缺乏適用性並且錯誤可能性很高。
我知道xneur
有類似的功能,但我不想動態切換佈局,只需根據請求翻譯字串。我查看了xneur
原始程式碼,但沒有發現任何有用的東西。
答案1
我猜一些存在這個庫(如果只是在谷歌內部?)。例如,https://www.google.com/search?q=hjccbz正確顯示 россия 的結果。它不適合ghbdn,不過(也許是因為像這樣拼字錯誤привет是一個常見的笑話?)
事實上,搜尋這些字串會帶來一些有希望的結果,儘管沒有任何明確的直接適用的結果。
無論如何,您沒有理由不能將自己的程式碼放入腳本中,這顯然消除了正確重新輸入的需要。
如果您使用編輯器中的 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
。