2010年04月20日

やまぶき Ver. 4.2.0リリース

やまぶき Ver. 4.2.0をリリースします。

yamabuki4.2.0.zip

・メニューにフォーカスが当たっていると判別できるものについては、そのときに文字キーのキーの入れ替えをしないようにしました
 判別は完璧でなくFirefoxなど判別できないアプリもあるのですが、多くのアプリで判別可能となったので搭載してみました。

・仮想キーコード直接指定にモディファイアを付加できるようにしました
 私としては出来るつもりでしたが出来るようになってなかったので搭載しました。

・XP+ATOKで英数文字を入力しようとするとフリーズする不具合を修正しました
 この修正により、Google日本語入力に対してはvista以降でも、設定ダイアログの「動作モード」タブの「IMEへのアクセスに使うAPIの種類」をTSFに設定することが必須となりました。Google日本語入力をお使いの方は注意してください。
 MS-IME、Google日本語入力、ATOKではテストしましたが、それ以外のIMEでは不具合が出てしまうかもしれません。

・文字キー前置シフトが使えない不具合を修正しました
・シフトロジックの細部調整をしました
posted by yama at 00:06| Comment(9) | TrackBack(0) | やまぶき | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
ATOKで勝手に英数入力モードに変わってしまう不具合が解消されていることを確認しました。
快適です。ありがとうございました。

ただ、以前修正済みの不具合が再発しています。
過去Ver.4.0.0のときに指摘したことがあり、
Ver.4.1.0で、「文字キー同時打鍵シフトで、シフトとして消費されたキーはキーリピートしない」というふうに直してもらった症状です。
詳細については、当時の書き込みを下に引用しました。

この現象は、Ver.4.2.0プラス
WinXP+(ワード or Win付属メモ帳)
の環境で発生し、
Win7+(ワード or Win付属メモ帳)
で発生しません。
発生する頻度は三度に一度ぐらいです。
確認してみてください。

>[A]キー単独打鍵に「あ」が、[B]単独打鍵に「い」が割り振ってあり、
>[A][B]同時打鍵にカーソルの「下」が定義されていたとします。

>1. [A][B]を同時に押す。(「下」が出力される)
>2. もう一行下まで行こうかな…と考えて、[B]だけを離し、[A]を押したまま保留する。
>→この状態で1秒ぐらい経過すると、「あああああ…」がリピートで出てきてしまいます。

>しかし、
>1. [A][B]を同時に押す。(「下」が出力される)
>2. [A]を押したまま、[B]をいったん離してもう一度押し直す。(再び「下」がひとつ出力される)
>3. もう一行下まで行こうかな…と考えて、[B]だけを離し、[A]を押したまま保留する。
>→この状態ではいくら待ってもキーリピートは始まらず、次に[B]を押したときに三つめの「下」が出力されます。
Posted by Cane at 2010年04月21日 11:28
「文字キー二つと親指シフトキーを同時に打鍵した状態に文字が割り当てられているときに、文字キー→文字キー→親指シフトキーと押して、押しっぱなしにしてリピートして、最初の文字キーをキーアップした後リピートしてしまう」という現象なら確認できました。
これ以外は正常に動いているようです。
ご報告の不具合はこの形でしょうか?
Posted by yama at 2010年04月21日 21:03
先の報告は、Ver.4.0.0のときと同じく、親指シフトのからまない文字キー二つの同時打鍵の場合での挙動だったのですが、
よーく調べてみたら、「どうやら外付けキーボードのせいらしい」ことが分かりました。
今まで使っていた安物のUSBキーボードを普通のPS/2キーボードに変えたら、報告したような現象が見られなくなりました。
というわけでどうかお気になさらぬよう…お騒がせしました。
Posted by Cane at 2010年04月22日 15:50
そうでしたか。
了解しました。
Posted by yama at 2010年04月22日 20:55
 同時打鍵がどのタイミングで判定されているのかについて教えてください。

 たとえば、文字キー同時打鍵で「文字キー同士が同時打鍵と判定される時間範囲」を90として、[D]押下、[K]押下、[D]離す、[K]離すという順番で入力したとします。
 この場合、[D]に対して[K]のシフトが掛かるかどうかは、[D]押下を0、[D]離すを100として、[K]押下が90以内かどうかで判定をしていると思います。

 では、親指シフトの連続シフトで「親指シフトが同時打鍵と判定される時間範囲」を90として、[K]押下、[変換]押下、[J]押下、[K]離す、[変換]離す、[J]離すという順番で入力したとします。
 この場合は、[J]に対して[変換]のシフトが掛かるかどうかは、どこを0、どこを100として、どこが90以内かどうかで判定しているのでしょうか?
Posted by kouy at 2010年04月25日 19:11
 kouyさんの質問、私にとっても興味があります。
 文字キー同士同時打鍵と、親指連続シフトとでは、(仮に実装上の差異はあっても)同じ「考え方」で処理しているのではないかと想像しているのですが、実際の挙動についてお尋ねしたいと考えていました。

【私が想像している前提】
 [K]押下、[K]離す……は、[J]と[変換]の打鍵シーケンスに影響を与える要素ではないので、ここでは無視。
 そのため、(文字キー同士同時打鍵と同じ考え方で)[変換]押下、[J]押下、[変換]離す、[J]離す……というシーケンスで見る。

【私が想像している動作】
 [変換]押下を0、[変換]離すを100としたときに、[J]押下が90を超えていればシフト残りが起きたと見なして、シフトを「掛けない」([J]押下が90未満であれば、シフトを掛ける)……という判定をするものと、私は想像しています。
 そして、これと全く同じ考え方で、文字キー同士同時打鍵についても、「シフト残り」を検知してる。

 こういう認識であっているのかと、正直ドキドキものではありますが……正解についてお教えいただけますと嬉しいです。


 p.s.ただいま「やまぶき」の「シフト残り対策付き連続シフト」を使って、NICOLAが使えるか?実験への参加者を募っているところです。今のところテストいただいた4人中、4人全員の親指シフトユーザさんから「大丈夫っぽい」という反応をいただいてます。いいロジックは、配列の壁をも超える……という、そういう時代が来るのかもしれませんね。
Posted by 相沢かえで at 2010年04月25日 21:19
文字キー同時打鍵シフトの判定の仕方は、kouyさんの認識で合っています。

親指シフトについては、先に押されたのが文字キーか親指シフトキーかによって少し違っています。

先に押されたのが文字キー([K]押下、[変換]押下、[K]離す、[変換]離す)のときは、「[K]押下」を0、「[K]離す」を100として、「[変換]押下」が前にくっつくか後にくっつくかを判定します。
「くっつく」という考え方はちょっと奇妙ですが、要は、同時打鍵時間範囲が90なら、「[変換]押下」が90以内(前にくっつく)のときはシフトが掛かり、90以上(後にくっつく)のときはシフトが掛かからないということです。

先に押されたのが親指シフトキー([変換]押下、[K]押下、[変換]離す、[K]離す)のときは、まず「[変換]押下」、「[K]押下」、「[変換]離す」の3点で判定し、「[K]押下」が前に付くならシフトが掛かったとみなし、後に付くなら、さらに「[K]押下」、「[変換]離す」、「[K]離す」の3点で判定して、「[変換]離す」が前に付くならシフトが掛からず、後に付くならシフトが掛かるという結果になります。
このように、先に押されたのが親指シフトキーのときは、2段階で判定しています。

今では2段階判定していますが、もともと(バージョン2時代)は後者だけでした。
文字キーと親指シフトキーでは文字キーの方が主なので、「文字キーの打鍵に対してどのシフトが掛かっているかを時間判定する」という言葉を素直に実装すると、後者の「[K]押下」、「[変換]離す」、「[K]離す」の3点で判定するということになります。
しかし、実際打ってみるとシフトミスし易かったので、前者も加えることになりました。
親指シフトキーと文字キーを同時に押したら、それはシフトが掛かったとしてよいだろうという判断です。

以上を踏まえて、「[K]押下、[変換]押下、[J]押下、[K]離す、[変換]離す、[J]離す」という打鍵列について解説すると、まず、「[K]押下」、「[変換]押下」、「[J]押下」の3点で判定し、「[変換]押下」がどちらに付くかを判定することになります。
「[変換]押下」が前に付くときは、[K]にシフトが掛かり、[J]については連続シフト判定(「[J]押下」、「[変換]離す」、「[J]離す」の3点で判定)扱いになります。
後に付くときは、[K]にシフトが掛からず、以下「[変換]押下、[J]押下、[変換]離す、[J]離す」のような親指シフトキーを先に押した状態とみなされ、まず「[変換]押下」、「[J]押下」、「[変換]離す」の3点で判定し、シフトが掛からないなら、さらに「[J]押下」、「[変換]離す」、「[J]離す」の3点で判定するという流れになります。
Posted by yama at 2010年04月26日 20:48
>相沢かえでさん
NICOLAと連続シフトについては、おくまさん(http://okuma-room.cocolog-nifty.com/okuma/2010/01/340-2e2d.html)のようにシフトミスするからいらないという方もいらっしゃるようです。連続シフトに起因するシフトミスは、いろいろな対策で減らすことはできても0にはできませんから。

結局は使う人がトレードオフをどう価値判断するか――連続シフトを取ってシフトミスを我慢するか、連続シフトに起因するシフトミスが無いことを取って連続シフトを捨てるか、という話になるのだと思います。
双方に利点がある以上、自分が使いやすい方を選べる状況が最高なのかなと思います。

シフトといえば、普通の小指シフトの挙動も「キーダウン時に文字が出る」という利点があるので、選択肢として有りだと思います。
同時打鍵シフトは文字が出が遅延しますから、それが許せない人は普通の小指シフトの挙動でシフトを掛けるしか無いでしょう。

前置シフトも、打鍵数が増えますが「シフトミスが一切無い」という利点があります。

すべて、トレードオフをどう価値判断するかにかかっている気がします。
Posted by yama at 2010年04月26日 20:49
詳しい説明ありがとうございます。
3点だけで判定していると解釈するとどうも納得できない挙動をすることがある気がしていたのですが、やっぱり工夫があったんですね。
Posted by kouy at 2010年04月26日 23:54
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック