«前の日記(2009-02-13 [金]) 最新 次の日記(2009-02-17 [火])» 編集
RSS: href="http://endoh-namazu.tierra.ne.jp/diary/index.rdf"


半期 四半期 全カテゴリ

新・なまず日記


2009-02-16 [月]

_ [xfumble] キーマクロ攻防戦



相変わらず、キーマクロ系と格闘してます。腰をすえてジックリとログ解析して、どのイベントでマクロが失敗するのか、それはつまりどういう課題であって、その課題を解決するにはどのような仕組みが有効なのか、そんなのをしぶとく追求する。ある意味王道ですかね。


キーマクロで出力したキーが、xfumbleの用意した機能(例えばそれは、ほかのキーへのフェイク(Ctrl-pをUpとか)かもしれない)を起動したことを確認してから、次のキーを出力しないと、当然、おかしなことになるわけです。人間は、xfumbleの機能を確認しながらキーを叩いているから、そのとおりのキータイプを再現しないと、マクロがなりたたない。


キーマクロがタイプした直近のキーを憶えておいて、それが引き起こす機能を確認してから次のタイプを行わせる、というコードを書いたんだけど、タイプしたキーがXサーバを経由してxfumbleまで届く時間差で、直近のキーではない、別のキーと誤認識するという現象を、ログ解析で発見したです。


なるほどこれが課題かと。それならば、キーマクロがタイプしたキーを、直近だけではなく、すべてFIFOバッファに記録して、すべてのキーをトレースするようにしました。FIFOバッファはRubyの配列クラスでshiftとpushを使えば簡単に作れる。これでようやく、まともに動作できるようになった。


まだエージングが足りてないと思うけど、今のところは、以前とは比べ物にならないくらい、安定して動作してます。キータイプのたんびに、Xサーバとのやりとりをしながらだから、動作は遅いんだけどね。


で、今は数引数の数の記録系をやってる。これと、マクロシステムを組み合わせれば、かなーりviそっくりの動作をさせることができる、はず。


今度こそ、viマニアが満足できるような(検索コマンド系は永久に無理だけどね)、viモードを実現したい。もうちょっとでまたCVSにタグを打つから、ちょっと待ってて。たぶん、今週か来週。レジスタンス2ってゲームにハマらなければ。いやぁ、あれ面白いんだよ!
[]