AutoHotkey の KeyWait を使用する機能と DvorakJ は併用できるだろうか。そのような問い合わせを受けたので*1、検討してみよう。
以下のスクリプトを実行すれば、当該機能を体験できる。QWERTY 配列でいう a o e u i の位置のキーにフックをかけておいた。それらのキーを 0.5秒以上押し下げていると、ツールチップに時刻と当該キー名を表示する。そうでないとき、つまりキーを押し下げている時間が0.5秒未満ならば、当該キーをそのまま出力する。
wait_sec := 0.5 a:: o:: e:: u:: i:: the_key := Trim(A_ThisHotkey, "$") KeyWait, %the_key%, T%wait_sec% if ErrorLevel { tooltip,% A_Hour ":" A_Min ":" A_Sec "." A_MSec "`n" the_key } else { send,%the_key% } keywait, %the_key% return
DvorakJ を起動している状態で上記のスクリプトを動作させると、上記のスクリプトが優先的に処理される。そのため、 a o e u i のキーをDvorakJ の側はフックできなくなる。DvorakJ で Dvorak 配列を使用しているならば、o e u i のキーが QWERTY 配列のままとなってしまうわけだ*2。
こういうわけで、DvorakJ と上記のスクリプトは併用しがたいのである。
では、DvorakJ に上記のスクリプトを組み込んでみてはどうだろうか。結論を先に述べるが、こちらも得策ではなさそうである。というのも、この機能を有効にすると、キー入力を素早く入力したときに、動作が緩慢になってしまうのだ。緩慢になるだけならまだしも、時たま、同じ文字が連続して出力されることもある。
以上より、現在のところ、KeyWaitを使用する上記のスクリプトと DvorakJ は併用しにくい。