きゅうり改キーボードを作る

この記事はPRK Firmware Advent Calendar 2021の12月11日のエントリです。

Ruby界では、まつもとさんが「きゅうり改」という方式でローマ字かな入力されているのが有名ですが、 これはCannaの辞書定義で実現しているそうです。

きゅうり改以外にも、入力配列の試みはたくさんあって、 配列沼へのお誘い: 大岡俊彦の作品置き場 などを参照ください。

私は薙刀式使いで、最終的にはPRK薙刀式をファームウェアで実現するのが目標なんですが、 PRKの今のapiでは難しそうなので、 まずはきゅうり改にトライしてみました。

英字入力とカナ入力で配列を切り替える

「G」のキー(実際にはアルファベットのQキー)を押してから「U」のキー(アルファベットのJキー)を押すと「ぐ」が入力されます。

日本語入力モードではQWERTYではなく、 専用の配列になるのですが、 これは英字と日本語でレイヤーを切り替えることで、 きゅうり改用の配列に切り替えることができます。

https://gist.github.com/eswai/f857923e2cf00cbf4586db696400dc01#file-keymap-rb-L17-L24

ついでに、レイヤー切り替えとかなON/OFFを同時にやれば、 1アクションでOS側とキーボード側を切り替えられます。

https://gist.github.com/eswai/f857923e2cf00cbf4586db696400dc01#file-keymap-rb-L47-L58

1キーで複数文字を入力する

「きゃ」のように拗音(ようおん)を含む文字は、子音キーの後に「ゃ」キーのような拗音(ようおん)キーを打ちます。 ローマ字入力であいまいになりやすい「ん」と「っ」は独立したキーが割り当てている

マクロ機能を使います。 やゆよは1キーでya, yu, yoと2キー分出力します。オリジナルのきゅうり改ではxya, xyu, xyoを出すべきですが、子音とのつながりからya, yu,yoとしました。

複数文字入力はいくつかやり方を考えたのですが、 %i[KC_Y KC_A]で渡すと連続ではなく、同時押しになります。 Kbd.send_keyは最初の1キーしか出力されないようです。 macroしかなさそうですね。

https://gist.github.com/eswai/f857923e2cf00cbf4586db696400dc01#file-keymap-rb-L76-L80

キーの組み合わせで入力を変える

それ以外の小文字は「小」キーを使い、「H」「小」「A」→「ふぁ」というように入力します。

小キーは単純では機能しません。 あいうえおの前に小キーをおしたらxaとかxiと出力、しかし「H小A」ならfaと出力です。 前にどのキーを押したかで処理を変えなくてはいけません。 ここでは入力したキーを保存して、小キーを押したときに前の文字がHだったら、 バックスペースでHを消してからFを入力するようにしてみました。 前の文字がHでないときはXを出力します。

https://gist.github.com/eswai/f857923e2cf00cbf4586db696400dc01#file-keymap-rb-L63-L73

まとめ

Cannaの定義ファイルをみるとわかる様に、きゅうり改は実は非常に複雑です。 ここでは、本当に基本的入力のみ実装してみました。 きゅうり改を完全に実装するところまではできていないのですが、 基本的な機能は作れそうです。