空飛ぶ親指シフト
文章創生のツール

「親指シフト・いんぷりめんと」

かつて日本語入力コンソーシアムの公式サイトに掲載されていた、状態遷移表です(2000-12-05修正バージョン)。現在は異なる内容に書き換えられ参照できないため、ここで再掲します。

OASYS方式(変換キー独立型)の処理

補足

  • 当該キー押し上げ

当該キー押し上げとは各状態へ遷移したさい、遷移の原因となった最後のキーが離されたことです。

3キー分岐処理

3キー分岐処理は日本語入力コンソーシアムの同時打鍵遷移表において「処理A」と表記されたものであり、親指シフト同時打鍵判定の骨格ともいえる処理です。

3キー分岐処理を図示したもの

ノンーシフト・タイム

  • 最初に任意の文字キー(上図の例では[A]キー)が押されてから親指キーが押されるまでの時間。
  • 親指シフトキーが押されていないのでノンーシフト・タイム。

シフト・タイム

  • 親指キーが押されてからつぎの文字キー(上図の例では[B]キー)が押されるまでの時間。
  • 同時打鍵状態なのでシフト・タイム。

同時打鍵状態からさらに任意の文字キー(上図の例では[B]キー)が押され、結果として3キー同時押しになった時点で分岐処理を行います。

ノンーシフト・タイム ≧ シフト・タイム

  • 文字([A])キー出力 → 文字([B])キー&親指キー同時打鍵出力 → 初期化

ノンーシフト・タイム < シフト・タイム

  • 文字([A])キー&親指キー同時打鍵出力 → 新文字([B])キーセット

となります。

引用者補足

日本語ワードプロセッサOASYSにおいて親指キーは通常のシフトキーと基本的に同等の扱いになっていたため、親指キーの単独打鍵は何も出力しません。

変換キー共用型の処理

当該キー押し上げ

  • 親指キー押し上げ → 同時打鍵成立 → 出力 → 初期化へ
  • 文字キー押し上げ → 文字キーリリース処理

文字キーリリース処理

文字キーリリース処理は変換キー共用型NICOLA固有の処理になります。

文字キーリリース処理

文字キーが単独で押されている時間をノン-シフト・タイム

親指キーが押されて同時打鍵になってから文字キーが離されるまでの時間をシフト・タイム

とします。

ここで

ノン-シフト・タイム ≧ シフト・タイム かつ  シフト・タイム < τ

(τ=タウは固定値)

の条件を満たしたときには、同時打鍵未成立とみなし、

  • 文字キー出力 → 親指キーセット

そうでなければ

  • 文字キー&親指キー同時打鍵出力 → 初期化

となります。

引用者補足

NICOLA規格では固定値と比較しない方法、すなわち

ノン-シフト・タイム ≧ シフト・タイム

のみで判定する方法も提案しています。

固定値を使う場合であっても、文字キーを離すまでの時間シフト・タイムはブレの要素が大きいため、ここをタイトにすると逆に判定精度が落ちる可能性があります。引用者個人の見解だとお断りしたうえで、固定値は70ms~100ms程度の比較的大きめの値に設定すべきかと考えます。

「親指シフト・いんぷりめんと」テキストバージョン

以下は状態遷移表のテキスト版です。

前提

  • 最初に押した文字キーの時間を FIG_TIME
  • 親指キーの押し下げ時間を THUMB_TIME

とする。

初期状態

文字キー押し下げ
  1. 文字キー情報(キーコード、押し下げ時間など)取得(タイマーセット)
  2. 文字キーセット状態へ
親指キー押し下げ
  1. 親指キー情報取得、タイマーセット
  2. 親指キーセット状態へ
その他のイベント
  • 処理なし

文字キーセット状態

文字キー押し下げ(新たに押された文字キー)
  1. 文字キー出力
  2. あらたに押された文字キー情報取得、タイマーセット
  3. 文字キーセット状態へ
親指キー押し下げ
  1. 親指キー情報取得、タイマーセット
  2. 文字キー&親指キーセット状態へ
当該キー押し上げ
  1. 文字キー出力
  2. 初期化へ
タイムアウト
  1. 文字キー出力
  2. 初期化へ(必要ならばリピート処理、ここでは割愛)
その他のイベント
  1. 文字キー出力
  2. 初期化へ

親指キーセット状態

文字キー押し下げ
  1. 文字キー情報取得
  2. 同時打鍵確定・出力
  3. 初期化へ(もしくはリピート処理)
親指キー押し下げ
  1. 親指キー出力(OASYSでは通常Shiftと同じ動作のため出力なし)
  2. 親指キー情報取得、タイマーセット
  3. 親指キーセット状態へ
当該キー押し上げ
  1. 親指キー出力(OASYSでは出力なし)
  2. 初期化へ
タイムアウト

OASYSの場合は処理なし

OASYSでなければ

  1. 親指キー出力
  2. 初期化へ(もしくはリピート処理)
その他のイベント
  1. 親指キー出力(OASYSの場合は出力なし)
  2. 初期化へ

文字キー&親指キーセット状態

文字キー押し下げ

(3キー分岐処理)

新たに押した文字キーの時間を NEW_TIMEとすると

条件1 THUMB_TIME – FIG_TIME ≧ NEW_TIME – THUMB_TIME

( ノンーシフト・タイム ≧ シフト・タイム ) の場合

  1. 文字キー出力
  2. 新文字キーセット
  3. 新文字キー&親指キー同時打鍵確定・出力
  4. 初期化へ(もしくはリピート処理)

条件2 THUMB_TIME – FIG_TIME < NEW_TIME – THUMB_TIME

( ノンーシフト・タイム < シフト・タイム ) の場合

  1. 文字キー&親指キー同時打鍵確定・出力
  2. 親指キー情報クリア
  3. あらたに押された文字キー情報取得、タイマーセット
当該キー押し上げ

条件 1 変換キー共用型NICOLAの設定になっていて、

条件 2 先に押した文字キーが押し上げられて、

条件 3 条件 2の時間をNEW_TIMEと定義したときに

NEW_TIME – THUMB_TIME < Τ) かつ

THUMB_TIME – FIG_TIME < NEW_TIME – THUMB_TIME ならば

Τ(タウ)は固定値

  1. 文字キー出力
  2. 親指キーセット状態へ

条件をひとつでも満たさない場合

  1. 同時打鍵確定・出力
  2. 初期化へ(もしくはリピート処理)
タイムアウト
  1. 同時打鍵確定・出力
  2. 初期化へ(もしくはリピート処理)
その他のイベント
  1. 同時打鍵確定・出力
  2. 初期化へ