Edited at

キーボード配列エミュレーションソフトウエア「紅皿」動作仕様書


1. 適用範囲


2. 用語の定義


  • この仕様書で用いる用語の定義は、次の通りです。

  • a. 親指キー 同時打鍵時に使用するキー。親指キーには、親指左キーと親指右キーとがあります。

  • b. 文字キー 打鍵により文字情報が出力されるキーです。

  • c. 修飾キー 文字キーを修飾するキーです。シフトキー、コントロールキー、ALTキー、Windowsキーの4つです。

  • d. 単独打鍵 一回の動作で、一つのキーを打鍵することです。

  • e. 同時打鍵 一回の動作で、文字キーと親指キーとの二つのキーを順不同で、ピアノの和音を打鍵するように同時性を意図して打鍵することです。


3. 鍵盤配列


  • 鍵盤の配列は、ローマ字モード6面と、英数モード6面の全12面です。ローマ字モードは、インプット・メソッド(IME)をローマ字入力のひらがな・全角カタカナ・半角カタカナに設定したときのモードであり、英数モードは、インプット・メソッドを全角英数・半角英数・直接入力に設定したときのモードです。


3.1 各配列名とシフト操作との関係

配列名
シフト操作

ローマ字シフト無し
シフト無し

ローマ字右親指シフト
右親指キーと共に文字キー打鍵

ローマ字左親指シフト
左親指キーと共に文字キー打鍵

ローマ字小指シフト
小指シフト

ローマ字小指右親指シフト
小指シフトした状態で、右親指キーと共に文字キー打鍵

ローマ字小指左親指シフト
小指シフトした状態で、右親指キーと共に文字キー打鍵

英数シフト無し
シフト無し

英数右親指シフト
右親指キーと共に文字キー打鍵

英数左親指シフト
左親指キーと共に文字キー打鍵

英数小指シフト
小指シフト

英数小指右親指シフト
小指シフトした状態で、右親指キーと共に文字キー打鍵

英数小指左親指シフト
小指シフトした状態で、右親指キーと共に文字キー打鍵


3.1.1 ローマ字モード

ローマ字入力モードにおける各配列は、次によります。

ローマ字シフト無し

ローマ字シフト無しs.png

ローマ字右親指シフト

ローマ字右親指シフトs.png

ローマ字左親指シフト

ローマ字左親指シフトs.png

ローマ字小指シフト・ローマ字小指右親指シフト・ローマ字小指左親指シフト

英数小指シフトsのコピー.png


3.1.2 英数モード 

英数モードにおける各配列は、次によります。

英数シフト無し・英数右親指シフト・英数左親指シフト

英数シフト無しs.png

英数小指シフト・英数小指右親指シフト・英数小指左親指シフト

英数小指シフトsのコピー.png

上記の配列は、紅皿が読み込むキー配列ファイルによって変更することができます。


4. 文字の出力


4.1 ローマ字モードと英字モード


  • ローマ字モードと英字モードの選択は、インプット・メソッドによります。


4.2 英字モードでの配列


Caps Lockモードでない場合


  • シフトキーを押下せずに文字キーを単独打鍵すると、英数シフト無し配列の文字が出力されます。

  • 右親指キーと文字キーを同時打鍵すると、英数右親指シフト配列の文字が出力されます。

  • 左親指キーと文字キーを同時打鍵すると、英数左親指シフト配列の文字が出力されます。

  • シフトキーを押下して、文字キーを単独打鍵すると、英数小指シフト配列の文字が出力されます。

  • シフトキーを押下して、右親指キーと文字キーを同時打鍵すると、英数小指右親指シフト配列の文字が出力されます。

  • シフトキーを押下して、左親指キーと文字キーを同時打鍵すると、英数小指左親指シフト配列の文字が出力されます。


Caps Lockモードの場合、


  • シフトキーを押下せずに文字キーを単独打鍵すると、英数小指シフト配列の文字が出力されます。

  • 右親指キーと文字キーを同時打鍵すると、英数小指右親指シフト配列の文字が出力されます。

  • 左親指キーと文字キーを同時打鍵すると、英数小指左親指シフト配列の文字が出力されます。

  • シフトキーを押下して、文字キーを単独打鍵すると、英数シフト無し配列の文字が出力されます。

  • シフトキーを押下して、右親指キーと文字キーを同時打鍵すると、英数右親指シフト配列の文字が出力されます。

  • シフトキーを押下して、左親指キーと文字キーを同時打鍵すると、英数左親指シフト配列の文字が出力されます。


4.3 ローマ字モードでの文字の出力


Caps Lockモードでない場合


  • シフトキーを押下せずに文字キーを単独打鍵すると、ローマ字シフト無し配列の文字が出力されます。

  • 右親指キーと文字キーを同時打鍵すると、ローマ字右親指シフト配列の文字が出力されます。

  • 左親指キーと文字キーを同時打鍵すると、ローマ字左親指シフト配列の文字が出力されます。

  • シフトキーを押下して、文字キーを単独打鍵すると、ローマ字小指シフト配列の文字が出力されます。

  • シフトキーを押下して、右親指キーと文字キーを同時打鍵すると、ローマ字小指右親指シフト配列の文字が出力されます。

  • シフトキーを押下して、左親指キーと文字キーを同時打鍵すると、ローマ字小指左親指シフト配列の文字が出力されます。


Caps Lockモードの場合、


  • シフトキーを押下せずに文字キーを単独打鍵すると、ローマ字小指シフト配列の文字が出力されます。

  • 右親指キーと文字キーを同時打鍵すると、ローマ字小指右親指シフト配列の文字が出力されます。

  • 左親指キーと文字キーを同時打鍵すると、ローマ字小指左親指シフト配列の文字が出力されます。

  • シフトキーを押下して、文字キーを単独打鍵すると、ローマ字シフト無し配列の文字が出力されます。

  • シフトキーを押下して、右親指キーと文字キーを同時打鍵すると、ローマ字右親指シフト配列の文字が出力されます。

  • シフトキーを押下して、左親指キーと文字キーを同時打鍵すると、ローマ字左親指シフト配列の文字が出力されます。


4.4 同時打鍵の判定


  • 同時打鍵の判定は次によります。但し、親指キーの単独打鍵が無効のときには、親指キー($O$)は出力されません。

  • 零遅延モードにおいては、文字キーの押下と共に先行出力され、以下にて確定したキーと先行出力とを比較します。確定したキーと先行出力とが相違していれば、バックスペースキーを出力したのち、確定したキーを出力します。


(1) 初期状態


  • (1.1) 文字キー($M$)が押下された場合、当該文字キー($M$)をセットし、同時打鍵判定時間$T_{th}$をタイムアウト時間にセットして、文字キー押下状態(S2)へ遷移します。なお、同時打鍵判定時間$T_{th}$は、紅皿設定の親指シフトタブにおいて10mSECから400mSECの間で設定可能です。

  • (1.2) 親指キーが押下された場合、当該親指キー($O$)をセットし、親指キー押下状態(S3)へ遷移します。


(2) 文字キー押下状態


  • (2.1) 初期化された場合、セットされている文字($M$)を出力し、初期状態(S1)へ遷移します。

  • (2.2) 文字キー($M_2$)が押下された場合、セットされている文字($M_1$)を出力し、新しく押下された文字キー($M_2$)をセットし、タイムアウトカウンタを初期化し、文字キー押下状態(S2)のまま遷移しません。

  • (2.3) 親指キー($O$)が押下された場合、当該親指キー($O$)をセットし、文字キー($M$)が押下されてから親指キー($O$)が押下された時までの時間($t_{MO}$)をタイムアウト時間にセットし、文字キー親指キー押下状態(S4)へ遷移します。

  • (2.4) 当該文字キー($M$)がオフとなった場合、セットされている文字($M$)を出力し、初期状態(S1)へ遷移します。

  • (2.5) 同時打鍵判定時間$T_{th}$が経過してタイムアウトとなった場合、セットされている文字($M$)を出力し、初期状態(S1)へ遷移します。


(3) 親指キー押下状態


  • (3.1) 初期化された場合、セットされている親指キー($O$)を出力し、初期状態(S1)へ遷移します。

  • (3.2) 文字キー($M$)が押下された場合、セットされている親指キー($O$)に加えて当該文字キー($M$)をセットし、親指キー($O$)が押下されてから文字キー($M$)が押下された時までの時間($t_{OM}$)をタイムアウト時間にセットし、親指キー文字キー押下状態(S5)へ遷移します。

  • (3.3) 親指キー($O_2$)が押された場合、セットされている親指キー($O_1$)を出力し、新しく押下された当該親指キー($O_2$)をセットし、タイムアウトカウンタを初期化し、親指キー押下状態(S3)のまま遷移しません。

  • (3.4) 当該親指キー($O$)がオフとなった場合、セットされている親指キー($O$)を出力し、初期状態(S1)へ遷移します。

  • (3.5) 親指キー押下状態ではタイムアウトを無視します。


(4) 文字キー親指キー押下状態


  • (4.1) 初期化された場合、セットされている文字キーのセットされている親指キーに対応する文字($MO$)を出力し、初期状態(S1)へ遷移します。


  • (4.2)  処理A(3キー判定)

    文字キー($M_2$)が押下された場合、最初の文字キー($M_1$)が押下されてからセットされている親指キー($O$)が押下された時までの時間($t_{MO}$)と、セットされている親指キー($O$)が押下されてから次の文字キー($M_2$)が押下されるまでの時間($t_{OM}$)とを比較し、次のように文字を出力します。


    • (a) $t_{MO}≧t_{OM}$ならば、セットされている文字($M_1$)を出力し、押下された次の文字キー($M_2$)をセットし、親指キー($O$)が押下されてから文字キー($M_2$)が押下された時までの時間($t_{OM}$)をタイムアウト時間にセットして、親指キー文字キー押下状態(S5)へ遷移します。

    • (b) $t_{MO}<t_{OM}$ならば、セットされている文字キーのセットされている親指キーに対応する文字($M_1O$)を出力し、押下された次の文字キー($M_2$)をセットし、同時打鍵判定時間$T_{th}$をタイムアウト時間にセットして、文字キー押下状態(S2)へ遷移します。



  • (4.3) 親指キー($O_2$)が押下された場合、セットされている文字キーのセットされている親指キーに対応する文字($M_1O_1$)を出力し、新しく押下された親指キー($O_2$)をセットし、親指キー押下状態(S3)へ遷移します。



  • (4.4) 処理C (重なり厚み判定)

    当該文字キー($M$)がオフとなった場合、セットされている文字キー($M$)が押下されてからセットされている親指キー($O$)が押下された時までの時間($t_{MO}$)とセットされている親指キー($O$)が押下されてからセットされている文字キー($M$)がオフされるまでの時間($t_{Om}$)とを比較し、次のように文字を出力します。


    • (a) $t_{MO}≧t_{Om}かつt_{Om}<τ$ ($τ$は実装依存の固定値)ならば、同時打鍵未成立と見做し、セットされている文字($M$)を出力し、親指キー押下状態(S3)へ遷移します。

    • (b) $t_{MO}<t_{Om}またはt_{Om}≧τ$ならば、セットされている文字キーのセットされている親指キーに対応する文字($MO$)を出力し、初期状態(S1)へ遷移します。

    • 紅皿 ver.0.1.3.2では、全時間($t_{MO}+t_{Om}$)に対する、文字と親指シフトの重なり時間($t_{MO}$)の割合が判定されます。この割合は、紅皿設定の親指シフトタブの「文字と親指シフトの同時打鍵の割合」で設定可能です。

    • $τ$は、キーが短時間だけ押下された場合を除外するためと思われます。紅皿 ver.0.1.3.2において、$τ$=0mSECです。




  • (4.5) 処理F (重なり厚み判定)

    当該親指キー($O$)がオフとなった場合、セットされている文字キー($M$)が押下されてからセットされている親指キー($O$)が押下された時までの時間($t_{MO}$)とセットされている親指キー($O$)が押下されてからセットされている親指キー($O$)がオフされるまでの時間($t_{Oo}$)とを比較し、次のように文字を出力します。


    • (a) $t_{MO}≧t_{Oo}かつt_{Oo}<τ$ ($τ$は実装依存の固定値)ならば、同時打鍵未成立と見做し、セットされている文字($M$)を出力し、セットされている親指キー($O$)を出力し、初期状態(S1)へ遷移します。

    • (b) $t_{MO}< t_{Oo}またはt_{Oo}≧τ$ならば、セットされている文字キーのセットされている親指キーに対応する文字($MO$)を出力し、初期状態(S1)へ遷移します。

    • 紅皿 ver.0.1.3.2では、全時間($t_{MO}+t_{Oo}$)に対する、文字と親指シフトの重なり時間($t_{MO}$)の割合が判定されます。この割合は、紅皿設定の親指シフトタブの「文字と親指シフトの同時打鍵の割合」で設定可能です。

    • $τ$は、キーが短時間だけ押下された場合を除外するためと思われます。紅皿 ver.0.1.3.2において、$τ$=0mSECです。



  • (4.6) タイムアウト

    セットされている時間($t_{MO}$)が経過するとタイムアウトとします。タイムアウトとなった場合、セットされている文字キーのセットされている親指キーに対応する文字($MO$)を出力し、初期状態(S1)へ遷移します。



(5)親指キー文字キー押下状態


  • (5.1) 初期化された場合、セットされている文字キーのセットされている親指キーに対応する文字($MO$)を出力し、初期状態(S1)へ遷移します。


  • (5.2) 文字キー($M_2$)が押下された場合、セットされている文字キーのセットされている親指キーに対応する文字($M_1O$)を出力し、新しく押下された文字キー($M_2$)をセットし、文字キー押下状態(S2)へ遷移します。



  • (5.3) 処理B(3キー判定)

    親指キー(O2)が押下された場合、セットされている親指キー(O1)が押下されてからセットされている文字キー(M)が押下された時までの時間tOMと、セットされている文字キー(M)が押下されてから次の親指キー(O2)が押下されるまでの時間tMOとを比較し、次のように文字を出力します。


    • (a) $t_{OM}≧t_{MO}$ならば、セットされている親指キー($O_1$)を出力し、押下された次の親指キー($O_2$)をセットし、時間($t_{MO}$)をタイムアウト時間にセットして、文字キー親指キー押下状態(S4)へ遷移します。なお、連続モードが設定されている場合には、セットされている親指キー($O_1$)を出力しません。

    • (b) $t_{OM}< t_{MO}$ならば、セットされている文字キーのセットされている親指キーに対応する文字($MO_1$)を出力し、押下された次の親指キー($O_2$)をセットし、親指キー押下状態(S3)へ遷移します。




  • (5.4) 処理E (重なり厚み判定)

    当該文字キー($M$)がオフとなった場合、連続モードならば、セットされている文字キーのセットされている親指キーに対応する文字($MO$)を出力し、初期状態(S1)へ遷移します。

    当該文字キー($M$)がオフとなった場合、連続モードでないならば、セットされている親指キー($O$)が押下されてからセットされている文字キー($M$)が押下された時までの時間($t_{OM}$)とセットされている文字キー($M$)が押下されてからセットされている文字キー($M$)がオフされるまでの時間($t_{Mm}$)とを比較し、次のように文字を出力します。


    • (a) $t_{OM}≧t_{Mm}かつt_{Mm}<τ$ ($τ$は実装依存の固定値)ならば、同時打鍵未成立と見做し、セットされている親指キー($O$)を出力し、セットされている文字($M$)を出力し、初期状態(S1)へ遷移します。

    • (b) $t_{OM}< t_{Mm}またはt_{Mm}≧τ$ならば、セットされている文字キーのセットされている親指キーに対応する文字($MO$)を出力し、初期状態(S1)へ遷移します。

    • 紅皿 ver.0.1.3.2では、全時間($t_{OM}+t_{Mm}$)に対する、文字と親指シフトの重なり時間($t_{OM}$)の割合が判定されます。この割合は、紅皿設定の親指シフトタブの「文字と親指シフトの同時打鍵の割合」で設定可能です。

    • $τ$は、キーが短時間だけ押下された場合を除外するためと思われます。紅皿 ver.0.1.3.2において、$τ$=0mSECです。

    • 紅皿において重なり厚み判定は、文字キーと親指シフトの同時打鍵割合が考慮されます。




  • (5.5) 処理D (重なり厚み判定)

    当該親指キー($O$)がオフされた場合、セットされている親指キー($O$)が押下されてからセットされている文字キー($M$)が押下された時までの時間($t_{OM}$)とセットされている文字キー($M$)が押下されてから親指キー($O$)がオフされるまでの時間($t_{Mo}$)とを比較し、次のように文字を出力します。


    • (a) $t_{OM}≧t_{Mo}かつt_{Mo}<τ$ ($τ$は実装依存の固定値)ならば、時間($t_{Mo}$)をタイムアウト時間にセットして、親指キー文字キー押下後親指オフ押下状態(S6)へ遷移します。

    • (b) $t_{OM}<t_{Mo}またはt_{Mo}≧τ$ ($τ$は実装依存の固定値)ならば、セットされている文字キーのセットされている親指キーに対応する文字($MO$)を出力し、初期状態(S1)へ遷移します。

    • 紅皿 ver.0.1.3.2では、全時間($t_{OM}+t_{Mo}$)に対する、文字と親指シフトの重なり時間($t_{OM}$)の割合が判定されます。この割合は、紅皿設定の親指シフトタブの「文字と親指シフトの同時打鍵の割合」で設定可能です。

    • $τ$は、キーが短時間だけ押下された場合を除外するためと思われます。紅皿 ver.0.1.3.2において、$τ$=0mSECです。



  • (5.5) タイムアウト

    セットされている時間($t_{OM}$)が経過するとタイムアウトとします。タイムアウトとなった場合、セットされている文字キーのセットされている親指キーに対応する文字($MO$)を出力し、初期状態(S1)へ遷移します。



(6)親指キー文字キー押下後親指オフ状態


  • (6.1) 初期化された場合、セットされている親指キーに対応する文字($O$)を出力し、セットされている文字キーに対応する文字($M$)を出力し、初期状態(S1)へ遷移します。


  • (6.2) 文字キー($M_2$)が押下された場合、セットされている親指キーに対応する文字($O$)を出力し、セットされている文字キーに対応する文字($M_1$)を出力し、新しく押下された文字キー($M_2$)をセットし、同時打鍵判定時間$T_{th}$をタイムアウト時間にセットして、文字キー押下状態(S2)へ遷移します。


  • (6.3) 親指キー($O_2$)が押下された場合、セットされている文字キーのセットされている親指キーに対応する文字($MO$)を出力し、親指キー押下状態(S3)へ遷移します。


  • (6.4) 当該文字キー($M$)がオフされた場合、セットされている文字キーのセットされている親指キーに対応する文字($MO$)を出力し、初期状態(S1)へ遷移します。


  • (6.5) セットされた時間($t_{Mo}$)が経過してタイムアウトした場合、セットされている親指キーに対応する文字($O$)を出力し、セットされている文字キーに対応する文字($M$)を出力し、初期状態(S1)へ遷移します。


S1) 初期状態
S2) Mオン状態
S3) Oオン状態
S4) M→Oオン状態
S5) O→Mオン状態
S6) O→M→Oオフ状態

初期化

M出力、 S1)へ
O出力、 S1)へ
MO出力、 S1)へ
MO出力、 S1)へ
セットされていた O出力、M出力、 S1)へ

文字キー(M)オン
Mセット、 S2)へ
セットされていたM出力、 新Mセット、 S2)まま
Mセット、 S5)へ
処理A (3キー判定)
MO出力、 新Mセット、 S2)へ
セットされていた O出力、 M出力、 新Mセット、 S2)へ

親指(O)オン
Oセット、 S3)へ
Oセット、 S4)へ
セットされていた O出力、 新Oセット、 S3)まま
MO出力、 新Oセット、 S3)へ
処理B (3キー判定)
セットされていた MO出力、 新Oセット、 S3)へ

文字キー (M)オフ

当該Mキーオフの場合、 M出力、 S1)へ

処理C (重なり厚み判定)
処理E (重なり厚み判定)
セットされていた MO出力、 S1)へ

親指(O)オフ


当該Oオフの場合、 O出力、 S1)へ
処理F (重なり厚み判定)
処理D (重なり厚み判定)

タイムアウト $T_{th}$
--
M出力、 S1)へ

MO出力、 S1)へ
MO出力、 S1)へ
セットされていた O出力、 M出力、 S1)へ

注1(初期化):初期化を引き起こす事象は、機能キーなどの非文字キーの打鍵である。

注2(タイムアウト):S2)は、同時打鍵時間$T_{th}$、S4)は文字(M)キーオンから親指(O)オンまでの時間、S5)は親指(O)オンから文字キー(M)オンまでの時間、S6)は文字キー(M)オンから親指(O)オフまでの時間

注3(親指キーのタイムアウト抑制):Oオン状態でタイムアウトになってもOを出力せずに、 Oオンの状態にとどまる。