SandSでのキーリピート

1.SandSとホームポジションキーパー後継ツール

みなさんは「SandS( and Shift)」という言葉を聞いたことがあるでしょうか?
これは、スペースキーを押している間はシフトキーとして働くキーボードユーティリティですが、同じような発想でホームポジションキーパーでもスペースキーをシフトキー(正確にはシフトではなく、色々な機能をキーに割り当てる)にしています。

今は、ホームポジションキーパーを更に進化させて、わずか32キーで全てのキー操作ができる新しいツールを開発しています。
そのツールもほぼ実装したい機能は開発できたのですが、このスペースキーの扱いに多少の不満があり、なんとか改善したいと考えていました。

2.スペースキーをシフトキーにするデメリット

SandSやホームポジションキーパーのようにスペースキー(とても押しやすい)を機能キーにするのはとても良いアイデアだと思います。

しかし、シフトキーという他のキーと組み合わせて使うために、スペースキーを押した場合にスペースを出力したり、押し続けた場合に、スペースキーをリピート出力することはできません。

では、どうやってスペースを出力するかというとスペースキーを単独で押した場合(正確にはスペースキーをアップしたタイミング)でスペースを一つ出します。

これで、スペースキーは
(1)機能キー(他のキーとの組み合わせ)
(2)単独押しでスペース出力
の2つの役割を持つことになります。

非常にうまい方法で、スペースキーという非常に押しやすいキーを最大限に使えます。

他のキーボードツールでは「無変換」や「変換」キーをシフトキーとして使うものがありますが、この方法の欠点はUS配列のキーボードでは使えない(「無変換」キーも「変換」キーも無い)ことです。
これはUS配列キーボードを使いたい人にとっては致命的な方法になります。

しかし、このスペースキーをシフトキーにする方法にも重大な欠陥があります。

それはスペースキーをリピートできないことです。
キーのアップのタイミングでスペースを出力するので、原理的にリピート出力することができません。

3.リピート出力するために

「スペースキーをリピート出力するなんて使わないからいいや」という人も多いでしょうが、プログラムを書くときにコメントを各場合でスペースを複数連続入力したくなることが多いので、スペースがリピートできないと不便に感じる人もいます。(私もそうです)

この問題の一番簡単な解決方法はスペースと他のキーの組み合わせでスペースキーを出力する方法です。
確かにこの方法で操作上は問題ありませんし、実際にそのように実装したという記事もありました。

4.気持ち悪さと学習コスト

ただ、このようなキーの組み合わせはスペースをリピート出力するのに複数キーの組み合わせを使うことの気持ち悪さ=学習コストがかかることが気になっていました。

どうすれば、覚えやすくて操作も簡単な方法があるか、ずっと考えていましたが、ついに良い解決方法を思いつき実装したところ快適にスペースのリピートができるようになりました。

5.解決策

スペースをシフトキーに割り当てたときは以下のような動作にします。

1.スペースキーの単打
スペースキーを押して離す。
スペースが出力されます。

2.スペースキーを押しながら他のキーを押す
さまざまな機能を割り当てることが可能です。
例えば私は「スペースキー+F」でバックスペースにしています。

3.スペースキーを押し続ける
一定時間以上スペースキーを押し続けると1のスペースキーの単打を無効にします。

これは、スペースキーを押して、他のキーを押そうと思ったけど中断する場合に余分なスペースを出力しないためです。

この3の機能があるために、スペースキーを押し続けてもリピートしないのですが(リピートすると2ができなくなる)、以下の解決策を取りました。

スペースキー単打+押し続ける=リピート

思いつけば簡単な答えです。
元々スペースをリピートして出力したいのですから、スペースキー単打直後にスペースキーを押し続けるという自然な操作でスペースをリピート出力するのです。

学習コストも低く、操作も簡単です。
ただ、この機能を開発するのは、やや面倒でそんなに簡単ではありませんでした。

この機能を追加してホームポジションキーパーの後継ツールは完成度を高めることができました。
今年中には、このツールを公開できるようにしたいと考えています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です