Sylpheed プラグイン仕様 ======================= Sylpheed のプラグイン機構の構成は以下のようになっています。 +----------+ +----------------------+ +-----------+ | Sylpheed |----| libsylpheed-plugin-0 |--+--| Plug-in A | +----------+ +----------------------+ | +-----------+ Sylpheed 本体 プラグインインタフェース | プラグイン DLL ライブラリ +--+ | +------------+ | | +-----------+ +--------| libsylph-0 |---------+ +--| Plug-in B | +------------+ +-----------+ LibSylph メールライブラリ Sylpheed は起動時にプラグインディレクトリにインストールされている プラグイン DLL をメモリにロードします。 プラグインは libsylpheed-plugin-0 と libsylph-0 ライブラリで 提供されている API を通してのみ Sylpheed の機能にアクセスできます。 プラグイン API には、プラグインが直接呼び出す関数群と、 GObject のシグナル機構を利用して、特定のイベントが発生した場合に コールバック関数を呼び出すものの2種類があります。 プラグイン機構は libsylph/sylmain.[ch] と src/plugin.[ch] で実装されて います。 プラグイン API ============== Sylpheed から利用する関数 ------------------------- ------------------------------------------------------------------------- gint syl_plugin_init_lib (void); libsylpheed-plugin-0 ライブラリの初期化を行います。 ------------------------------------------------------------------------- gint syl_plugin_load (const gchar *file); プラグイン DLL ファイルをメモリにロードします。 ------------------------------------------------------------------------- gint syl_plugin_load_all (const gchar *dir); 指定したディレクトリ内のプラグイン DLL ファイルをメモリにロードします。 ------------------------------------------------------------------------- void syl_plugin_unload_all (void); ロードしたすべてのプラグインをアンロードします。 ------------------------------------------------------------------------- GSList *syl_plugin_get_module_list (void); 現在メモリにロードされているプラグインのリストを取得します。 GModule 構造体へのポインタのリストが返ります。 リストはライブラリ内部で保持しているため、解放できません。 ------------------------------------------------------------------------- SylPluginInfo *syl_plugin_get_info (GModule *module); プラグインの情報を取得します。情報は SylPluginInfo 構造体で返ります。 ------------------------------------------------------------------------- gboolean syl_plugin_check_version (GModule *module); プラグインインタフェースのバージョンを比較し、互換性があるかどうかを 確認します。バージョンが一致する場合は TRUE 、一致しない場合は FALSE が返ります。 ------------------------------------------------------------------------- gint syl_plugin_add_symbol (const gchar *name, gpointer sym); ライブラリにシンボル名とそれに関連付けられるポインタ値を登録します。 ------------------------------------------------------------------------- gpointer syl_plugin_lookup_symbol (const gchar *name); syl_plugin_add_symbol() で登録したシンボルを検索し、ポインタ値を返します。 ------------------------------------------------------------------------- プラグインが実装しなければならない関数 -------------------------------------- ------------------------------------------------------------------------- void plugin_load(void) プラグインのロード時に Sylpheed から呼び出されます。 ここでプラグインの初期化処理などを行います。 ------------------------------------------------------------------------- void plugin_unload(void) プラグインのアンロード時に Sylpheed から呼び出されます。 ここでプラグインの後処理などを行います。 ------------------------------------------------------------------------- SylPluginInfo *plugin_info(void) プラグインの情報を格納する構造体を Sylpheed に返すための関数です。 通常は静的な構造体へのポインタを返します。 ------------------------------------------------------------------------- gint plugin_interface_version(void) プラグイン API のインタフェースのバージョンを Sylpheed に返すための 関数です。プラグインでは通常 SYL_PLUGIN_INTERFACE_VERSION を返し、 Sylpheed ではこれが Sylpheed 本体側の値と一致するかどうかチェックします。 ------------------------------------------------------------------------- プラグインから利用する関数 -------------------------- シグナルの一覧 -------------- サンプルプラグイン ================== plugin/test にサンプルプラグインがあります。このプラグインは make install ではインストールされません。インストールするには plugin/test ディレクトリに入って make install-plugin を実行してください。 test プラグインは Sylpheed プラグインの基本的な構造に加え、以下の処理を 行います。 - ロード時に標準出力に "test plug-in loaded!" という文字列を出力 - フォルダの一覧を取得し、標準出力に表示 - Sylpheed のバージョン文字列を取得し、標準出力に表示 - メインウィンドウを取得し、前面に出す - 「ツール」メニューに「Plugin test」メニュー項目を追加 - 「Plugin test」メニューを選択すると、「Click this to quit」という ボタンのみのウィンドウを表示し、クリックすると Sylpheed を終了する