1.SandSとホームポジションキーパー後継ツール
みなさんは「SandS( and Shift)」という言葉を聞いたことがあるでしょうか?
これは、スペースキーを押している間はシフトキーとして働くキーボードユーティリティですが、同じような発想でホームポジションキーパーでもスペースキーをシフトキー(正確にはシフトではなく、色々な機能をキーに割り当てる)にしています。
今は、ホームポジションキーパーを更に進化させて、わずか32キーで全てのキー操作ができる新しいツールを開発しています。
そのツールもほぼ実装したい機能は開発できたのですが、このスペースキーの扱いに多少の不満があり、なんとか改善したいと考えていました。
2.スペースキーをシフトキーにするデメリット
SandSやホームポジションキーパーのようにスペースキー(とても押しやすい)を機能キーにするのはとても良いアイデアだと思います。
しかし、シフトキーという他のキーと組み合わせて使うために、スペースキーを押した場合にスペースを出力したり、押し続けた場合に、スペースキーをリピート出力することはできません。
では、どうやってスペースを出力するかというとスペースキーを単独で押した場合(正確にはスペースキーをアップしたタイミング)でスペースを一つ出します。
これで、スペースキーは
(1)機能キー(他のキーとの組み合わせ)
(2)単独押しでスペース出力
の2つの役割を持つことになります。
非常にうまい方法で、スペースキーという非常に押しやすいキーを最大限に使えます。
他のキーボードツールでは「無変換」や「変換」キーをシフトキーとして使うものがありますが、この方法の欠点はUS配列のキーボードでは使えない(「無変換」キーも「変換」キーも無い)ことです。
これはUS配列キーボードを使いたい人にとっては致命的な方法になります。
しかし、このスペースキーをシフトキーにする方法にも重大な欠陥があります。
それはスペースキーをリピートできないことです。
キーのアップのタイミングでスペースを出力するので、原理的にリピート出力することができません。
3.リピート出力するために
「スペースキーをリピート出力するなんて使わないからいいや」という人も多いでしょうが、プログラムを書くときにコメントを各場合でスペースを複数連続入力したくなることが多いので、スペースがリピートできないと不便に感じる人もいます。(私もそうです)
この問題の一番簡単な解決方法はスペースと他のキーの組み合わせでスペースキーを出力する方法です。
確かにこの方法で操作上は問題ありませんし、実際にそのように実装したという記事もありました。
4.気持ち悪さと学習コスト
ただ、このようなキーの組み合わせはスペースをリピート出力するのに複数キーの組み合わせを使うことの気持ち悪さ=学習コストがかかることが気になっていました。
どうすれば、覚えやすくて操作も簡単な方法があるか、ずっと考えていましたが、ついに良い解決方法を思いつき実装したところ快適にスペースのリピートができるようになりました。
5.解決策
スペースをシフトキーに割り当てたときは以下のような動作にします。
1.スペースキーの単打
スペースキーを押して離す。
スペースが出力されます。
2.スペースキーを押しながら他のキーを押す
さまざまな機能を割り当てることが可能です。
例えば私は「スペースキー+F」でバックスペースにしています。
3.スペースキーを押し続ける
一定時間以上スペースキーを押し続けると1のスペースキーの単打を無効にします。
これは、スペースキーを押して、他のキーを押そうと思ったけど中断する場合に余分なスペースを出力しないためです。
この3の機能があるために、スペースキーを押し続けてもリピートしないのですが(リピートすると2ができなくなる)、以下の解決策を取りました。
スペースキー単打+押し続ける=リピート
思いつけば簡単な答えです。
元々スペースをリピートして出力したいのですから、スペースキー単打直後にスペースキーを押し続けるという自然な操作でスペースをリピート出力するのです。
学習コストも低く、操作も簡単です。
ただ、この機能を開発するのは、やや面倒でそんなに簡単ではありませんでした。
この機能を追加してホームポジションキーパーの後継ツールは完成度を高めることができました。
今年中には、このツールを公開できるようにしたいと考えています。