雑記帳

電子計算機の"明後日"から、他愛もない話まで。

親指シフトの遅延を体感上無くす実験(親指の友 Mk-2 V2.0L20~)とWindows10動作確認

随分こちらの更新が空いてしまいましたが、親指の友 Mk-2 キーボードドライバを更新しました(V2.1L20)。

 

今回のバージョンでは、文字キーを単独打鍵した際に発生する遅延を体感上無効化する機能を入れてみました(零遅延モード)

この遅延は、親指シフトの同時打鍵ロジックの必要悪みたいなもので、「逐次打鍵(小指のシフトキーみたいな)」ではなく「同時打鍵」を実現するため、親指キーよりも文字キーが一瞬先に押されてしまったとしてもシフト操作として受け付るようになっています。

つまり、文字キーが押されてもすぐに文字を確定せず、親指キーが押されないか少し待つようになっているわけです。これが、キーを押してから画面に文字が出るまでのラグとなります。

普通の親指シフトエミュレータではカナ入力時にしかこの遅延が見えないので、「そんなものか」と気にせず使っている方が多いと思うのですが、拙作ドライバ等で英字入力でも親指シフトのロジックを使ったりすると、目に見えて遅延しているのを感じることが出来たと思います*1

 

では、今回実装した機能を有効化するとどうなるかというと、なんとこの待ち時間を無くし、押された瞬間に結果を出力するようになります。当然このままでは誤打鍵が増えてしょうがないですね。そのため、後で親指キーが押されたりして出力済の内容と矛盾が生じた場合は、「BackSpaceのコードを出力して、既に出した文字入力を消す」というアクロバティックな動作を行うようにしました。

こう書くとギャグみたいですが効果は抜群でして、カナだろうが英字だろうが楽しい位ヌメヌメ出てくるようになります。また、この機能を入れても同時打鍵の判定ロジック自体は変わりませんので、急に誤打鍵が増えたりすることは無いと思います*2

 

英字が遅延しなくなるのはアタリマエの水準に戻っただけですが、カナの遅延が無くなるのは結構感慨深いものがありました。意外と遅延が深層的なストレスになっていたのか、この機能を試すようになってから文章とかコードを書く際に考えがまとまりやすくなった気がします。

 

是非一度、だまされたと思って使ってみて下さい。恐らく多くの方に気に入って頂けると思います。他のエミュレータへの移植実装も歓迎です。

 

尚、一点注意ですが、「BackSpaceで入力を消す」という動作の関係上、英字入力でショートカットキーやコマンドを入力する場合(シフト出力にCtrlを設定している等)、この機能を使うと誤操作が発生しますので必ず無効化して下さい。

特にバージョンアップする場合、既存の設定値によってはこの機能がデフォルトで有効化されてしまいますのでご注意ください。

 

また、遅ればせながら、Windows 10を導入しましたので、今回そちらでも動作確認しました。

結果から言うと、x86 / x64共にほぼOKです。メモ帳等のデスクトップモードアプリやEdge等のストアアプリでも正しく入力できました。キーボード周りについては、Win8.1からの変更はそんなに無いような印象でした。

 

尚、恐らくこれは8.1の頃からだったのだと思いますが、デスクトップモードのIE11(保護モード?)では正しくカナ入力できないことを確認しました。

どうもレイアウトファイルをIE側が自前で解析しているようなのですが、その際にどうもカナの追加配列バンクを悉く無視して下さるみたいで、単独打鍵だとOKですがシフト操作をすると正しく入力できません。

確かIEはカナ入力できないバグを入れ込んだ前科がある位でして、どうも全体的に実装が怪しいんですよねぇ。きっと他の面でもそういう謎実装が満載で、だからM$はとっととIEを収束させて、別コアのEdgeに切り換えたいんだろうなぁ…と考察しているのですが。

そういう見解ですので、私から特に対策版を出したりすることは無いとお考えください。

 

ちなみに、Windows8.1だけでなく、Windows 10にも標準で「親指シフト PS/2 キーボード」というドライバが存在しましたので、今回試しに手元のFMV-KB211を繋いで動作確認してみました。

結論から言うと、ドライバとしての動作は完全にNGで、キーボード側の内部モード制御が正しく出ていない模様です…。

レイアウトファイルを眺める限り、KB211でも使えるタイプの制御を意図しているものだと思うのですが(カナ配列がJISになっているので)、なんで動きもしないレイアウトファイルを、わざわざ変更を入れたり名前を変えたりした上で突っ込んでしまったのか、甚だ疑問です…。

2019/9/7追記

上記内容は当時のx64版で確認した内容です。x86版では正しく動作します。詳しくはこちらの記事を参照下さい。

 

尚、富士通のPS/2親指シフトキーボードは全てキーボード単独で親指シフトができる設計になっているので、キーボード側の内部モードを手動で切り換えてやれば(カナ入力前に無変換を押す、とか)、NICOLA配列のカナ入力自体は可能です。

 

私自身の個人的な話をすると、今の勤務地では外部ドライバのインストール禁止なせいで、KB611を持ち込んだ上でWindows標準のKB211ドライバを使って作業しているので、個人的には結構致命的だなぁ…と思っています。まぁ勤務地の環境は7でして、当面影響は無い訳ですが。

早く自前のドライバを持ち込める御身分になりたい…。

*1:一応対策として、他の実装よりも待ち時間の初期値を短めに設定してみてはいたのですが、打ちやすさを考えると50ms位が限界で、これは画面3フレーム分に相当しますので…。

*2:まぁ、画面に出るタイミングが変わるので、リズムが狂うというのはあると思いますが