DvorakJ:レファレンスマニュアル:詳説:同時打鍵の判定処理

DvorakJ:レファレンスマニュアル:詳説:同時打鍵の判定処理


はじめに

このページでは、同時に打鍵したと判定する DvorakJ の処理を説明します。 従来のキー・カスタマイズ・ソフトウェアの処理と DvorakJ のそれとを比較した後に、そしてDvorakJ の当該処理を解説します。 まず各説明に入る前に、キーボードそれ自体の性能について簡単に説明しておきます。


キーボードの性能

キーボードによってはDvorakJ の側で同時に打鍵したと判定できない可能性があります。 キーを二つ同時に打鍵する程度ならごく一般的なキーボードでもかまいません。 しかし、キーを三つ以上同時に打鍵する場合は、話が別になります。 キーボードが「新たに押されたキーの入力」を理解できないことがあるのです(キーボードの同時押しについて - forPCActionGamer Wiki*参照)。 そのときは、必要に応じてキーボードを新調してはいかがでしょうか。


同時に打鍵したと判定する処理二種

従来のソフトウェアにおける判定処理

従来のキー・リマップ・ソフトウェアは、キーの押し下げと押し上げの両方を感知することでキーを同時に打鍵したかを判定しています。 すなわち、キーがいつまで押され続けているかを監視しているのです。 「同時に押下されているキー数」を認識しているとも言えます(キーボードの同時押しについて - forPCActionGamer Wiki*)。 その処理を簡略化すると以下の図のようになります。 上下の矢印はキーを押し下げた動作と押し上げた動作を、青の矢印は時間の経過を表しています。 青の矢印のうち黄色の部分に該当するときに限り、複数のキーを同時に打鍵したと判定します。

従来のキー・リマップ・ソフトウェアにおける判定処理

ただし、ソフトウェアによってはキーを押し下げる前や押し上げた後に入力したキーをも同時に打鍵したものと判定することがあります。 これは、一定時間内に打鍵したかどうかをソフトウェアが検出し補正をかけているためです。 2010年04月26日 20:48にyama さんが投稿したコメントと、2010年10月17日 13:11にkouy さんが投稿したコメントを参照してください。

DvorakJ における判定処理

上記の処理に対して、DvorakJ はキーの押し下げのみを感知することで、キーを同時に打鍵したかを判定します。 「新たに押されたキーの入力」を認識しているのです(キーボードの同時押しについて - forPCActionGamer Wiki*)。 その処理の大略を図で示しましょう。 図の見方は上述のとおりで、図中の一定時間とは文字の表示を待機する時間を指します。

DvorakJにおける判定処理

DvorakJ の採用している処理には欠点があります。 キーを実際に同時に打鍵しても、キーが同時に打鍵されたと判定しない可能性があるのです。 これは、キーを一定時間以上押し下げたままにしておくと、押し下げたキーの情報を廃棄するからです。 ただし後述するように、DvorakJ ではキーの押し上げを監視することもできます。

他方、有利な点が二つあります。 第一は文字を早く表示できることです。 従来のソフトウェアではキーを押し上げるまでは文字を表示できません。 別のキーが打鍵されるかどうかを判定するため、キーを押し下げている間は文字を表示せずに待機し続けるからです。 もっとも、従来のソフトウェアにおいても一定時間後に入力の待機をやめれば、この限りではありませんが。 DvorakJ では、文字の表示を待機する時間を短くすることでキーを押し下げたら文字を即座に表示します。

第二は、Caps Lockかな を活用できることです。 OS の仕様とキーフックの処理の関係上、両キーが押し上げられたことをソフトウェアは感知できません (ただし、一部のソフトウェアであれば感知できます)。 こういうわけで、従来のソフトウェアでは同時に打鍵するキーとして両キーを使用できません。 ですが、押し下げは感知できます。 押し下げを感知できるということは、他のキーと同様に同時に打鍵するキーとして両キーを使用出来るのです。 そのおかげで、DvorakJ の方ではたとえば、Caps LockJCtrl-J を出力できます。

以下では、DvorakJ が採用している処理をより詳しく説明します。


DvorakJ における同時打鍵の判定処理の詳細

用語の説明

以下では、下駄配列を例にとり、DvorakJ において同時に打鍵したと判定する処理を説明します。

文字を表示するとは、キーを発行して文字を表示する、という一連の処理を示す表現です。

一定時間とは、文字の表示を待機する時間を指します。 具体的には、あるキーを打鍵した瞬間から数え始める、文字の表示を差し控える時間のことです。 上述の図を参照して下さい。

一定時間内にキーを打鍵しないとき

一定時間内にキーを打鍵しないときは、一定時間が経過次第、文字を表示します。

一定時間内にキーを打鍵するとき

一定時間内にキーを打鍵すれば何かしらの文字を表示します。 一定時間内にキーを二つ打鍵したとしましょう。 たとえば、Aを打鍵してから一定時間内にJを打鍵するとにょを表示します。 このように、設定している組み合わせのキーを一定時間内に打鍵すると、その文字を表示します。

では、同時に打鍵するキーとしてキー二つがそれぞれ設定されているものの、その二つのキーの組み合わせ自体は設定されていないときはどうでしょうか。 ここでは、PZを同時に打鍵するとしましょう。 前者は、単独ではを表示し、他のキーと組み合わせればヴァヴォを表示します。 後者は、単独ではを表示し他のキーと組み合わせればを表示します。 PZの組み合わせは設定されていませんので、このキー二つが同時に打鍵されたら、それぞれの単打の文字をすぐさま表示します。 要するに、キーの組み合わせが設定されていないと判断次第、すぐに文字を表示します。

それでは、キーを三つ以上同時に打鍵するよう設定しているときには、DvorakJ はどのような処理を行っているのでしょうか。 そのときは、入力されたキーを入力順に並べてつぎのように処理しています。

  1. 入力されたキー二つの組み合わせが設定に含まれているか判定します
  2. 続けて、3キー目が入力されたときには、同様に、入力されたキー三つの組み合わせが4キー以上の設定に含まれているかを判断します
  3. さらに続きます……Nキー目が入力されたときには、入力されたキーN個の組み合わせが (N+1) キー以上の設定に含まれているかを判断します

DvorakJ は、上記のように処理することでキーを複数同時に打鍵したかどうかを判定しています。

キーの押し上げを感知する処理

実験段階ではありますが、DvorakJ では、従来のソフトウェアのようにキーを押し上げる動作を感知することもできます。 キー配列の設定ファイル中、-1E のような記述を +1E と書き換えると、そのキーの押し上げを監視するようにします。 この処理は文字キーと文字キー以外で異なっています。

文字キー

キーボードの性能が許す限りキーの押し上げをいくつも監視できます

文字キー以外

文字キー以外と文字キーのキー二つの押し上げのみ、監視できます

たとえば、下駄配列ならI を押し下げたまま G R を順に打鍵することで、ちょしゃ を出力するようになります。

なお文字キー以外のうち、Caps Lockかな全角はこの機能を一切利用できません。


Last modified : 2012/03/31 11:35:41 JST
blechmusik (blechmusik@gmail.com)