WSLでの親指シフトはどうやらMozcで実現可能と気がつくまで
WindowsではAutoHotKeyを使って疑似親指シフトで日本語を入力しています。もともとかな打ちだったんですが、キーボードをErgoDox EZに変えたら「ろ」とかのキーが足りなくなって、どうしようか悩んで親指シフトを見つけてきました。疑似なのは同時押しではなくて、親指でファンクションキーを押しながらアルファベットキーを押すことで出しているからです。AutoHotKeyを使って同時押しを実現しているものがあるのは知っていますが、とりあえずNICOLA配列を試しつつ今まで引っ張ってきた感じです。
Windowsではそれで満足していたのですが、WSLを使うようになって困りました。AutoHotKey(以下AHK)ではIMEの状態を取ってきてオンの場合には出力を変えているのですが、WSLだとAutoHotKeyからMozcの情報を取ってこられる気がしません。WSL側で検知してWindows側から読める位置にファイルを置くような、トリッキーな方法を使えばできなくはないような気もしますが、そこまでしてAHKに頼るのも変な感じです。
ということで、WSL側で親指シフトを使えるようにしようとぐぐって出てきたのはoyainputというやつでした。しかし、これがWSLでは動かない。エラーコードから察するに、/proc/bus/input/devices
が空なのでキーボードの情報が取れないのでだめみたいです。まあ、WSLですし。
しかたがないので、今度はWSLのEmacsでWindows側のIMEが使えるという「emacs-mozc を動かすための設定(WSL 設定編)」のmozc_emacs_helperというのを試してみました。で、苦労して動かしてみたものの、Windows側の辞書を使って変換はしているようですが、AHKがIMEの状態を把握できないので親指シフトモードに切り替わらないのは同じでした。残念。
いったんは諦めてMinGW版のEmacsを使うことにしたのですが、ぐぐってみたら「[Question] Possible to (properly) implement simultaneous (custom) Kana-input layout? #512」というMozcに新下駄配列を実装する話が出てきました。
新下駄配列は知らなかったのでぐぐってみると中指シフトというやつらしいです。親指シフトだと、工夫して親指キーを調達してこないとなのですが、中指シフトなら必ずあるアルファベットキーを使うので、同時押しにさえ対応していれば使えるようです。頭いいな。これにすれば今親指シフトキーとして使っているキーが空くから、別のキーとして使えるではないか。でも、ちょっと気になるのは数字キーにまで割り振られているのと、「げ」がErgoDox EZだと存在しないというか、制御キーに割り当てているキーを使っているところでしょうか。数字キーのほうは3キー同時押しバージョンで使わないようにもできるみたいです。薙刀式とかもなんですけど、HHKみたいな普通のキーボードを想定しているので、バックスペースキーやらがマップに入り込んでいるんですよね。ErgoDox EZだと、そういうキーはホームポジション付近に定義済みなので場所がもったいないんですよね。本気で考えるならErgoDox EZ用の配列を考えないといけない。QMKで親指シフトを実現するような話もあるようです。QMKのレベルで同時押しの場合に別のキー列を送出することができるということですかね?
キーマップは置いておいて、とりあえず新下駄配列を使ってみようと思い、「22 - mozc-Shingeta Einstellungen -- 新下駄配列を mozc にて使用する方法」からmozc_US_msime_80.db
を持ってきて入れ替えたらキーマップどおりに出てきたんですけど、どうやらcomposing_timeout_threshold_msecが無限大になっているもよう。「【進化版】Google日本語入力で新下駄配列が使える!」に「同時打鍵の待ち時間が壊れたconfig1.db(Google日本語入力のプロパティの情報)が作成されてしまう」とあるので、書いてある方法で変換しても同じでした。config1.db
を展開してみてもちゃんとthresholdは定義されている。うーん、わからん。
さらにぐぐっていると「Keyboard Input Hackathon 2023 で Mozc の実験的機能を作りました」というページもありました。「Keyboard Input Hackathon 2023」なんてものがあったんですね。存在自体も知りませんでした。このページによるとNICOLA配列での入力もできるようです。ただし、2023年9月25日現在は実験的なものでmain branchに反映はされていないようです。
ということで、本体に反映されるのを待つか、自分でコンパイルするかですね。できれば自分でコンパイルしたいんですけど、どうやらDockerとBazelとProcotol Buffersの知識が必要みたいです。でも、どれも知りません。なので、焦らずにゆっくり使い方を調べつつやっていきます。ほぼできることはわかっていて、サンプルコードもあるのは心強いです。WSLの特殊事情で動かないなんてことがありませんように。
コメント
コメントを投稿