Phase 20a

経緯

6 月に Apple Keyboard を勢いで買ってしまったんですよ。もちろん Windows で使うために。そしたら…

  • スペースキー両隣の [英数] [かな] は keydown イベントしか発生しない = keyup を検知できない = モディファイヤとして使えない!
  • 右上隅の [Eject], カーソルキー左隣の [Fn] はスキャンコードを発行しない = まったく使えない!

…ってことは何だ、全体としてこいつは 77 キーしか使えないうえに、親指領域でモディファイヤとして使えるキーが、スペースキーを含めても 4 個しかないだと!?*1

http://www.apple.com/jp/keyboard/

こいつめ、どうしてくれようか……。

機能要件

  • IME 操作はモディファイヤ化しない。IME 操作のモディファイヤ化は、Phase 16b でそれなりにうまくいっていたとはいえ誤打率は決して低くなかったし、親指の打ちやすい位置に専用のモディファイヤキーが必要になるので Apple Keyboard ではとても採用できない。
  • IME on と IME off は、あくまで別個のキーとする。同じキーで on/off をトグルさせれば全体としてキー数を減らせるが、現在のモードに応じて操作の要否を判断する作業は思考負荷が高すぎてもはや受け入れられない。
  • 英文入力時、文字としてのスペースは keydown で入力されてほしい。もし [Space] をワンショットモディファイヤとするのであれば、それとは別に英文用として単独の [Space] が欲しい。
  • [BackSpace] は単独キーとする。
  • ウィンドウを閉じる (Alt+[F4]) は単独キーとする。
  • 外付テンキーをファンクションキーとして使う。

設計

いままでの設計では次のキーを親指領域に配置していたが、Apple Keyboard でこれらをすべて親指に配置することは不可能だ。使用頻度の低いキーを追い出すしかない。

モディファイヤ
左[Win], 左[Alt], [Mod1], 右[Shift], 右[Win], 右[Ctrl]
非モディファイヤ
[BackSpace], [Space], [IME off], [IME on], [変換], [確定]

このうち [Win], [Alt], [Mod1] は機能的に必須、 [BackSpace], [Space], [変換], [確定] は使用頻度があまりに高いため、いずれも親指にしか配置できない。となると、[IME off], [IME on] をどうにかして追い出すしかなさそうだ。

案 1
左[Shift], 左[Ctrl] をワンショットモディファイヤ化して、左[Shift] 単打を IME off, 左[Ctrl] 単打を IME on とする。
案 2
Mod1+文字キー に割り当てる。例えば Mod1+[ W ] を IME off、Mod1+[ E ] を IME on とする。

案 1 は Phase 20 として 2 か月ほど試してみた。結果、使えることは使えるが、マウスとの併用に支障をきたしたり*2、和英交じり文入力時に左小指がこんがらがったりして、あまりスマートな設計とは思われなかった。そこで、Phase 20a として案 2 を実装することにした。

感想

IME 切替操作の頻度は思ってたほど高くないらしい。Mod1+[ W ], Mod1+[ E ] という比較的へんぴな場所に割り当てたにも関わらず、さほど不便を感じない。実際のところ切替操作にかかる時間は百数十ミリ秒増えた気がするが、Apple Keyboard の制約条件下では最大の効果が得られる配列だと思う。この配列は親指領域の物理配列にあまり依存しないので、Apple Keyboard であろうとノートであろうと、日本語キーボードであればほとんどの機種に適用できるだろう。

*1:左下隅の [Caps] は親指領域に含めない

*2:のどかのワンショットモディファイヤはマウスと併用できない。例えば Ctrl+[左クリック] という操作をするには、ワンショットモディファイヤではない単独の Ctrl キーが必要となる。