雖然以前籌劃過很多項目,但動手去做的實在不多,能做出來的就更少了,這個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.tkk7.com/Files/zarra/scim-dbus-frontend.zip
pygame 演示:
posted on 2008-07-11 09:40
zarra 閱讀(873)
評論(17) 編輯 收藏