blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

順に打鍵する配列と同時に打鍵する配列の違いは何か

問題提起

DvorakJ では、順に打鍵する配列と同時に打鍵する配列を使用出来る。前者は、キーを順に打鍵する配列だ。DvorakJP や JLOD配列、チーズタイピングや月配列がその例である。後者は、二つのキーを同時に打鍵する配列である。小梅配列や NICOLA 配列、下駄配列を例として挙げよう。どちらの配列とも、キーとは文字キーのみならず、文字キー以外のキーも含む。現在のDvorakJ では、キーボード配列を作成するにあたり、かな入力かローマ字入力か、または文字キーか否か、といった二分論にはこだわっていない。あえて極論を述べよう。こだわっているというか区別しているのは、順に打鍵する配列か同時に打鍵する配列か、ということだけだ。
両者の違いは何なのか。omine3の備忘録集 DvorakJPでバックスペース時の挙動を定義するにてこのような問いを投げかけられた。
以下では、私なりの答えをまず示してから、将来ソフトウェアをどのように拡張していくかを考察してみる。

私なりの答え

この問いに対する私の答えはこうだ。すなわち、両者を分け隔てるものは、時間の経過によってキーストロークを廃棄するか否か、である。
順に打鍵する配列は、キーを押し下げてからどれほど時間が経過しても、キーストロークが保持されている。ローマ字入力を想起して欲しい。「か」を出力するために、まず"k"を入力する。その後、どれほど時間が経過しても、"a" を入力すれば「か」が出力されるだろう。このように、キーストロークを時間の経過によって廃棄しないのが順に打鍵する配列である。
これに対して、同時に打鍵する配列は、キーを押し下げてから一定時間が経過すると、キーストロークを廃棄する。また、二つのキーが一定時間内に打鍵されたときにも、キーストロークを破棄する。これこそ、DvorakJ に実装している「同時に打鍵する配列」の仕様だ*1。ただし、[Shift]に関する処理は例外である。文字キーと[Shift]を組み合わせて実際に打鍵しているときには、きちんとその動作を認識する。

将来の開発予定

それでは、順に打鍵する配列で、一定時間が経過するまでのキーストロークのみを保持するようにしたらどうなるだろうか。たとえば、一打鍵目から1秒が経過するまでのキーストローク、というものだ。これは、複数キーを同時に打鍵する配列が最終的にいきつくものである。現在の同時に打鍵する配列の設定では、同時に打鍵したかどうかを判定するために監視しているのは、最大で二つのキーのみだ。将来的には、この監視するキーを増やすことになろう。
さらに考えてみよう。順に打鍵する配列で、一定時間が経過するまでのキーストロークについては特殊な処理を施し、それ以外のストロークはそのまま取得すればどうなるか。そう、これこそ、順に打鍵する配列と同時に打鍵する配列の融合形である。順に打鍵する配列をもとにしつつも、同時に打鍵する配列の設定を任意の箇所に設定出来る。こういう設定を駆使する配列こそ、私が DvorakJ 上でいつか実装したい配列である。

おわりに

このエントリーでは、順に打鍵する配列と同時に打鍵する配列の違いは、時間の経過によってキーストロークを破棄するか否かにあることを説明した。また、キーストロークを破棄する処理こそ、DvorakJ の今後の開発において焦点となることも解説した。私自身、順に打鍵する配列と同時に打鍵する配列をいつになったら融合できるか検討をつけることができていない。この作業には地道に取り組もう。

*1:なお、キーがいつまで押し下げられている(いた)かを逐一確認するソフトウェア「やまぶき」の仕様については、ここでは考察しない。