雖然以前籌劃過很多項目,但動手去做的實在不多,能做出來的就更少了,這個scim的dbus前端算是我做的最認真的一個了。
這個項目是為了解決linux環(huán)境下,一些特殊的應(yīng)用(比如游戲程序)i18n文字輸入問題。雖然SDL從1.2.13開始支持了xim,但還是很不完善,至少我不能解決全屏模式下的輸入法問題。所以我想沿用win32下的游戲模式,傳遞鍵盤事件給輸入法引擎,得到一組lookup字符串,再自己畫出IM
Panel。
XIM好像很難這樣作(這年頭講xlib的書難找,我看過《Xlib Programming Manual》的i18n部分后,還是沒有找到基于xim的解決方法)。
SCIM的SocketFrontEnd有點這個意思,不過還是不行。所以我想自己作一個scim的frontEnd
來提供類似候選字符串的查找的功能。本來想基于SocketFrontEnd的,但是發(fā)覺這樣做的話,客戶端的程序勢必要依賴scim(或者抄寫一遍scim的frontEnd和socket頭文件),并且也不利于其他語言的binging,所以決定作一個dbus模式server。選擇scim而不是xim的一個附帶效果就是,client可以不依賴X,這樣即使是console或者是fb下的i18n環(huán)境也可以簡單的調(diào)用scim輸入法服務(wù)。
關(guān)于scim,dbus的文檔不多,所以了解他們的結(jié)構(gòu)和用法多半只能看代碼。scim的頭文件的注釋很詳細,代碼的結(jié)構(gòu)也清晰,基本上花了2天時間就了解了scim的FrontEnd。但是dbus就不容易了,雖然有g(shù)lib和qt的binging,但是我想這應(yīng)該是GP和元編成大展身手的地方。看著freedesktop上的Reference寫了一些Pure C++ binging后,才發(fā)現(xiàn)自己重復(fù)造輪子了。早有個Pure C++ dbus binging在freedesktop的git上
http://www.freedesktop.org/wiki/Software/dbus-c%2B%2B 。所以雖然tarball里面自己寫的代碼沒幾K,一大半還是從freedesktop上git來的dbus-c++ binging。
由于全部是在用業(yè)余時間在做,目前的代碼僅能做到在我的機器上完成大部分功能。構(gòu)建方面我也不是很懂,所以目前make文件慘不忍睹、極不規(guī)范。目前自己設(shè)計的scim-introspection.xml中,提出的接口里還是幾個冷門的方法沒實現(xiàn),scim中還有幾個方法和信號不清楚怎么用dbus傳,有些應(yīng)該是用object的參數(shù)(比如lookup對象)被我用StringList簡化了,這些都是要繼續(xù)完善的部分。我希望將來dbus能成為scim默認提供的frontend之一。
代碼:
http://www.tkk7.com/Files/zarra/scim-dbus-frontend.zip
pygame 演示:
posted on 2008-07-11 09:40
zarra 閱讀(873)
評論(17) 編輯 收藏