A Day in the Life

2009-04-02

vimperator + はてブ拡張は LDR に一部対応

あ、してたんだった。c のはてブ追加を LDR だと現在見ている記事のエントリで開く。vimp でマッピングしてるため、パススルーモードだときかないのでなので、feedSomeKeys2.js 使ってないとうまく使えないという…。(vimp で LDR 見てる人はたぶん feedSomeKeys.js 使っている前提)

現在どのエントリーを見てるかの判定は、LDR のように API があるか、LDRize の microformat を使ってマッチしていたらたぶんこの記事を見てる、というのは解るんだけど、もっと汎用的に落とし込めないかなー。vimp の hints は汎用的と云えば汎用的で何にでも使えるんだけど、もうちょっとインテリジェンスなマッチというか。

Firefox 拡張開発にあたり、使った拡張や参考になった拡張など

いろいろな方の書かれた Firefox 拡張のドキュメント・ソースコードが大変参考になったため、自分も書いておく。誰かの Firefox 拡張開発の参考になれば。

入れた拡張開発用拡張

いろいろ使ってみたけど、最後まで残っていた開発用拡張

  • DOM Inspector
    • 基本というか、これだけで割と事足りるかというか。Chrome の Inspect の方法や、その他基本的な使い方を覚えると大変便利
  • QuickRestart :: Firefox Add-ons
    • Ctrl+Alt+R で再起動で多用。Ctrl+N の別ウィンドウで開くでは、キャッシュによって挙動が意図しなくなったり、jsm がリロードされなかったりするので。マシンがそれなりでメモリが結構あると再起動がすぐ終わるので特に苦にならない。
  • Console2 :: Firefox Add-ons
    • Warning/XML/CSS なんかをフィルタリングで切れ、かつフォントが小さめで視認性が高く、Error/Message を同時に表示できるのでとても重宝。
  • SQLite Manager :: Firefox Add-ons
    • 最初のころはかなりお世話に。最後の方は sqlite3 入れてコマンドから直接使うようになってしまった。SQLite 扱う拡張や、Places のデータを使う拡張なら入れておけ的。
  • UxU - UnitTest.XUL - ClearCode Inc.
    • 拡張用のテストツール。xUnit 互換だし、非同期テストを yield を利用してうまく行えたり使いやすい。はてブ拡張のテストカバレッジ率は10%ぐらいな気がするけど(というかどう実装しても良いのかよくわからないものテストなんて書けるか!)、Pure JS 実装の単体テストではめちゃくちゃお世話になった。

ドキュメント

基本 MDC。google で mdc keyword / mdc xul keyword / mdc xpcom keyword / site:developer.mozilla.org keyword で検索、日本語のページ無かったら英語ページを見る。JS のメソッド名, インターフェイス名からとりあえず検索。

のグリモン使ってた。

あとインターフェイスについては http://www.oxymoronical.com/experiments/apidocs/ を時々参照。xulplanet はなんかちょうど良い(悪い)タイミングで落ちていたので見れなかった。

参考になった拡張・ソース

  • なにはともあれ Firefox 本体
    • 3.1 beta2 時点のソースコードを hg で落として、mozilla-central/browser を git に突っ込んでた。git に突っ込むのは git grep しまくるため。
    • DOMInspector で要素や実装を調べて、ソースレベルで調べたければ git grep する、という流れ
    • utilityOverlay.js ( chrome://browser/content/utilityOverlay.js ) は browser.js ぐらい重要だと思うので読むべき。getTopWin / openUILink とか知らなくて実装しようとしてしまった。
  • Piro たんの XUL 全般 ( 特に XUL/Migemo を参考にした )
    • http://piro.sakura.ne.jp/xul/xul.html
    • https://www.cozmixng.org/repos/piro/
    • コード的にトリッキーなことをしておらず、とても読みやすい。さすが長年拡張を作っているだけあってポイントを押さえている。またどうしてもバットノウハウで回避しなくてはならない場合などの対策もてんこ盛りで大変参考に!しかもほとんどの拡張をメンテし続けるのは尊敬。
  • Tombloo
    • いろいろなテクニックを特にローダー周りで行っているため、してるため最初はどう読んで良いか解らなかった
    • Database.js は自分が見たコードの中では、一番 chrome 権限でうまく SQLite を ORM として抽象的に扱えるライブラリだと思う。SQLite を拡張で使うなら利用しない手はない。
    • getter/setter もきちんとコピる extend 周り、utility 周りも必読

よく初心者向けドキュメントに書いてあるけど全然使わない関数

dump()。コンソール見るのめんどいし、Fx 3 以降なら Application.console.log() が大体のコンテキストですぐ使えるし…。

その他・開発にあったら便利な参考にならない事柄

  • Firefox に詳しい人
    • となりに座っていた nanto_terapad さんと一緒に実装進めてたので、解らないことをききまくれた。超幸運というか、nanto_terapad さんがいなかったらどうなっていたことやら…。

はてなブックマーク拡張を vimperator で使う

追記・github ページにドキュメントを書いた。

はてなブックマーク Firefox Addon では、vimperator plugin を同梱してるので、vimperatorrc に一行書くと vimperator からある程度利用できるようになる。

javascript if (typeof hBookmark != 'undefined') liberator.loadScript('chrome://hatenabookmark/content/vimperator/plugin/hatenabookmark.js', {__proto__: this});

hints の c/C が追加されるのと、nnoremap の c/C にはてブ編集パネル表示、コメントビュアートグルが標準ではマッピングされる。また :hb / :hbt コマンドが加わる。

if (typeof hBookmark) はどう考えても真ですね…修正しました。thx anekos!

liberator.loadScript (実体は SubScriptLoader ) に chrome スキームで渡すとその js をロードし、第二引数で {__proto__: this} を渡すと、vimperator のコンテキストで評価されるためうまくロードされる。

また、chrome の JS プラグインをロードする前に

javascript <{
    hintsAdd     : 'c',
    hintsComment : 'C',
    add          : ['c'],
    comment      : ['C'],
};
EOF

とか書いておくと、それぞれ上書きされる。空を指定すれば hints や nnoremap を上書きしなくなる。hb コマンドでは、はてブ拡張経由で検索してとってくる。こんな感じ。

f:id:secondlife:20090402155638p:image

バグとかその他 vimp での欲しい機能があれば fork して pull request もしくは適当に gist とかに張ってくれれば、大体の場合取り込むと思います。

あと直前に github に上げたタイミングで標準 vimp カラースキームでカウンターが見れない問題を教えてくれた mattn thx! 標準カラースキームで使ってなかったから気づいてませんでした。

記事の一覧 >