aboutsummaryrefslogtreecommitdiff
path: root/PLUGIN.ja.txt
blob: 26227662c94ddfcd806e15e5eaa3a5b6813734fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
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 から利用する関数
-------------------------

-------------------------------------------------------------------------
void syl_plugin_signal_connect  (const gchar *name, GCallback callback,
                                 gpointer data);

SylPlugin オブジェクト(ライブラリ内部で保持)で利用できるシグナルに
接続します。シグナルを受け取るコールバック関数の仕様は通常の GObject と
同様です。
利用できるシグナルに関してはシグナルの一覧を参照してください。
-------------------------------------------------------------------------
void syl_plugin_signal_disconnect(gpointer func, gpointer data);

syl_plugin_signal_connect() で接続したシグナルを解除します。
-------------------------------------------------------------------------
void syl_plugin_signal_emit(const gchar *name, ...);

SylPlugin オブジェクトのシグナルを発行します。
-------------------------------------------------------------------------
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.h を参照してください。


シグナルの一覧
--------------

* libsylpheed-plugin-0

-------------------------------------------------------------------------
void (* plugin_load)    (GObject *obj, GModule *module);

syl_plugin_load() でプラグインをロードしたときに発行されるシグナルです。
-------------------------------------------------------------------------
void (* plugin_unload)  (GObject *obj, GModule *module);

syl_plugin_unload_all() でプラグインをアンロードしたときに発行される
シグナルです。
-------------------------------------------------------------------------
void (* folderview_menu_popup)  (GObject *obj, gpointer ifactory);

FolderView でコンテキストメニューをポップアップしたときに発行される
シグナルです。
-------------------------------------------------------------------------

* libsylph-0

-------------------------------------------------------------------------
void (* init_done) (GObject *obj)

アプリケーションの初期化が完了した時点で発行されます。
-------------------------------------------------------------------------
void (*app_exit) (GObject *obj)

アプリケーションが終了する時に発行されます。
-------------------------------------------------------------------------
void (*add_msg) (GObject *obj, FolderItem *item, const gchar *file, guint num)

フォルダ item に番号 num のメッセージが追加された時に発行されます。
-------------------------------------------------------------------------
void (*remove_msg) (GObject *obj, FolderItem *item, const gchar *file, guint num)

フォルダ item から番号 num のメッセージが削除される時に発行されます。
-------------------------------------------------------------------------

サンプルプラグイン
==================

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 を終了する