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

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

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

查看( 4210 ) / 评论( 3 )
抛砖引玉之用。发现自己工作以后实在没有时间能像在大学里那样专注于技术了。LUPA开源社区 FV])D1T x |!|Ak y

'g Ma i+u0 pidgin相信是每个使用linux的朋友的必备工具。如果有兴趣的话,可以自己开发些插件。LUPA开源社区b,[h9]%s;W!T5dd
目前计划做一个保存最近联系人的功能。不然在几百个好友里找一个刚给我发消息的人真是很麻烦。LUPA开源社区g|yb$nZ
LUPA开源社区Pwn!Lv"Kfb
翻译了个开发pidgin插件的入门教程,提供一个骨架(skelecton)源码。
+`Cp e^0 下载pidgin的源码

CODE:

.F2u6DC$j,au_[S0sudo apt-get source pidgin现有的插件源码在 /pidgin/plugins 目录里,可以参考下,尤其是看看比较简单的 history.c  文件。LUPA开源社区 `2`w2x$hXcd
我们先从hello world开始吧。LUPA开源社区z6hn)f6bA

1p"{"x&lQ&U2rL0 (
-x bU$Zk,M2N0 技术基础:LUPA开源社区h!r&tR&_`(gIC
C语言开发LUPA开源社区"]M+R%E2y#w&[+N
automake autoconf 使用LUPA开源社区.cAl1z,C+w.Uw1J
)

CODE:

y;[,nI)~}0#define PURPLE_PLUGINS        //必须定义
9Og{%wtK0 LUPA开源社区R$AJ0dh3t
#include <glib.h>LUPA开源社区!bL3F2DBW.lc
#include "notify.h"
#\k Nua q0e0 #include "plugin.h"LUPA开源社区P| y2rgYHw#A'Y ~#S

-J1y Dk@2{ zg0 #include "version.h"LUPA开源社区/xh2\C*^5Q;J*W

Pze/cfE\0 static gbooleanLUPA开源社区3p[7bZ7U5v-n%j'{
plugin_load(PurplePlugin *plugin) {
Wxl d d:C5cl%E%Z0 LUPA开源社区&d^?]:|m?+b
    purple_notify_message(plugin, PURPLE_NOTIFY_MSG_INFO, "Hello World!",
;]5S#o4NC Jd+H5x x0
w7V:W%z-d)d5@m|0                         "This is the Hello World! plugin ", NULL, NULL, NULL);LUPA开源社区&oQOj_$W'x([2k:Dr

#\4e(g#qA:l{v0     return TRUE;LUPA开源社区HX:Xr}3lJ
LUPA开源社区1\Z m h \F8I"p g8q'|
}LUPA开源社区U^&MdI'l F%z1if:~
LUPA开源社区0q/OEg"q4FU
static PurplePluginInfo info = {         //插件相关属性的定义LUPA开源社区` OR*VZ G

kD)g.cUj0     PURPLE_PLUGIN_MAGIC,           //必须强制定义,没什么解释的。
9bJ5LUyK:B3M0?0
y-k2?.JDL"XW0     PURPLE_MAJOR_VERSION,         //帮助libpurple识别插件版本号,  (libpurple是IM的图形控件)
@2{ d,Nu(H? WP0
(e.|Yl4T2{9y0     PURPLE_MINOR_VERSION,
g ]p+ObmU0 LUPA开源社区4q Zy }M3?
    PURPLE_PLUGIN_STANDARD,     //有四个数值,PURPLE_PLUGIN_UNKNOWN 表示不使用
*e^ T2Fw/r'w0 LUPA开源社区`w i8cC5OB.MA{_
//PURPLE_PLUGIN_STANDARD 标准插件LUPA开源社区nb:T VZ[9zFm1l

1x1dg2yQ T0 //PURPLE_PLUGIN_LOADER 为PERL 或者TCL 等语言开发的插件作准备LUPA开源社区8c7C.h&N*y$l1p:A |Z

&d*JvN)l0 //PURPLE_PLUGIN_PROTOCOL 为各种通信协议准备的 比如QQ插件LUPA开源社区h(}8B*OX

+[v*E'eg?3_L%m0     NULL,            //是否涉及对界面的控制
sqX#V~g m-?t0
Mt dF7r'U:wE'}0     0,                //是否在插件列表里显示
p VFR6^~b8L _0 LUPA开源社区Wh]!qRf)y Z*p
    NULL,            //是否采用GlistLUPA开源社区 @We)Ej
LUPA开源社区K*A{VQb ~
    PURPLE_PRIORITY_DEFAULT,    //优先级LUPA开源社区u1v6w$qFp Qs

-D)q-nm'Y4qo M T8{A0     "core-hello_world",    //插件编号,最后面会用到的。LUPA开源社区{9P ED'E K
LUPA开源社区xF:\4RDx0FeU
LUPA开源社区$C"VB)cs@m2eb
    "Hello World!",        //插件名称LUPA开源社区0fsP&]2P
LUPA开源社区N8h)Cc\)h_f
    VERSION,                //版本
4|}5Rp'J.e.rt0 LUPA开源社区rJ+]rh M!k

.A6H*wd1M;R9]0     "Hello World Plugin",    //插件简介
_sq9PA+W-JEI0
"d%G9j k'V!czU0     "Hello World Plugin",   //插件描述
0L&S!qI&@X5J0
V#{C:v.?gk0     NULL,                    //插件作者和邮箱等内容
#Y8LhZq@M4W+L0 LUPA开源社区Z~__'S(MtE _-B8v
LUPA开源社区^2B P1HW/M"A(_%L
    "http://helloworld.tld",    //插件的联系网站地址
_ix;z0P0
L'{/`;Nl ]"o(w o0     plugin_load,            //插件的加载函数,LUPA开源社区|L8Um/YC:y#^iq
LUPA开源社区&v}1i2]6v2IiR
    NULL,                //定义插件加载失败时所调用的函数LUPA开源社区'Cl,OFc _m
LUPA开源社区kTMa'K
    NULL,                  //当libpurple销毁本插件时调用的函数
A%]6|/MUYW0
P _Y \e^0
f:z)}Hux.j+f+L0     NULL,            
CJ&Y\ q5U"F0 LUPA开源社区X I2T~'W1?*|(~6B3egU
    NULL,
kJGY1\:lk3~0 LUPA开源社区3X(OQanV1^E
    NULL,
|z\*ib'DFP9Yf0 LUPA开源社区a^s+U ou ]:M
    NULLLUPA开源社区&z? N:qdYJ+K@X*Y

e~8{ oI,E ^ RbP0 };LUPA开源社区 `7} `C?\)nQ

g&h(E&C6h@0j0 static void
E4Mp/|!N4t&`r-^0 LUPA开源社区(Ic0DjkHwP
init_plugin(PurplePlugin *plugin)LUPA开源社区&Yx Y8I$Ix UH

cdR0O#zli,DHWP0 {LUPA开源社区+w["|s2jx*wG3}

vmD|1Hwxo0 }
_'vJ6zs A~*J0
4f9V7^?)b"N1|nm2M'T0 PURPLE_INIT_PLUGIN(hello_world, init_plugin, info);   //加载
以上是一个最基本的插件骨架,加载后会弹出一个提示消息。

TAG:

Sanool和开源的故事--邵炜主题博客....... sanool 发布于2007-06-11 01:06:56
通过 apt-get 得到的源码是干净的源码 不包括开发用的系列脚本
1p
qE5U FXLUPA,开源社区,开源,开源联盟,开源论坛,开源信息,开源项目,Open source,linux,软件下载,产业化社区,项目交易,人才库,创业园区,讨论区,紧急援助

f/Rk+b\aQ&t中国最全面的开源推进联盟社区,围绕自由、开源软件与代码为研究主题.开源软件,开源论坛,开源信息,开源社区,开源项目, 开源blog,开源系统,开源新闻系统,信息发布系统,开源,.net 开源系统,Open source如果需要的话 只能到官方通过 svn 获得
#J:Nx+S!Df+a中国最全面的开源推进联盟社区,围绕自由、开源软件与代码为研究主题.开源软件,开源论坛,开源信息,开源社区,开源项目, 开源blog,开源系统,开源新闻系统,信息发布系统,开源,.net 开源系统,Open source
$nY9j2K*R&Gwww.lupaworld.com svn co https://pidgin.svn.sourceforge.net/svnroot/pidgin pidginwww.lupaworld.com6xZhzyh AH;I(z8|/R
LUPA开源社区lo0n+pW8g6Q
这样 你修改了makefile.am 之后  再 autogen.sh 一下就好了
Fluke@LUPA fluke 发布于2007-06-11 02:21:10
留个脚印。这两天有时间checkout下来看看。
*p$Qj+wA h/L:Q5wLUPA,开源社区,开源,开源联盟,开源论坛,开源信息,开源项目,Open source,linux,软件下载,产业化社区,项目交易,人才库,创业园区,讨论区,紧急援助www.lupaworld.com3L&]WLR
sanool的idea不错,这个插件挺实用的。
someone someone 发布于2007-06-11 09:55:32
当你发现,自己呼吁大家让银行开放插件时候,LINUX却无人接手www.lupaworld.comyN
}7s;P!a

当你呼吁大家开发linux密码管理小工具,却无人迎战
R0mtK1X1\
Ikwww.lupaworld.com

/Y1E7t3n;M8]www.lupaworld.com那么不如作点实际事情:LUPA开源社区"N        G0M,KK{
    培养更多的人,让他们掌握工具,
8?g3Q'QXkwww.lupaworld.com    今天大学毕业的人,至少会打开vc  IDE,不用写一句代码,自动编译会有个程序运行
1m&m:B5MR RD Ml|开源社区    但是不会有大学生毕业后能编译一个linux下的运行NFS系统。
1[%o7UR6smV
)Qb2QqCC!k-C6z]Zewww.lupaworld.comif you have sentiment sail to me : someone@lupaworld.com
我来说两句

(可选)

Open Toolbar