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


半期 四半期 全カテゴリ

新・なまず日記


2009-01-27 [火]

_ [xfumble] キーマクロシステムにどれだけ工数かけてんだよ!



数引数とか、viのピリオドによる繰り返しとか、もちろんemacsのキーマクロ定義なんかを実装するために、この間からずーっと、キーマクロシステムを実装してるわけなんだが。これが結構難しくてね。

xfumbleはviやEmacsみたいに、一つのアプリに閉じるもんじゃない。デスクトップ全体のキーイベントを乗っ取れなきゃ。じゃないと、作ってる意味がない。だから、キーマクロも、アプリや、デスクトップのメニュー操作なんかをまたがって定義できるようにしてるわけ。まず、ここが難しかった。これを突破するために、キーイベント処理系を根本的に見直したよ。で、なんとかなった。

現在のxfumbleは、例えば、calc(excelみたいな奴)にファイル名を並べて書いておいて、thunderbirdを開いて、calcからファイル名の一つをコピーして、それをファイル名として、thunderbirdの一つのメールをファイルとしてセーブする、なんて一連の操作をキーマクロとして定義できる。これ、結構おもしろいよ。マクロ実行用のキーを押すだけで、一連の操作を勝手にやってくれるんだから。

他にも、GNOMEメニューを開いて、ログアウトパネルを出す、なんてキー操作をマクロ定義できる。キー一発でログアウトパネルを出せる。どーだい、イカしてるだろ?

で、いまやってるのは、「多重キーマクロ実行」って奴。キーマクロの再生を含むキーマクロを定義する、ってわけ。ちょっとわかりにくいか?例えば、さっきのcalcからファイル名をコピーしてthunderbirdのメールをセーブする、なんて操作で、例えば、50件のメールを、全部ファイルとしてセーブするなんてとき。いくら一連の操作をキーマクロで定義したとしても、50回もマクロ実行キーを押すのは面倒だろ?だから、数引数機能を実装してるんだよ。Emacs風キーバインドだったら、Ctrl-u 50 Ctrl-x e、と打つだけで、50回のマクロ実行を行う、なんてのを作ってるわけ。このとき、内部的には、"Ctrl-u 50"の後のキー操作("Ctrl-x e")をマクロ定義して、それを50回ループさせるってわけ。ほら、そうなると、マクロ実行("ctrl-x e")が、別のマクロ定義を実行する、ってことになるだろ?

でもこれが難しくてさ。いや、別に難しくはないんだよな。事前に十分に設計しておいたら。ハッキリいって、事前設計が足りてなかった。切り込んでは撤退し、また切り込んでは撤退し、なんてことを繰り替えしている。

今朝も、「もうそろそろゴールが見えてきた」なんて思ってたら、「あ、ヤベ、やり直し。ちくしょう、こんなこと、最初っからわかってただろうがよぉオレ!いい加減にしろよオレ!」と、オレの頭の悪さに頭に来てるオレ。

ま、つーことで、自分のマヌケな頭を呪いつつ、しかしこのマヌケな頭が動いてくれないとなんにも作れないんだしなぁ、なんて思いながら開発してる今日この頃です。
[]