blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

キーを長く押すことで処理を行うスクリプトと DvorakJ の併用

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 は併用しにくい。

*1:Twitter / 竹田: @blechmusik 質問なのですが、こちらのサイ ...

*2:aは、QWERTY配列における位置とDvorak配列における位置が合致している。