虽然以前筹划过很多项目,但动手去做的实在不多,能做出来的就更少了,这个scim的dbus前端算是我做的最认真的一个了。
这个项目是为了解决linux环境下,一些特殊的应用(比如游戏程序)i18n文字输入问题。虽然SDL从1.2.13开始支持了xim,但还是很不完善,至少我不能解决全屏模式下的输入法问题。所以我想沿用win32下的游戏模式,传递键盘事件给输入法引擎,得到一组lookup字符串,再自己画出IM
Panel。
XIM好像很难这样作(这年头讲xlib的书难找,我看过《Xlib Programming Manual》的i18n部分后,还是没有找到基于xim的解决方法)。
SCIM的SocketFrontEnd有点这个意思,不过还是不行。所以我想自己作一个scim的frontEnd
来提供类似候选字符串的查找的功能。本来想基于SocketFrontEnd的,但是发觉这样做的话,客户端的程序势必要依赖scim(或者抄写一遍scim的frontEnd和socket头文件),并且也不利于其他语言的binging,所以决定作一个dbus模式server。选择scim而不是xim的一个附带效果就是,client可以不依赖X,这样即使是console或者是fb下的i18n环境也可以简单的调用scim输入法服务。
关于scim,dbus的文档不多,所以了解他们的结构和用法多半只能看代码。scim的头文件的注释很详细,代码的结构也清晰,基本上花了2天时间就了解了scim的FrontEnd。但是dbus就不容易了,虽然有glib和qt的binging,但是我想这应该是GP和元编成大展身手的地方。看着freedesktop上的Reference写了一些Pure C++ binging后,才发现自己重复造轮子了。早有个Pure C++ dbus binging在freedesktop的git上
http://www.freedesktop.org/wiki/Software/dbus-c%2B%2B 。所以虽然tarball里面自己写的代码没几K,一大半还是从freedesktop上git来的dbus-c++ binging。
由于全部是在用业余时间在做,目前的代码仅能做到在我的机器上完成大部分功能。构建方面我也不是很懂,所以目前make文件惨不忍睹、极不规范。目前自己设计的scim-introspection.xml中,提出的接口里还是几个冷门的方法没实现,scim中还有几个方法和信号不清楚怎么用dbus传,有些应该是用object的参数(比如lookup对象)被我用StringList简化了,这些都是要继续完善的部分。我希望将来dbus能成为scim默认提供的frontend之一。
代码:
http://www.blogjava.net/Files/zarra/scim-dbus-frontend.zip
pygame 演示:
posted on 2008-07-11 09:40
zarra 阅读(864)
评论(17) 编辑 收藏