愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

Delicious BookmarksのFirefox4.0対応、というか主にVimperator3.0対応まとめ

べ、別にFirefox4.0がリリースされたからこんな記事書いてるんじゃないんだからねっ!

あんたのことなんて待ってないし、今頃迎えに来てくれたってちっとも嬉しくないんだから!バカ!バカ!

とりあえずadd-on本体をぶっ込む

それはさておき、僕はDelicious Bookmarks (+ Vimperator)で楽しいbookmark生活を送っているわけですが、残念なことにDelicious Bookmarks公式のadd-onは(2011年3/23現在)Firefox4.x系に対応しておりません。

なのでとりあえずFirefox4.0にDelicious Bookmarksをぶっ込まないといけないわけですが、これ自体はinstall.rdfとかいじらなくてもAdd-on Compatibility Reporterでいけます。


Add-on Compatibility Reporter
https://addons.mozilla.org/ja/firefox/addon/add-on-compatibility-reporter/


前までこういう目的には Nightly Tester Tools (https://addons.mozilla.org/ja/firefox/addon/nightly-tester-tools/) を使ってたんですが、4.0RC1のあたりで互換性チェックの仕組みがもう一枚加わったらしく、Nightly Tester Toolsでは通らなくなったのでこっちを使っています。ちなみに、通らなかったのは僕の夢かもしれないし、もう既に通るように修正がなされているかもしれません。

Add-on Comなんとか を使うとFirefox4.系互換でないadd-onを突っ込めるようになりますが、モノによっては起動しなくなることもある(少なくともNightlyはあった)と思うのであまり強くおすすめはしません。

一般的に、「Firefox4.0にしたけど俺のお気に入りのadd-onが動かねぇぞゴルァ!」ってなった時に試すべきことは


1. Mozilla公式でなく、githubのリポジトリや開発者のサイトなどに行って、対応版がないか探す(例えばmozreplは4.0公式リリース前からgithubで対応版がforkされてました)

2. あきらめて対応を待つ

3. Add-on Compatibility Reporterとかに頼る

4. 自力でぶっ込む

5. 自力で対応させる


の順なんじゃないかなー、と。

Vimperatorの対応pluginを動くようにする

add-onだけぶっ込んだところでVimperatorと連携できないと何の意味もないので、対応するplugin(delicious_search.js)をFirefox4.0で動くようにしないと、と思ったけどしばらく前の自分がしていたのでここはOK

http://github.com/zentooo/rc/blob/master/.vimperator/plugin/delicious_search.js


vimpr/vimperator-pluginsにpatchを投げたので、マージされた暁にはここから取れるようになります。


vimpr/vimperator-plugins
http://github.com/vimpr/vimperator-plugins



ちなみにdirect_bookmark.jsは新しめのものであればそのまま動くと思います。

Delicious Bookmarksのバーを隠す

Vimperatorをユーザにはツールバーを全部隠して目隠しプレイをしている人も多いかと思いますが、僕もそうです。

当然Delicous Bookmarksのツールバーも隠すような設定(set go=)を行っていたのですが、Vimperator3.0系になってこの辺のオプションが変更になり、かつDeliciousのツールバーは「管轄外」の存在となっているようで.vimperatorrc

set gui=tabs

と書いてもうまいこと隠れてくれない、という残念な事態になってしまいました。


というようなことをTwitterでつぶやいていると、Vimperator界のQBことid:teramakoさんが



という助言をくれたので、うまいことDeliciousのツールバーが隠せるようになりましたよと。


やり方だけ先に書くと、.vimperatorrcに以下を追記しておくといけます。(実はこれだけでは隠れず、起動した後:set gui=tabs,nodelicious とやる必要があります。tabのみ表示したい場合。)

js <<EOM
config.toolbars.delicious = [["ybToolbar"], "Delicious"];
EOM

せっかくなのでVimperatorの中身を見てみると、どうやらliberator.jsの1194〜1219行目あたりで、config.toolbars.hogehoge[0]に入っているidsでDOMをなめていって(下のコードで出てくる変数toolbarsの中身はconfig.toolbars)

                            let toolbarName = action.replace(/^(no|inv)/, ""); 
                            let toolbar = toolbars[toolbarName];
                            if (toolbar) {
                                let ids = toolbar[0] || [];
                                ids.forEach(function (id) {
                                    let elem = document.getElementById(id);
                                    if (!elem)
                                        return;

                                    let collapsed = false;
                                    if (action.indexOf("no") == 0)
                                        collapsed = true;
                                    else if (action.indexOf("inv") == 0) { 
                                        if (typeof(actions[id]) == "boolean")
                                            collapsed = !actions[id];
                                        else {
                                            let hidingAttribute = elem.getAttribute("type") == "menubar" ? "autohide" : "collapsed";
                                            collapsed = !(elem.getAttribute(hidingAttribute) == "true");
                                        }
                                    }        
                                    else 
                                        collapsed = false;
        
                                    actions[id] = collapsed; // add the action, or change an existing action
                                });
                            }        

set gui=nohogehoge, ...の場合にFirefox4.0以降ではwindow.setToolbarVisibility(elem, false)を呼び、ない場合は他で代用しているようですね。

                        if (window.setToolbarVisibility)
                            window.setToolbarVisibility(elem, !collapsed);
                        else if (elem.getAttribute("type") == "menubar")
                            elem.setAttribute("autohide", collapsed);
                        else
                            elem.collapsed = collapsed;


ちなみに、Delicious Bookmarks add-onで追加されるツールバーのidを調べる必要があったんだけど

chrome://browser/content/browser.xul

Firefoxで上のリンクを開くとXUL含めたwindow全体がWebページとして開けるのでidはすんなり分かったんですが、もっとうまい方法がありそうな。

対応したけれども

Delicious自体の未来があまり明るくなさそうなので、add-on or Web APIがあって、今後しばらくは安泰そうで、タグから引けるブックマークサービスにそのうち乗り換えた方がいいかもしれないですね。