2020年01月27日

【薙刀式】DvorakJのリニューアルをしてみた

nggさんのコメント
http://oookaworks.seesaa.net/article/473215424.html#comment
による、第一の方法
(親指インストーラーに含まれる、
いくつかの最新版DvorakJで上書きする)
を試してみた。
比較すると、処理速度が向上していると感じる。


ただし、以下の再現可能バグが存在する。
1 +の同時押しが、双方向性がないものがあること
2 「らない」の離し順によって「らなない」に化けること


1 +の同時押しが、双方向性がないものがあること

薙刀式のソースで、仕様上は双方向定義しなくてよい、
「+の同時押し」を双方向定義しているのには、
理由がある。
たとえば濁音同時押しを考える。

F+Uの同時押しを考える時、
「Fを押しながらU」と、
「Uを押しながらF」が、
同じ出力、「ざ」になることが望ましい。

しかしソースにおける、
/*逆順*/
部分を削除すると、
後者がBSを出力してしまう。
つまり濁音同時押しを認識せず、
単打のものだけが出てしまう。
これは意図した動作ではない。

ということで、何が起こるのか予想が出来ないため、
薙刀式のソースではわざわざ逆順を定義してある。
(これが二重定義になって何かの不具合になることより、
そもそも打てないことがあることの不具合を優先した)

不具合がある部分だけを修正すればいいのだが、
なにせ配列を変えたくなったときに、
ソースをちょこっと弄るだけにしておきたいので、
一般的な定義にしてあるわけだ。

で、今回新しいAutoHotKeyでコンパイルされた、
DvorakJの親指インストーラ版でやってみると、
動作自体はきびきびしてよいのだが、
この同時押しバグは改善していない。

具体的にいうと、
濁音の逆順の定義を外すと、
A+J、S+J、U+Fが認識されない。
ぜ、げ、ざ、にならず、
単打の出力、
ろあ、けあ、BSか、に化ける。

半濁音やその他においてもおそらく同様と思われるので、
動作がきびきびするだけでも良しとしよう。

(逆順定義が不要になると、
処理速度が倍速くなる、はず?)


2 「らない」の離し順によって「らなない」に化けること

これも再現可能バグとして残ってしまった。
「らない」を素早く打ち、
「な」だけを押したまま「らい」を離すと、
「らなない」に化ける。

離しの順番が、押しの順番と異なる場合におこる、
まで一般化出来るかどうかは謎。
実用上、「らない」はかなり速くロールオーバーするため、
自分で気づいた模様。

余程速くロールオーバーしないとならないため、
まあ目をつぶれるレベルかもだ。


また、
これまでよくあった、
「同時押しのシフトが残る現象」
(これも素早く打つとなることがある)
は、
今のところ殆ど起こっていないので、
これの恩恵のほうが大きいかもしれない。



これをしばらく使ってみて、
第二の方法については、後日またテストします。
posted by おおおかとしひこ at 19:25| Comment(4) | カタナ式 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
私がいくつかの方法を提案させて頂いたURLはこちらでした。
http://oookaworks.seesaa.net/article/473215424.html#comment
私が連投しすぎて、紛らわしくしてしまいましたね……。

>2 「らない」の離し順によって「らなない」に化けること

この件の再現方法と(苦肉の)回避策がわかりました。
英数モードのほうが再現やすいので、以下はDvorakJを有効にし、日本語入力をオフにした状態で試して下さい。

1.適当なエディタでZXMキーを同時に押す
  →mxmzが入力される(「な」キーの重複入力の再現)
  ※私の環境だとm.k(らない)の3キー同時押しでは再現しないので、
   使用しているキーボードによるのかもしれません。
   おおおかさんの環境でM.Kの同時押しがm.mkになるようなら、そちらでお試しください。

2.薙刀式v12英数.txt の58行目と64行目と99行目の+を-にする。
3.DvorakJを再起動すると、キーの重複入力がなくなる。

どうやら、編集モードの (+32[ の + が悪さしているようです。
この部分を-にすることでおそらくキー入力の重複はなくなりますが、編集モードの入力がシビアになるので悩ましいところです。

+の同時押しの双方向性がないものについては問題が根深そうですが、もう少し調べてみます。
Posted by ngg at 2020年01月28日 00:01
>nggさん

コメントのリンクは修正しておきました。
すいませんです。

さて、色々ためすと、
非常に複雑な挙動のようです。

まず。発表したファイルでなにも弄らない状態。
英数モード
.mk(バグ無し)、mxmz(バグあり)
カナモード
らなない(バグあり)、ぴほ(バグ無し)
という逆の結果に。
いずれもm(な)を離さずに終えた場合。

しかし押す順を変えた場合、
英数モードで、
m.kの順で押し、最後までmを押したままだと、
m.mkに化けます。

英数の該当部を(-32[に変えたらそれはなくなりますが、
どっちがましかでいうと、もといかもです。

同時押しが双方向性になっていないキーの組み合わせ、
同時押しが設計通り双方向性の組みわ合せ、
二回でてしまうような組み合わせの、
三種が混合しているのでは、と推測します。
(それが三キーで混乱しているか)
DvorakJが問題か、AutoHotKeyが問題かは、
深く探っていかないと分からないでしょうねえ。

第二の方法はこれから試します。
とりあえず。
Posted by おおおかとしひこ at 2020年01月28日 16:51
>1 +の同時押しが、双方向性がないものがあること

これの原因と対応策がわかりました。
原因は、薙刀式v12究極版(仮).txtに含まれる「濁」の文字で、この文字が含まれる設定項目が内部的にエラー処理されており、該当する設定項目自体がなかったことにされていました。

「ざ」を例に具体的にみてみます。
「ざ」を出力するために用意されている設定項目は以下の通りですが、「濁」のエラーによって内部的には注釈のように必要な設定が読み込まれていませんでした。

-option-input[
/* シフトキー */
{S} | +shift
{左濁}| +21    ←この行は無視されている
/* 右手の濁音になるキー */
{さ} | +16
]
({左濁}, ({S}{左濁}[ ←この行から
|||||||||||||
| | | | | |ざ| |ず|べ| | |
| | | | |ぐ| | |ヴ|づ| | |
| | | | |だ| | |ぶ| | |
]         ←この行までも無視されている。
/*逆順の定義*/
({さ}, ({S}{さ}[
|||||||||||||
| | | | | | | | | | | |
| | |ざ| | | | | | | | |
| | | | | | | | | | |
]

このため、「U」→「F」の場合、Uが押された(keyDown)段階で、それ以降に続く設定はないと解釈され、Uが離される(KeyUp)か、別のキーが押されるのを待つことなく、「BS」が出力されていました。
一方、「F」→「U」の場合、Fが押された(keyDown)段階では、まだ「ず」などのパターンもあるため、Fが離される(KeyUp)か、別のキー(例えば「O」)が押されるまでは、待機状態を維持していました。

では、なぜ「ず」は「O」→「F」と「F」→「O」のどちらも問題が起きないのかというと、「O」にはまだ「ぇ」のパターンがあるからです。
そのため、Oが押された(keyDown)段階では、まだ待機状態が維持されており、Oが離される(KeyUp)か「F」もしくは「小」が入力されるまで待機状態を維持できていました。
同様にして、「ほ」「し」「ふ」なども半濁音や拗音付きのパターンを持つために、問題が起きなかったようです。


この問題の回避策は以下の通りです。
※{漢字}は問題の元なので、全て置き換えたほうがよさそうです
※また、「濁」の置き換えにより、重複定義が不要になりました

1.薙刀式v12究極版(仮).txtの左の文字列を右の文字列に置換

{右濁}→{RD}
{左濁}→{LD}
{右半}→{RH}
{左半}→{LH}
{小} →{X}

2.いわゆる逆順の定義のみを残して、重複部分を削除する

上記の回避策を施した修正案を以下のURLに置きました。
https://nogu.net/naginata.zip

わかりにくいところがありましたら、ご指摘下さい。
Posted by ngg at 2020年01月28日 20:10
>nggさん

えー。まじでそんな簡単なことだったとは!
可読性を高めるための工夫が仇となってたのか。
(-option-inputの定義部で警告さえ出ていればわかったものを…!)
これでソースコードがかなりスッキリしそうです。
処理速度も上がるでしょう。

漢字を使ってない置換部(編集モードなど)は逆順定義してなくても動いていたりして、
法則性が漢字有り無しにあったとは。

流石です。
それらがクリアになると、その他の問題もスッキリしたりして。
試してみます。
Posted by おおおかとしひこ at 2020年01月28日 22:24
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。