タイトルの通りなのだけど、今回は実際使っている動画を撮ってみた。自分のタイピングの拙さとかもそのまんま収録されてるけど、百聞は一見に如かずだと思う。
何をやったのかというと、まず前回、ポメラハックを開始して、とりあえず普通に使えるLinux (Debian) として使えるようにして満足した。ここまでは、ネット上の記事とかにいろいろ情報が書かれているので割愛。(このQiita記事とかはとても参考になった。)
自分が今回やったことは、自作のキーエミュレーターをLinux (Debian)上で動かして、新下駄配列+DvorakPが打てるようにした。
やっていることはoyainputやokeyfumと同じで、/dev/input/event0
などのキー入力を読み取り、かつバイパス(grab)して、 /dev/uinput
を使ってキーを変更。実際使うときはoyainput同様に、nohupなど別プロセスとして起動して使う。
自分の作ったエミュレーターで特筆すべき点は、
- Rubyで書かれている(コードは1ファイルのみ)
- やまぶきR用のキー設定ファイルが、ある程度そのまま使える
- Grabの定数をコード中で指定
だと思う。上の2つは開発の簡単さと修正のしやすさのため。ただ、やまぶきRの親指シフト入力と挙動は違っていて、自分自身が親指シフト系を使っていないのでシフトキーの挙動は現時点では適当。一方で、新下駄配列を快適に入力するために、文字キー同士の同時打鍵タイミングには凝った。まだ妙な挙動はあるものの、プロトタイプとしては満足。タイミングはソース中で指定できるけど、後々パラメータとして外部に出せたらと思ったりする。(やまぶきR用設定ファイルのパーサーも適当に取り急ぎ作ったものなので、後々ちゃんと書き直したい。書き直すときはそもそもRubyじゃなくてRustとかにしたいけど、まずその前に日本語切り替えをMozc連動に改良したい。)
最後の一つ、Grabの定数指定については、ポメラDM200での使用に特化した内容。前述のoyainputは素直に動いたのにokeyfumが動かなかった点に事の発端がある。ポメラDM200は32ビットのARMマシンであるせいか、OCamlやRuby中のGrabの定数がint32の範囲を超えてエラーしてしまい正しく動かなかった。直接C言語から呼ぶと全く問題ないので、イマイチ腑に落ちなかったものの、Rubyの場合は直接指定すると動いたので、そうした。
ちなみに、Debianは人柱版 その2 を使ったのだけれど、作者の追記にあるように、今回のようなキーエミュレーターを使えるようにするためには、/dev/uinput
を有効にするカーネル更新をする必要がある点に注意。カーネル更新といってもとても簡単で、方法は前述のQiita記事中にある。
さらにDM200に限った注意としては、/dev/input/event
にいくつか制約があるので、デバイス名の列挙など使えない機能がある点に注意。自分のキーエミュレータで使っているrevdevライブラリでも、その理由で一箇所コメントアウトしないと動かなかったので、DM200で使える版としてフォークしてある。( gem install revdev
の代わりにこのgitを使えばOK。あとでREADMEにも書こうかな。 )
―― さて、今回は思いつき優先で、とりあえず勢いでキーエミュレータまで書いてしまったのだけど、キーエミュレータを作るのってとても楽しいなと実感した。今まで既存のキーエミュレータを使っていて、微妙に痒いところに手が届かない感があったりしたけど、自分で作るとフルに自由にできて楽しい。特にLinuxの場合はMacやWindowsに比べてそんなに自作は難しくないし、今回のようにRubyとかから気軽に呼べるライブラリがMacやWindowsでもあると、もっと自由にキーエミュレータとかキー割り当て変更が高度にできて楽しいだろうなと思った。
あと何より、DM200が素晴らしい。単純にLinuxマシンとして見ても優秀だし、元のソフトやハード構成が素敵なので、シンプルに、書くことへの愛を感じる。ハックしなくても親指シフトが使えるワープロとして貴重だし、ぜひ今後も販売し続けて欲しい。しいていえば、今回ハックした版にはMozc(オープンソース版Google日本語入力)が入っているので推測変換が効くけど、元々のATOKは推測変換が効かなくて辛いので、ぜひ次期版は推測変換できるようになったらいいなぁ。