看了fcitx源码很长时间,里面的结构也大概明白了,但是按键消息怎么给输入法的总是不明白,前几天看到一个Linux下输入法的说明文章,才一下子解开了这个迷,原来有一个XIM(X Input Method),在Linux下弄输入法,就是对这个库编程。网址在这里:
http://www.ibm.com/developerworks/cn/linux/i18n/xim/xim-2/index.html
有了这个文章的帮助,很容易就把fcitx的整体结构看清楚了。主要用的是xlib的库,每一个输入法的相关函数封装到了一个结构中,这个结构包括了有关输入法的所有操作函数,然后在切换输入法的时候,把这个结构换一下就可以。所有的输入法结构的初始化在SetIM函数中,可以清楚的看到,用RegisterNewIM函数来注册,在这个函数里,就可以看到,把每个输入法相关的函数都放到了IM结构中,IM的定义如下
在程序中,定义了一个IM *im变量,用来保存现在的输入法。在SetIM中会给这个im分配内存, im = (IM *) malloc (sizeof (IM) * iIMCount);
这样,处理完成后,就等待客户端程序的事件了。原来这这么一个过程
现在fcitx的结构要比以前的结构清楚多了。
程序结构清楚了,下一步就是学习了。首先从最简单的做起,一个XServer的客户端,显示一个小窗口,因为要给用户一个界面来看到现在的输入法状态。
代码如下
编译此代码:gcc -lX11 -o firstxlib firstxlib.o
最后附一个Xlib Manual的网址:http://tronche.com/gui/x/xlib/