FirePop!

--> Jump to English page.

※PDICをインストールしてあるのにこの画面が出る場合は、PDICが起動しているかどうか確認してください。

■概要

FirefoxやChrome上でPDICを利用するアドオン・拡張機能です。

■機能

・マウスクリックでクリックした単語のポップアップ(DokoPop!のFirefox版/Chrome版みたいなもの)
・マウスを移動するとマウス直下の単語をPDICのメインウィンドウでインクリメンタルサーチ(設定/オプションでチェックする必要あり)

■Download&Install

FirePop! (Firefox用) PDIC Ver.5.10.54以上が必要
できない場合はSourceForgeからダウンロード&インストール

FirePop! (Google Chrome用) PDIC Ver.5.12.12以上が必要

■使い方

・まず、PDICを起動
・必要なら辞書をインストール : File - 辞書設定 - 辞書のインストール - サーバーから探す あとは表示に従って
・Firefox/Chrome上でAlt+右クリックをすると、マウスカーソル直下の単語をポップアップ検索

■著作権

FirePop! Project Team

■技術詳細

FirePop!自体はソースコードをみてわかるとおり、非常に簡単です。
※xpi, jarファイルは単なるzipファイルなのでxpiファイルを解凍すればソースコードをすべて見ることができます。
特別な部分は、外部アプリケーションのPDICとの通信です。(詳細は後述)

プロセス間通信

FirefoxがnativeでDDEに対応しているはずはないと思っていたが、XPCOMでもDDE clientを実現しているものが無さそう。
自分でDDE clientをわざわざ作るのも何だし、作っても誰も使わない代物になりそうだし、Firefoxのvupに追従するのも嫌なので、別な方法を検討。

WindowsにはCreateFile() APIによるパイプが可能だが、簡単なアドオンを作ってみたところ未定義のエラーが発生している。CreateFile()を呼んでいるはずだろう・・とソースコードを調べたら、確かにCreateFile()を使用していたが、その直前でCreateDirectory()を呼んでいる。なんて余計なことを!!
それさえなければ素直にパイプでFirefoxとPDICが通信できたのに。。
※ググっていたら似たようなことをやろうとしていた人がMozillaZineに投稿していたがレス無し。

残るは、
・ファイル通信
・自前のXPCOM
・外部アプリ起動
・素直にsocket

→とりあえず、ファイル経由によるDDEコマンドを実装。

以下、PDICの作者より提供されている技術情報。

[TechInfo] ファイル経由によるDDEコマンド for PDIC

※FirePop!とのプロセス間通信として使用されています。

外部アプリケーションからPDICを制御する手段として、DDEがありますが、
DDEが使えない、使うには難しい、という場合のために、ファイル経由でPDICへコマンドを送る機能。
使い方は非常に簡単。

PDICを起動すると、

%TEMP%\pdic-dde.d\in

というファイルが作成されるので、そのファイルにテキストを書き込むだけ。
(%TEMP%はテンポラリディレクトリ)
PDICを終了するとこのディレクトリは削除されます。(PDICが起動しているかどうかの判定に使えます)

ファイルの先頭のバイト列により、文字コードを判断
・0xEF 0xBB 0xBFである場合・・・UTF-8
・0xFE 0xFFである場合・・・UTF-16(little endian)
・それ以外・・・Ansi(ShiftJIS)

Format:

[transaction]:[topic],[item],[parameter]

transaction
p - Poke
r - Request(未サポート)
topic, item, parameter
PDICのDDEと同じ定義(PDICに付属のヘルプを参照)

example

p:Dictionary,Open
p:Dictionary,PopupSearch2,take off
※複数のアプリケーションから同じファイルに書き込みを行うと問題があります。
特にセッションは、異なるアプリケーションであっても区別する手段がないため同一となってしまいます。例えば、あるアプリケーションが行ったポップアップ検索の設定が他のアプリケーションにも影響してしまいます。
どれだけこの機能を使われるのかわかりませんし、FirePop!もどれだけ利用してもらえるかわからないため、とりあえず必要最小限の実装にとどめておきます。
(そのほうがFirefoxアドオン側の実装も簡単になるので)

※PDICはpdic-dde.d\inファイルをOSのFindFirstChangeNotification() APIで書き込み待ちしています。変化があると共有可能でOpenFileします。
そのため外部アプリケーションではinファイルへの書き込みはできるだけatomicに行ってください。(だらだら書き込まず、バッファに一度ためて一気にすべて書き出す)
そうしないと、書き込み途中の中途半端なデータでPDICが処理してしまう可能性があります。