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