del.icio.us IncSearch

Firefox Extension

Japanese / English

del.icio.us(http://del.icio.us/)のブックマークをインクリメンタルサーチするFirefoxのアドオン(拡張機能)です。

本アドオンは、おかげさまでExtend Firefox 2 ContestでRunners Upに選ばれました。

画面イメージ

下記のような機能を持っています。

  • title、notes、tagsからインクリメンタルサーチを行い、一致したブックマークを一覧表示。
  • 複数キーワード(スペース区切り)による絞込み(AND)検索を基本とし、さらにNOT、OR検索を絡めて検索が行える。
  • 一致した文字をハイライト表示。
  • 1ページ10件(設定により件数は変更可能)でページングして表示。ページの移動は、[Ctrl]+[Left]、[Ctrl]+[Right] のショートカットも使用できる。
  • [Ctrl]+[Up]、[Ctrl]+[Down] にてブックマーク(行)を選択/移動し、選択行にて[Ctrl]+[Enter]でブックマーク表示、[Ctrl]+[e]で編集画面の表示が行える。
  • del.icio.usから取得したブックマーク一覧をローカルに保存しておくので、ページを開くたびにdel.icio.usに問い合わせを行うようなことはなく、すぐに検索できる。

下記のGreasemonkey版よりさらに高機能(FirefoxのStorage機能(SQLite)使っており、Greasemonkey版より(多少は)高速なのと、ユーザビリティの改善を実施)となっておりますので、既にGreasemonkey版をご利用の方は、ぜひこちら(Firefoxアドオン版)に乗り換えてみてください。


インストール

Firefox Add-ons 上にて配布しています。下記のURLからインストールしてください。


使用方法

インストール後、Firefoxのメニューから、ツール(T) -> del.icio.us IncSearch を選択すると、検索画面が表示されます。

初回はdel.icio.usのブックマークとの同期化がそのまま行われます。del.icio.usにログインしていない場合には、認証のダイアログが表示されますので、認証を行ってください。

以降は「sync」のリンクを押下することにより、ブックマークの同期化が行われます。

「setting」から、下記の項目を設定可能です。

  • Number of Results:1ページの表示件数(デフォルトは10)。なお、1ページの表示件数は少ない方が、表示速度は速くなります。
  • Size of input area:入力テキストボックスのサイズ(デフォルトは80)。Mac OS Xだとデフォルトでは広くなりすぎるようですので、必要に応じて調整してください。

ブックマークの選択、表示はショートカットを使うことにより、快適に行えます。ショートカットの一覧は下記の通りです。

  • [Ctrl]+[Left] : 前ページに移動
  • [Ctrl]+[Right] : 次ページに移動
  • [Ctrl]+[Up] : 前のブックマークに移動
  • [Ctrl]+[Down] : 次のブックマークに移動
  • [Ctrl]+[Enter] or [Ctrl]+[m] : 選択しているブックマークを開く
  • [Ctrl]+[e] : 選択しているブックマークの編集画面を開く
  • [Ctrl]+[u] : ブックマークの更新(「sync」押下と同じ)
  • [Ctrl]+[s] : 設定変更ウインドウを開く(「setting」押下と同じ)
  • [Ctrl]+[/] : ヘルプウインドウを開く(「help」押下と同じ)

検索はスペース区切りによるAND検索を基本とし、キーワードに対して特定の文字を指定することにより、ORとNOT検索が行えます。

  • キーワードの先頭に"!"をつけることにより、そのキーワードを含まない(NOT)ブックーマークを検索できる。
    例:"!java" といれると"java"という文字が含まれないブックマークが検索されます。
  • "|"により複数キーワードを結合するこよにより、どちらかのキーワードを含む(OR)ブックマークを検索できる。(注:"|"の前後にスペースを入れないで続けて入力してください)
    例:"java|ruby" といれると"java"もしくは"ruby"という文字を含むブックマークが検索されます。

user-extension.jsを使ったカスタマイズ

Firefoxのプロファイルフォルダ配下のdelicious_incsearchフォルダ内にuser-extension.jsという外部JSファイルが作成されます。

プロファイルフォルダについては、下記をご参照ください。(OSによって異なります)

user-extension.jsは、検索画面で読み込まれるので、user-extension.jsにJavaScriptによってプログラムを書くことにより、本拡張をカスタマイズできます。

初期状態では、下記のようになっており、コメント外す(2行目と最終行を削除する)と、被ブックマーク数を表示するようになります。

// Sample: show bookmark count
/*
(function(){
  // http://www.onicos.com/staff/iz/amuse/javascript/expert/md5.txt
  var md5_hex=(function(){var MD5_T=[0x00000000,0xd76aa478,0xe8c7b756,0x242070db,0xc1bdceee,0xf57c0faf,0x4787c62a,0xa8304613,0xfd469501,0x698098d8,0x8b44f7af,0xffff5bb1,0x895cd7be,0x6b901122,0xfd987193,0xa679438e,0x49b40821,0xf61e2562,0xc040b340,0x265e5a51,0xe9b6c7aa,0xd62f105d,0x02441453,0xd8a1e681,0xe7d3fbc8,0x21e1cde6,0xc33707d6,0xf4d50d87,0x455a14ed,0xa9e3e905,0xfcefa3f8,0x676f02d9,0x8d2a4c8a,0xfffa3942,0x8771f681,0x6d9d6122,0xfde5380c,0xa4beea44,0x4bdecfa9,0xf6bb4b60,0xbebfbc70,0x289b7ec6,0xeaa127fa,0xd4ef3085,0x04881d05,0xd9d4d039,0xe6db99e5,0x1fa27cf8,0xc4ac5665,0xf4292244,0x432aff97,0xab9423a7,0xfc93a039,0x655b59c3,0x8f0ccc92,0xffeff47d,0x85845dd1,0x6fa87e4f,0xfe2ce6e0,0xa3014314,0x4e0811a1,0xf7537e82,0xbd3af235,0x2ad7d2bb,0xeb86d391];var MD5_round1=[[0,7,1],[1,12,2],[2,17,3],[3,22,4],[4,7,5],[5,12,6],[6,17,7],[7,22,8],[8,7,9],[9,12,10],[10,17,11],[11,22,12],[12,7,13],[13,12,14],[14,17,15],[15,22,16]];var MD5_round2=[[1,5,17],[6,9,18],[11,14,19],[0,20,20],[5,5,21],[10,9,22],[15,14,23],[4,20,24],[9,5,25],[14,9,26],[3,14,27],[8,20,28],[13,5,29],[2,9,30],[7,14,31],[12,20,32]];var MD5_round3=[[5,4,33],[8,11,34],[11,16,35],[14,23,36],[1,4,37],[4,11,38],[7,16,39],[10,23,40],[13,4,41],[0,11,42],[3,16,43],[6,23,44],[9,4,45],[12,11,46],[15,16,47],[2,23,48]];var MD5_round4=[[0,6,49],[7,10,50],[14,15,51],[5,21,52],[12,6,53],[3,10,54],[10,15,55],[1,21,56],[8,6,57],[15,10,58],[6,15,59],[13,21,60],[4,6,61],[11,10,62],[2,15,63],[9,21,64]];function MD5_F(x,y,z){return (x&y)|(~x&z)}function MD5_G(x,y,z){return (x&z)|(y&~z)}function MD5_H(x,y,z){return x^y^z}function MD5_I(x,y,z){return y^(x|~z)}var MD5_round=[[MD5_F,MD5_round1],[MD5_G,MD5_round2],[MD5_H,MD5_round3],[MD5_I,MD5_round4]];var CC=String.fromCharCode;function MD5_pack(n32){return CC(n32&0xff)+CC((n32>>>8)&0xff)+CC((n32>>>16)&0xff)+CC((n32>>>24)&0xff)}function MD5_unpack(s4){return s4.charCodeAt(0)|(s4.charCodeAt(1)<<8)|(s4.charCodeAt(2)<<16)|(s4.charCodeAt(3)<<24)}function MD5_number(n){while(n<0)n+=4294967296;while(n>4294967295)n-=4294967296;return n}function MD5_apply_round(x,s,f,abcd,r){var a,b,c,d,kk,ss,ii,t,u;a=abcd[0];b=abcd[1];c=abcd[2];d=abcd[3];kk=r[0];ss=r[1];ii=r[2];u=f(s[b],s[c],s[d]);t=s[a]+u+x[kk]+MD5_T[ii];t=MD5_number(t);t=((t<<ss)|(t>>>(32-ss)));t+=s[b];s[a]=MD5_number(t)}function MD5_hash(data){var abcd,x,state,s,len,index,padLen,f,r,i,j,k,tmp;state=[0x67452301,0xefcdab89,0x98badcfe,0x10325476];len=data.length;index=len&0x3f;padLen=(index<56)?(56-index):(120-index);if(padLen>0){data+="\x80";for(i=0;i<padLen-1;i++)data+="\x00"}data+=MD5_pack(len*8);data+=MD5_pack(0);len+=padLen+8;abcd=[0,1,2,3];x=new Array(16);s=new Array(4);for(k=0;k<len;k+=64){for(i=0,j=k;i<16;i++,j+=4){x[i]=data.charCodeAt(j)|(data.charCodeAt(j+1)<< 8)|(data.charCodeAt(j+2)<<16)|(data.charCodeAt(j+3)<<24)}for(i=0;i<4;i++)s[i]=state[i];for(i=0;i<4;i++){f=MD5_round[i][0];r=MD5_round[i][1];for(j=0;j<16;j++){MD5_apply_round(x,s,f,abcd,r[j]);tmp=abcd[0];abcd[0]=abcd[3];abcd[3]=abcd[2];abcd[2]=abcd[1];abcd[1]=tmp}}for(i=0;i<4;i++){state[i]+=s[i];state[i]=MD5_number(state[i])}}return MD5_pack(state[0])+MD5_pack(state[1])+MD5_pack(state[2])+MD5_pack(state[3])}function MD5_hexhash(data){var i,out,c;var bit128=MD5_hash(data);out="";for(i=0;i<16;i++){c=bit128.charCodeAt(i);out+="0123456789abcdef".charAt((c>>4)&0xf);out+="0123456789abcdef".charAt(c&0xf)}return out}return MD5_hexhash})();

  IncSearch.prototype.addTitleText = function(bookmark, patternList) {
    var md5 = md5_hex(bookmark.url);
    return [
      '&nbsp;',
      '<a href="http://del.icio.us/url/', md5, '" target="_blank">',
      '<img style="border:none;margin:0" ',
      'src="http://del.icio.us/feeds/img/savedcount/', md5, '?aggregate"></a>'
    ].join('');
  }
})();
*/

上記で変更しているIncSearchクラスの内容は、下記のURLで参照できます。

  • chrome://delicious_incsearch/content/incsearch.js

user.cssによる画面デザインのカスタマイズ

Firefoxのプロファイルフォルダ配下のdelicious_incsearchフォルダ内にuser.cssという外部CSSファイルが作成されます。

このファイルにスタイルシートを記載することにより、画面デザインを好みに合わせて変更できます。


変更履歴

ver 1.11.0 (2009/03/10)

  • Firefox 3.1 beta に対応。
  • 検索画面を開くショートカットキーを修正(Alt/Option+IからCtrl/Cmd+:へ)。
  • テキストボックスでautocompleteが動作しないよう修正。

ver 1.10.4 (2008/05/18)

  • Firefox 3 RC1 に対応。

ver 1.10.3 (2008/04/13)

  • Linux上で動作しない問題に対処。

ver 1.10.2 (2008/04/03)

  • Firefox 3 Beta5 に対応。

ver 1.10.1 (2008/03/11)

  • Firefox 3 Beta4 に対応。

ver 1.10.0 (2008/02/24)

  • Firefox 3 Beta3 に対応。

ver 1.9.1 (2008/02/14)

  • 検索画面を開くショートカットキーを修正(Ctrl/Cmd+IからAlt/Option+Iへ)。

ver 1.9.0 (2008/02/13)

  • user.cssを追加。
  • 編集画面のウインドウサイズ指定を廃止。

ver 1.8.0 (2008/02/12)

  • 検索画面を開くショートカットキーを追加。

ver 1.7.0 (2008/02/04)

  • ツールバーアイコンを追加。

ver 1.6.0 (2007/12/10)

  • ユーザ拡張機能(user-extension.js)追加。
  • "|!"と入力するとエラーとなる問題対処。
  • 文字列結合処理のパフォーマンス改善。

ver 1.5.0 (2007/11/21)

  • 選択列の背景色を変更。

ver 1.4.0 (2007/09/22)

  • ヘルプを追加。

ver 1.3.0 (2007/08/08)

  • NOT、OR検索機能を追加。
  • %,_が検索できない問題対処。(特殊文字のエスケープ漏れ)

ver 1.2.1 (2007/07/18)

  • ブックマーク更新の際にエラー(HTTPステータスコード:411 Length Required)が発生する問題対処。

ver 1.2.0 (2007/07/17)

  • 「sync」、「setting」に対するショートカットを追加。
  • 入力テキストボックスのサイズを設定変更可能とした。

ver 1.1.0 (2007/07/16)

  • Timeの欄(検索対象ではない)がハイライト表示されてしまう問題対処。
  • 操作性の改善。
    • 「sync」、「setting」のリンク押下にて表示される画面で、入力フォームまたはボタンにフォーカスを置くようにした。
    • 上記の画面から戻る際に、検索用テキストエリアにフォーカスを戻すようにした。

ver 1.0.1 (2007/07/12)

  • Mac OS X + Firefox 2.0.0.4 にて、[Ctrl]+[Enter]が効かない問題対処。([Ctrl]+[m]と区別ができないため、[Ctrl]+[m]でも同じ動作とした)

ver 1.0 (2007/07/11)

  • 行スクロールおよび行(ブックマーク)に対するショートカットを追加。

ver 0.2 (2007/07/07)

  • 「setting」を追加し、表示件数を変更可能とした。

ver 0.1 (2007/07/04)

  • 初回公開。

その他

お問い合わせ、コメント等は下記Blogまたは、Contact からお願いします。