Japanese | English
諸般の事情で、当分XULプログラミングをやる気力がありません。Firefox2以降に対応したXUL/MigemoをPiro氏が公開されていますので、そちらをお使いください。
MigemoというのはEmacsで動くローマ字のまま
日本語をインクリメンタル検索するためのツールの名前です。MozillaにもFind
As You Typeというインクリメンタルサーチ機能がありますが、残念ながらこれもごく普通のインクリメンタルサーチです。何度となく
「MozillaでMigemoがつかえたらなぁ」というつぶやきがネット上にはこの機能がMozillaに搭載されて以来観測さ
れていま
す(これ以前にもありました。観測できた最古の記録は2002
年4月2月で
す)。某Firefox
スレでも出ました。(dat落ちしているのでま
とめサイトからご覧下さい)そしたらネ申出現の豫感。
作者もわくわくしてきました。そこでだましだましXULでMigemoっぽい動作をする拡張を作っています。
(ちなみに作者はEmacsを触ったことがありません。つまり本家をさわれないので、動作は違う可能性があります。このアプリの動作はfub_net(C/Migemoを使用したインクリメンタルサーチができま
す)が基準となる豫定です。)
※キーボード派の人にはCrossFireも同時に導入することをお勧めします。双
方のリリース版が出たら、まず間違い無く最強のWebブラウザになるだろうと思っています。
7月15日、辞書に不備があったことが分かりました。これ以前にダウンロードした方は、お手数ですが再度ダウンロードしてください。申し訳ございません。更新があったのはma2.txtとza2.txtとmigemocache.txtです。面倒くさい方はxulmigemodic.zipを再度ダウンロードして頂いても構いません。
入れ替えたら動かなくなったとの苦情が寄せられています。入れ替えはしばらく待ってください。原因不明ですが、解決したそうです。お騒がせしました。
念のためXUL/Migemoもバージョンを上げておいたほうがいいかもしれません。起動しなくなってしまったというかたは、とりあえずxulmigemodic_old1.zip(前の辞書)を落としていれなおしてみてください。
Alpha8以前を使っている方は、アップデートする際には辞書とキャッシュもアップデートしてください。Alpha9からキャッ シュの形式が変っています。新しいXUL/Migemoをインストールの後、Firefox/Mozillaを再起動する前に 辞書とキャッシュを入れ替えてください。
拡張は上のリンクをクリックをすればインストールできます。インストールするかどうか、許可を求めるダイアログが出てきますので、許可してください。そのあと、Firefoxの再起動をしましょう。
設定をする前に、辞書ファイルを落として、適当な場所に解凍しておいてください。
さあ、設定を始めましょう。Firefoxの場合はツール(Tools)->拡張(Extensions)から拡張
マネージャ(図1)を開いて、XUL/Migemoの項目をダブルクリックしてください。

Mozillaの場合、編集(Edit)->設定(Preferences)->詳
細(Advanced)->XUL/Migemoを開いてください。図2の位置にあります。

設定画面は出てきましたか?出てこなかったら多分こちらのミスですので掲示板にて知らせてください。

まずDictionaries
Folderで辞書のあるフォルダを指定してください。これがないと始まりません。
AutoStartでは、キーが押された際に自動的にインクリメンタルサーチを開始するか、それとも「/」
を押してからでないとインクリメンタルサーチを開始しないようにするかを設定します。なお、FindAsYouTypeの設定は一切いじっていないので、
FindAsYouTypeを解除するかどうかは別途設定してください。
Enable Timeoutは、何も入力しない状態が続いたらXUL/Migemoをストップするか、それともEscが押されたときやブラウザ画面内のクリックにより明示的にストップされるまで待機するかを設定します。タイムアウトまでの時間は下のTimeout after ???msecで、ミリ秒単位で指定してください。
Start From Viewportは、現在見えている範囲から検索を開始するかを設定します。
Search Only Linksはリンクのみを検索するかを設定します。
AutoStartの場合、普通にキーボードを叩けばOKです。IMEは切ってください。「次を検索」はF4、F3またはCtrl+Gで、
後方検索はShift+F4、Shift+F3またはShift+Ctrl+Gで
す。
AutoStart設定ではない場合、/を押すと検索を開始します。また、\を押すと強制的にリンクのみの検索になります。
XUL/Migemoの正規表現生成機能は外部からも利用できます。window.xulMigemoCore.getRegExp("unko")と
書くだけで正規表現オブジェクトを得られます。(ただし、ブラウザのwindowからのみ。)
現在のところ文字列ではないので注意してください。不都合があるようでしたら仕様変更します。
display:noneされている要素(含script)がページ内にあると挙動不
審になります。対処に困っています。一文字増やすとページの前のほうに逆戻りする現象はこれに起因します。ver0.2.1でたいていのサイトでは起こらなくなりましたが、ゼロではありません。作者はうんこです。うんこ大好きです。おまけに工房です。よって実装にJavaScript厨的センスがふんだんに盛り込まれています。 Migemoを名乗るのが気恥ずかしいです。いまでも時々これでいいんだろうかとおもいます。
キャッシュがないと作者の環境では「ka」の検索で14秒かかります。なのであらかじめこちらで用意したキャッシュを添付してあります。辞書を更新 した場合キャッシュを消して再構築しないといけませんがその際にはかなり待たされるでしょう。もしかしたら辞書からXUL/Migemo用キャッシュを生 成するプログラムを別途配布するかもしれませんが、もしもう作っちゃったよという場合は連絡していただけるとうれしいです。なにせもう JavaScript以外の言語はほとんど忘れてしまったもので。
実は現在のMozillaはでかい正規表現を処理しようとすると強制終了します。なので辞書サイズが大きくなるとどこかで落ちて しまうかもしれません。まあデフォルトの辞書では大丈夫ですが。
基本的にMigemoのページで 事足りると思いますけど、ここではページ内を正規表現で検索したように見せかけるために何をしているかを解説します。
まず、ページ内の検索しなければならない範囲をnsIDOMRangeとして取得します。通常はBody全域を、FindAgainのときは選択範 囲(nsISelection)の終わりからページの最後まで、後方検索のときは選択範囲のはじめからページのはじめまでを取得します。
次にRange.toString()としてRangeを文字列に変換します。そしてローマ字から生成した正規表現でもってこの文字列を検索しま す。
最後に、先ほどヒットしたキーワードでページ内を普通に検索(nsIWebBrowserFindではなくnsIFindを使う)します。
これでページ内検索に正規表現が使えなくともなんとかそれっぽく見せかけることができます。