JetpackでPaste and Goを作ってみた。

Summary

OperaとかGoogleChromeにある、ロケーションバーへの貼り付けと移動を同時に行うやつをJetpack featureで実装した。
GomitaさんのuserChrome.js版「Paste And Go」と比べるとJetpackらしさが分かるかな。

How to

インストールするとロケーションバー(アドレスバー)の右クリックメニュー(コンテキストメニュー)に「Paste & Go」が追加される。
クリップボードにhttp, https, ttp, ttps, ftp, about, chrome, file, javascriptプロトコルから始まる文字列がある場合にPaste & Goすると一発で移動する。
無ければ、その文字列でGoogle検索した場合に一番目にヒットするページに移動する。(I'm Feeling Lucky機能)

オプション設定

これらの変更は、Jetpackの設定画面(アドレスバーにabout:jetpackと入力するか、メニューのツールから開く)
about:jetpack - Installed Featuresで「Paste and Go」のsettingsをクリックすると入力フォームが現れるので値を変えれば保存される。
変更後適用するにはabout:jetpackのページを更新する必要がある。

Download

Mozilla Labs Jetpack - Paste and Go :: jetpack

既にインストールしたfeatureをアップデートする際は一旦featureをuninstallして、さらにpurgeしてから入れ直して下さい。(2010年1月4日)

Source Code


beforeShowで引数をもらってlocalNameで判定してたりするのはonメソッドがXULに対応していないため。詳しい説明はこっち、Menu#jetpack.menu.context.browser - MDC


onメソッドがXULに対応すれば、こんな感じで書けるはず。

jetpack.future.import("menu");
jetpack.future.import("clipboard");
jetpack.menu.context.browser.on("#urlbar").insertBefore({
  label: "Paste & Go",
  command: function() {
    var contents = jetpack.clipboard.get();
    if(/^\s*(?:http|https|ttp|ftp|about|chrome|file):\/\//.test(contents))
      jetpack.tabs.focused.contentWindow.location = contents;
    else
      jetpack.tabs.focused.contentWindow.location = "http://www.google.com/search?btnI=I%27m+Feeling+Lucky&q=" + encodeURI(contents);
  }
}, 5);

感想

Twitterでワカラン太鼓*1を叩いていたらadwさんが現状での対処方法と原因をMDCに書いて教えてくれた*2。感謝!みんなも困ったときは太鼓を叩いてみよう!


参考