知我者谓我心忧,不知我者谓我何求。 顺天命者,悲;逆,亡?

pidgin(gaim)插件开发之初级教程

上一篇 / 下一篇  2007-06-11 01:01:26 / 个人分类:备忘

查看( 4225 ) / 评论( 3 )
抛砖引玉之用。发现自己工作以后实在没有时间能像在大学里那样专注于技术了。
.Z%F\5n8X6l0
cl#Ro1Bt!y0 pidgin相信是每个使用linux的朋友的必备工具。如果有兴趣的话,可以自己开发些插件。LUPA开源社区 r`4ter2C
目前计划做一个保存最近联系人的功能。不然在几百个好友里找一个刚给我发消息的人真是很麻烦。
`d5m$mD;\'_p5k;ti0
$\D+td2Jj0 翻译了个开发pidgin插件的入门教程,提供一个骨架(skelecton)源码。
*G+_9H0_f0mcE0 下载pidgin的源码

CODE:

u(y}eoa4h0sudo apt-get source pidgin现有的插件源码在 /pidgin/plugins 目录里,可以参考下,尤其是看看比较简单的 history.c  文件。
;H1Z9X)? o B&ru p0 我们先从hello world开始吧。LUPA开源社区 h*HSE T/jX }[
LUPA开源社区t%hnUG2I$H3~!T
(
}E;XPR$Y-`0 技术基础:LUPA开源社区r I9j4Ci
C语言开发
/A,U'wu_;eI0 automake autoconf 使用LUPA开源社区.u8FK)_;w#jc Lq
)

CODE:LUPA开源社区D w \/dGv

#define PURPLE_PLUGINS        //必须定义LUPA开源社区mUn*j9~+P I
LUPA开源社区 WBT{(W jnn7x
#include <glib.h>
yvh${t7]|3o2W0 #include "notify.h"
kne!q2U'a$Kh0 #include "plugin.h"LUPA开源社区 f {2j}(U

Y:}}sB0 #include "version.h"LUPA开源社区E#p@Q&p3uu/h5O kj

s+r D6xXQ0 static gboolean
%z#C7H9|"U$cc0 plugin_load(PurplePlugin *plugin) {
7Suy{2A3l C^(j%L`0 LUPA开源社区$H;|+f2n_8?+NP
    purple_notify_message(plugin, PURPLE_NOTIFY_MSG_INFO, "Hello World!",LUPA开源社区Ek)@hd

Z9f zl.I7f?,{0                         "This is the Hello World! plugin ", NULL, NULL, NULL);
y&x.d(IjZD0
6xZu G:}r0     return TRUE;
)W&EL q h_$o3?0 LUPA开源社区 ?"x9P.y?;}/P8A
}
)Xp!fGoT0 LUPA开源社区1V^c7D!Z|(p)a
static PurplePluginInfo info = {         //插件相关属性的定义
2F,M'~P^rJ _0 LUPA开源社区q%p;glLn
    PURPLE_PLUGIN_MAGIC,           //必须强制定义,没什么解释的。LUPA开源社区$TM.KM't#yz
LUPA开源社区&YV4u b-aE1[&rb*](J
    PURPLE_MAJOR_VERSION,         //帮助libpurple识别插件版本号,  (libpurple是IM的图形控件)
+c9w:s3xa0
;G%Yt;^Z!k0     PURPLE_MINOR_VERSION,LUPA开源社区i _1d*Z X6O ?r;K YA
LUPA开源社区J h#|t)c{
    PURPLE_PLUGIN_STANDARD,     //有四个数值,PURPLE_PLUGIN_UNKNOWN 表示不使用
!w pJ*m#jk#K? [6w0 LUPA开源社区t)c6_ J)Z$wl
//PURPLE_PLUGIN_STANDARD 标准插件
!smD*P9hQq9U;dN0 LUPA开源社区$PIk QzX'G
//PURPLE_PLUGIN_LOADER 为PERL 或者TCL 等语言开发的插件作准备LUPA开源社区r&\8B)iJppv
LUPA开源社区_ Y1DR N
//PURPLE_PLUGIN_PROTOCOL 为各种通信协议准备的 比如QQ插件
'SU A^O0es"rLG}5h$dk0
jn5]%U6m-RT0     NULL,            //是否涉及对界面的控制LUPA开源社区5G'i`V Pd6]

? N&wVk#~-C0     0,                //是否在插件列表里显示LUPA开源社区A'epIh-D I$R
LUPA开源社区E;b2qEI8c.{9|w
    NULL,            //是否采用GlistLUPA开源社区G q%[qkcm:K

R4c1I,M(U%MZ0     PURPLE_PRIORITY_DEFAULT,    //优先级LUPA开源社区.Hj;w1~a@;j'co

b8i AF;T/g(n0     "core-hello_world",    //插件编号,最后面会用到的。
ygF0Az(c0
H cB'r M0
;N6u)y%]1sZc0     "Hello World!",        //插件名称
l)R!RhH;h+i-_}0
m@Z-r!n)vP0     VERSION,                //版本
;_k5Am?0 LUPA开源社区2MK*Ck!B#z

a;_kOW h"B0     "Hello World Plugin",    //插件简介LUPA开源社区A:{!K/VwD?.z

k#Io4p/bMUi0     "Hello World Plugin",   //插件描述LUPA开源社区(k2N|O"V/{$@Yq

9X,d._ Ma d/I3ea0     NULL,                    //插件作者和邮箱等内容
]hzq RZ&r/e0 LUPA开源社区#Q t Rhg~D

iXR`+Z#sg)t0     "http://helloworld.tld",    //插件的联系网站地址LUPA开源社区f+W5s#s@$A'C0^6H

7Y$L,N(u(Iu6F0     plugin_load,            //插件的加载函数,
F)Azn+G0
s,st-aI0     NULL,                //定义插件加载失败时所调用的函数LUPA开源社区7]}/F"A Mv-J&@

_ ^:Y T} kG)z0     NULL,                  //当libpurple销毁本插件时调用的函数LUPA开源社区"pu#h"P1W

F@8s"Ye_.m$Y_0
T&xF3h!r!?X+y+u-mnn0     NULL,            
#[(s#b n JNc!k0 LUPA开源社区a`eE#lq'O
    NULL,LUPA开源社区7Agw_ b

c["ryCc0     NULL,LUPA开源社区9G?;Faus
LUPA开源社区*al0~*Xa2?-X(s
    NULL
z,zN3Ez o]0 LUPA开源社区.V Ko [ F5KsV
};LUPA开源社区{-e c cz2sh:g \
LUPA开源社区9DqG"@5T)L7s;z
static voidLUPA开源社区b_M"h:Y*mv+d*et*Ph

0q![c yw&`/RRZ3z:{0 init_plugin(PurplePlugin *plugin)
#R~I9AP/VtE0 LUPA开源社区G4]Gv:j
{LUPA开源社区X0OEc}QQ7M+L

X-w3t!E}0 }LUPA开源社区N \PU9b{ X
LUPA开源社区|+P LvI J3R9j_ _gv7P
PURPLE_INIT_PLUGIN(hello_world, init_plugin, info);   //加载
以上是一个最基本的插件骨架,加载后会弹出一个提示消息。

TAG:

Sanool和开源的故事--邵炜主题博客....... sanool 发布于2007-06-11 01:06:56
通过 apt-get 得到的源码是干净的源码 不包括开发用的系列脚本
D&C r"KaT        x|开源社区
0m9jNt^;Zo&rLUPA,开源社区,开源,开源联盟,开源论坛,开源信息,开源项目,Open source,linux,软件下载,产业化社区,项目交易,人才库,创业园区,讨论区,紧急援助如果需要的话 只能到官方通过 svn 获得
J!P*}G#PV"D(QLUPA,开源社区,开源,开源联盟,开源论坛,开源信息,开源项目,Open source,linux,软件下载,产业化社区,项目交易,人才库,创业园区,讨论区,紧急援助V_v5F!m
]'k/T*U

svn co https://pidgin.svn.sourceforge.net/svnroot/pidgin pidgin
-\vI0{fuLLUPA开源社区
c*\ B!g'ML#Lwww.lupaworld.com这样 你修改了makefile.am 之后  再 autogen.sh 一下就好了
Fluke@LUPA fluke 发布于2007-06-11 02:21:10
留个脚印。这两天有时间checkout下来看看。LUPA开源社区WiP5R7VW
LUPA,开源社区,开源,开源联盟,开源论坛,开源信息,开源项目,Open source,linux,软件下载,产业化社区,项目交易,人才库,创业园区,讨论区,紧急援助RjET8I
sanool的idea不错,这个插件挺实用的。
someone someone 发布于2007-06-11 09:55:32
当你发现,自己呼吁大家让银行开放插件时候,LINUX却无人接手
5d,h*H j'a6sLUPA开源社区当你呼吁大家开发linux密码管理小工具,却无人迎战#C'pp_M2jN
中国最全面的开源推进联盟社区,围绕自由、开源软件与代码为研究主题.开源软件,开源论坛,开源信息,开源社区,开源项目, 开源blog,开源系统,开源新闻系统,信息发布系统,开源,.net 开源系统,Open source;oi6r];m[$~k y B
那么不如作点实际事情:

FJI-[?#cn|开源社区
    培养更多的人,让他们掌握工具,
RS.se.Hr,pX)A|开源社区    今天大学毕业的人,至少会打开vc  IDE,不用写一句代码,自动编译会有个程序运行
H&P`&Jf7YLUPA开源社区    但是不会有大学生毕业后能编译一个linux下的运行NFS系统。
2h1oL2xbwww.lupaworld.comwww.lupaworld.com zsPB
D_k

if you have sentiment sail to me : someone@lupaworld.com
我来说两句

(可选)

Open Toolbar