Statistics
| Revision:

root / PLUGIN.ja.txt @ 2184

History | View | Annotate | Download (11.5 kB)

1
Sylpheed プラグイン仕様
2
=======================
3
4
Sylpheed のプラグイン機構の構成は以下のようになっています。
5
6
 +----------+    +----------------------+     +-----------+
7
 | Sylpheed |----| libsylpheed-plugin-0 |--+--| Plug-in A |
8
 +----------+    +----------------------+  |  +-----------+
9
Sylpheed 本体    プラグインインタフェース  |  プラグイン DLL
10
                 ライブラリ             +--+
11
        |        +------------+         |  |  +-----------+
12
        +--------| libsylph-0 |---------+  +--| Plug-in B |
13
                 +------------+               +-----------+
14
                 LibSylph メールライブラリ
15
16
Sylpheed は起動時にプラグインディレクトリにインストールされている
17
プラグイン DLL をメモリにロードします。
18
19
プラグインは libsylpheed-plugin-0 と libsylph-0 ライブラリで
20
提供されている API を通してのみ Sylpheed の機能にアクセスできます。
21
22
プラグイン API には、プラグインが直接呼び出す関数群と、
23
GObject のシグナル機構を利用して、特定のイベントが発生した場合に
24
コールバック関数を呼び出すものの2種類があります。
25
26
プラグイン機構は libsylph/sylmain.[ch] と src/plugin.[ch] で実装されて
27
います。
28
29
30
プラグイン API
31
==============
32
33
Sylpheed から利用する関数
34
-------------------------
35
36
-------------------------------------------------------------------------
37
void syl_plugin_signal_connect  (const gchar *name, GCallback callback,
38
                                 gpointer data);
39
40
SylPlugin オブジェクト(ライブラリ内部で保持)で利用できるシグナルに
41
接続します。シグナルを受け取るコールバック関数の仕様は通常の GObject と
42
同様です。
43
利用できるシグナルに関してはシグナルの一覧を参照してください。
44
-------------------------------------------------------------------------
45
void syl_plugin_signal_disconnect(gpointer func, gpointer data);
46
47
syl_plugin_signal_connect() で接続したシグナルを解除します。
48
-------------------------------------------------------------------------
49
void syl_plugin_signal_emit(const gchar *name, ...);
50
51
SylPlugin オブジェクトのシグナルを発行します。
52
-------------------------------------------------------------------------
53
gint syl_plugin_init_lib        (void);
54
55
libsylpheed-plugin-0 ライブラリの初期化を行います。
56
-------------------------------------------------------------------------
57
gint syl_plugin_load            (const gchar *file);
58
59
プラグイン DLL ファイルをメモリにロードします。
60
-------------------------------------------------------------------------
61
gint syl_plugin_load_all        (const gchar *dir);
62
63
指定したディレクトリ内のプラグイン DLL ファイルをメモリにロードします。
64
-------------------------------------------------------------------------
65
void syl_plugin_unload_all      (void);
66
67
ロードしたすべてのプラグインをアンロードします。
68
-------------------------------------------------------------------------
69
GSList *syl_plugin_get_module_list      (void);
70
71
現在メモリにロードされているプラグインのリストを取得します。
72
GModule 構造体へのポインタのリストが返ります。
73
リストはライブラリ内部で保持しているため、解放できません。
74
-------------------------------------------------------------------------
75
SylPluginInfo *syl_plugin_get_info      (GModule *module);
76
77
プラグインの情報を取得します。情報は SylPluginInfo 構造体で返ります。
78
-------------------------------------------------------------------------
79
gboolean syl_plugin_check_version       (GModule *module);
80
81
プラグインインタフェースのバージョンを比較し、互換性があるかどうかを
82
確認します。バージョンが一致する場合は TRUE 、一致しない場合は FALSE
83
が返ります。
84
-------------------------------------------------------------------------
85
gint syl_plugin_add_symbol              (const gchar *name, gpointer sym);
86
87
ライブラリにシンボル名とそれに関連付けられるポインタ値を登録します。
88
-------------------------------------------------------------------------
89
gpointer syl_plugin_lookup_symbol       (const gchar *name);
90
91
syl_plugin_add_symbol() で登録したシンボルを検索し、ポインタ値を返します。
92
-------------------------------------------------------------------------
93
94
95
プラグインが実装しなければならない関数
96
--------------------------------------
97
98
-------------------------------------------------------------------------
99
void plugin_load(void)
100
101
プラグインのロード時に Sylpheed から呼び出されます。
102
ここでプラグインの初期化処理などを行います。
103
104
-------------------------------------------------------------------------
105
void plugin_unload(void)
106
107
プラグインのアンロード時に Sylpheed から呼び出されます。
108
ここでプラグインの後処理などを行います。
109
110
-------------------------------------------------------------------------
111
SylPluginInfo *plugin_info(void)
112
113
プラグインの情報を格納する構造体を Sylpheed に返すための関数です。
114
通常は静的な構造体へのポインタを返します。
115
116
-------------------------------------------------------------------------
117
gint plugin_interface_version(void)
118
119
プラグイン API のインタフェースのバージョンを Sylpheed に返すための
120
関数です。プラグインでは通常は定数 SYL_PLUGIN_INTERFACE_VERSION を返し、
121
Sylpheed ではこの値を Sylpheed 本体側の値と比較し、互換性のあるバージョン
122
かどうかをチェックします。 Sylpheed 本体のプラグインインタフェースバージョン
123
はプラグインのプラグインインタフェースバージョン以上である必要があります。
124
また、インタフェースバージョンのメジャーバージョンが異なる場合も互換性は
125
なくなります。
126
127
例1: Sylpheed のプラグインインタフェースバージョンが 0x0102 で
128
     プラグインのプラグインインタフェースバージョンが 0x0100 の場合 OK
129
例2: Sylpheed のプラグインインタフェースバージョンが 0x0102 で
130
     プラグインのプラグインインタフェースバージョンが 0x0103 の場合 NG
131
132
-------------------------------------------------------------------------
133
134
135
プラグインから利用する関数
136
--------------------------
137
138
関数の一覧は plugin.h を参照してください。
139
140
141
シグナルの一覧
142
--------------
143
144
* libsylpheed-plugin-0
145
146
以下のシグナルは syl_plugin_signal_connect() を呼び出して使用します。
147
148
例: syl_plugin_signal_connect("plugin-load", G_CALLBACK(plugin_load_cb), data);
149
150
-------------------------------------------------------------------------
151
void (* plugin_load)    (GObject *obj, GModule *module);
152
153
syl_plugin_load() でプラグインをロードしたときに発行されるシグナルです。
154
-------------------------------------------------------------------------
155
void (* plugin_unload)  (GObject *obj, GModule *module);
156
157
syl_plugin_unload_all() でプラグインをアンロードしたときに発行される
158
シグナルです。
159
-------------------------------------------------------------------------
160
void (* folderview_menu_popup)  (GObject *obj, gpointer ifactory);
161
162
FolderView でコンテキストメニューをポップアップしたときに発行される
163
シグナルです。
164
-------------------------------------------------------------------------
165
166
* libsylph-0
167
168
以下のシグナルは g_signal_connect() の第一引数に syl_app_get() で得られる
169
GObject を渡して使用します。
170
171
例:
172
173
void init_done_cb(GObject *obj, gpointer data)
174
{
175
    ...
176
}
177
178
    g_signal_connect(syl_app_get(), "init-done", G_CALLBACK(init_done_cb),
179
                     data);
180
181
-------------------------------------------------------------------------
182
void (* init_done) (GObject *obj)
183
184
アプリケーションの初期化が完了した時点で発行されます。
185
-------------------------------------------------------------------------
186
void (* app_exit) (GObject *obj)
187
188
アプリケーションが終了する時に発行されます。
189
-------------------------------------------------------------------------
190
void (* add_msg) (GObject *obj, FolderItem *item, const gchar *file, guint num)
191
192
フォルダ item に番号 num のメッセージが追加された時に発行されます。
193
-------------------------------------------------------------------------
194
void (* remove_msg) (GObject *obj, FolderItem *item, const gchar *file,
195
                     guint num)
196
197
フォルダ item から番号 num のメッセージが削除される時に発行されます。
198
-------------------------------------------------------------------------
199
void (* remove_all_msg) (GObject *obj, FolderItem *item)
200
201
フォルダ item からすべてのメッセージが削除されるときに発行されます。
202
-------------------------------------------------------------------------
203
void (* remove_folder) (GObject *obj, FolderItem *item)
204
205
フォルダ item が削除されるときに発行されます。
206
-------------------------------------------------------------------------
207
void (* move_folder) (GObject *obj, FolderItem *item, const gchar *old_id,
208
                      const gchar *new_id)
209
210
フォルダ item が old_id から new_id に移動(リネーム)されるときに
211
発行されます。 old_id, new_id はフォルダ識別子文字列です。
212
-------------------------------------------------------------------------
213
void (* folderlist_updated) (GObject *obj)
214
215
フォルダ情報が変更され、フォルダリストを格納した folderlist.xml ファイルが
216
更新されたときに発行されます。
217
-------------------------------------------------------------------------
218
219
220
サンプルプラグイン
221
==================
222
223
plugin/test にサンプルプラグインがあります。このプラグインは
224
make install ではインストールされません。インストールするには
225
plugin/test ディレクトリに入って make install-plugin を実行してください。
226
227
test プラグインは Sylpheed プラグインの基本的な構造に加え、以下の処理を
228
行います。
229
230
- ロード時に標準出力に "test plug-in loaded!" という文字列を出力
231
- フォルダの一覧を取得し、標準出力に表示
232
- Sylpheed のバージョン文字列を取得し、標準出力に表示
233
- メインウィンドウを取得し、前面に出す
234
- 「ツール」メニューに「Plugin test」メニュー項目を追加
235
- 「Plugin test」メニューを選択すると、「Click this to quit」という
236
  ボタンのみのウィンドウを表示し、クリックすると Sylpheed を終了する
237
238
239
ライセンスについて
240
==================
241
242
Sylpheed 本体のライセンスは GPL であるため、 Sylpheed から動的に
243
読み込まれるプラグイン DLL は、 GPL の規定に基づき、 GPL または
244
GPL と互換性のあるライセンス(修正 BSD ライセンスなど)である必要が
245
あります。
246
247
プラグインに商用ライセンスなど他のライセンスを適用したい場合は、
248
そのモジュールを独立した実行ファイルにして、 DLL とプロセス間通信で
249
連携して動作させる必要があります。