applet_at_hさんが、親指シフトの「同時押し判定」にあたるものを研究されている模様

開発者appletさんとのやりとりの中で、
「現在の『のどか』試験版(タッチパッド左右分割)で、親指シフトは使えますか」
との趣旨の質問をいただいたので、次のようにお返事した。

……これはタッチパッド以外でもそうですが、
やっぱりタイマーがないと厳しいと思います。


のどかが現在想定しているストロークは、
(1)「シフトキー押下」→「文字キー押下」→「シフトキー解放」
(2)「シフトキー押下」→「シフトキー解放」→「文字キー押下」
というものですよね。しかし親指シフトユーザーは、
(3)「文字キー押下」→「シフトキー押下」
という、逆順のシフト操作をすることがあるのです。


親指シフトユーザーは、文字キーとシフトキーを「同時に」
叩く傾向にあります。これは英文やカナ入力のShiftや
SandSとは違う点です。
「同時」と言っても人間にとっての同時ですから、
数十ミリ秒の誤差が出ます。その結果の一つが(3)です。


前の文字に対するシフトなのか、次の文字に対するシフト
なのかをはっきりさせるために、「タイマー」を用いるのが
唯一の解法と考えられています。


(親指シフトユーザーの総意ではありませんが……)
最もシンプルで必要十分なタイマーの実装方法は、
「姫踊子草」のものらしいです。確か、文字キーの送出を
40ミリ秒程度待機させ、その間にシフトキーが
(A)押される/(B)離される と、その文字キーに対してシフトが
(A)掛かる/(B)掛からない というものです。
いままで 窓使いの憂鬱/のどか用 の親指シフト定義が
なかったのは、このタイマーがなかったためだと思います。


私も一ユーザーにすぎませんので、ソフトの理想的な挙動に
ついてはあまり詳しくありません……

その後に書かれた記事:
あるキーが押されたままで、モディファイヤーが、気持ち遅れて入力された場合


嬉しい!


……しかしketttの理解が間違っていると、appletさんに誤解を与えるおそれがあります。
親指シフトについて詳しい方に訂正していただきたいです。
特に、姫踊子草の動作に関する説明の部分がかなりあやしい。


返信後に自分で気付いた問題点:

  1. 連続シフト(飛鳥、新JIS、TRON配列が採用)に特化した説明になっており、逐次シフト(Nicola、小梅配列が採用)の説明になっていない。
    • 逐次シフトとは、モディファイヤーを押したまま複数打鍵を入力しても、一打鍵目にしかモディファイヤーが有効でないものを言う。連続シフトで入力されるのが「ABCDE」なのに対し、同じ操作でも、逐次シフトでは「Abcde」が入力される感じ。
  2. (効果をよく知らないのですが……)『連続シフトの2打鍵目以降』、文字キー打鍵の後、一定時間内にシフトキーが離されたら、その文字キーはシフトされていないものとして出力する (「シフト残り現象」への対応) ようにすると、使い勝手がよくなる?