随笔 - 67  文章 - 79  trackbacks - 0
<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(1)

随笔档案

文章档案

相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜

虽然以前筹划过很多项目,但动手去做的实在不多,能做出来的就更少了,这个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 阅读(700) 评论(17)  编辑  收藏

FeedBack:
# re: scim dbus前端[未登录] 2008-07-28 10:47 apple
这个界面还是相当熟悉的.......
代码还是看不懂,几个月来发现自己一点长进也没有
惭愧啊~~`  回复  更多评论
  
# re: scim dbus前端 2009-03-03 10:58 赵梓安!
真是不好意思。我是09年2月看到你这个博文的。事隔半年了.不知道这位人兄对scim的前端开发是否还有趣兴.

我也想做一个scoketfrontend可是没能成功.

生成出来libMyfrontend.so的方法也不知道对不对.
我scim -f libMyfrontend.so后

说libMyfrontend.so 载入失败.很是头痛.希望你能看到我经你的留言.来帮帮我~!  回复  更多评论
  
# re: scim dbus前端 2009-03-03 16:56 赵梓安!
这位仁兄我下载了这个东西,make通过了。我要怎么执行呢?????  回复  更多评论
  
# re: scim dbus前端 2009-03-03 17:05 赵梓安!
我能看出来你这个是用python写的。

我python pygame_scim.py
说找不到

pygame

这个东西。你能不能把完全包借小弟用一用。
我想用QTE写一个界面~!  回复  更多评论
  
# re: scim dbus前端 2009-03-03 21:39 zarra
scim 的dbus 前端是用C++写的 用了dbusc++ 这个库 已经包含在代码中
一个python 程序是使用 dbus来和scim通讯的一个演示,使用了pygame
基本所有的发行版都有它 #>apt-get install pygame
不过 我后来发现了 ibus 这个项目 也是一个dbus 接口的输入法服务器 但是依赖很多

我写的那个 基本输入功能都有 稳定性没测试过...

我留个地址 zarraxx@gmail.com   回复  更多评论
  
# re: scim dbus前端 2009-03-04 08:41 赵梓安!
真高兴能与你取得联系。

我写的frontend成功了。现在是早上八点多刚上班。

我非常兴奋能看到你的留言。


我决定试一下你给的见意!谢谢!  回复  更多评论
  
# re: scim dbus前端 2009-03-04 08:45 赵梓安!
真的很高兴能与你取得联系。

我也做了一个 frontend。通过scim -f ./libm.so实现了我想要的。

现在是早是八点多,我刚上班一打开你的博看到你的留言后我非常高兴。

我决定试试。再此谢过!
  回复  更多评论
  
# re: scim dbus前端 2009-03-04 10:39 赵梓安!
你的东西我运行了.

是好使的但我没有YaHei.Consolas.1.12.ttf字休.所以我用了None这个代替之后我看到的都是小格子.

我正下载它,不知道下来之后要放在哪个路径下!  回复  更多评论
  
# re: scim dbus前端[未登录] 2009-03-04 12:09 zarra
不一定要用 YaHei.Consolas.1.12.ttf 随便放个中文字体文件在 py 文件同目录下就好了
同时别忘记改下 py 文件中的 font=pygame.font.Font('YaHei.Consolas.1.12.ttf',12) 这行   回复  更多评论
  
# re: scim dbus前端 2009-03-04 12:12 赵梓安!
我这个字体已经下来了.

你让我认识了python这个脚本  回复  更多评论
  
# re: scim dbus前端 2009-03-04 12:27 赵梓安!
呵呵,果真好使,你这样的天才难遇呀!

能不能加我个好友.

fhqsuhpv@163.com

我在努力吧你的python改写为QTE4的程序!  回复  更多评论
  
# re: scim dbus前端 2009-03-04 15:04 赵梓安!
我想改成QT这个想法现实吗?  回复  更多评论
  
# re: scim dbus前端 2009-03-06 10:11 
你好,还是我~!

我想问一下哦。你那面的fronend有一个配置器scim-adaptor.h
我想这个是C++的对吧!

那我想为QT提供一个接口我应怎么办。

我用了qdbusxml2cpp (你好那个)scim-introspection.xml -p scim-intrf

结果出现了scim-intrf.h scim-intrf.cpp 文件。

当我把他们当成QT的接口make时。出现了scim-intrf.o:(许多)**未定义的引用

我该怎么办!!!  回复  更多评论
  
# re: scim dbus前端 2009-03-06 15:42 
我在我的Makefile中加入了-lQtDBus之后上面的那个错误就没有了.

同在我又在分析你的那个python的程序.大多都注上的注解.有一个地方我不明白.

import locale, sye 为什么要引他,他是哪来的,有什么用?

self.language,self.encoding =locale.getdefaultlocale()
这句我能从字面上理解是获取默认的locale....

这是什么意思呢!我要用QT怎么获取呢?????  回复  更多评论
  
# re: scim dbus前端 2009-03-06 16:10 
我的同事问我问题时,我一下想起来!

我感觉是从系统上获取的.语言和编码!

你的逻辑思维真不一般.  回复  更多评论
  
# re: scim dbus前端 2009-03-07 22:06 zarra
scim输入法服务器 这东西是支持多语言的,在语言下还支持多编码
作frontend 当然应该找到系统当前的语言和编码 作为默认值
难不成在中文locale里 每次调出来的都是默认的en 要手动切下语言  回复  更多评论
  
# re: scim dbus前端 2009-03-09 09:00 
不是说你获取这一行写的代码不一般。。。。是你正个的逻辑思维!~  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: