輸入法開發實驗:地理資訊輸入法(三),”Hello, world!”
在先前兩篇準備工作,我們做了幾件事:需求分析、可行性分析、原始資料的分析與準備,並且建立了一個計劃所需的「周邊」(periphery)。我們這次要開始動手了。
Introducing… OpenVanilla
我們終於可以開始一展 OV 發展的初衷:簡化輸入法的開發工作。這一篇blog會比前兩篇都短得多。我希望我們利用這一篇做為 OV 的某種 crash course ,讓大家馬上就編出一套簡單的輸入法──換個方式說,先做出一套「輸入法的 “Hello, world!”」,再慢慢細述一個輸入法有哪些構成。
所以今天的內容會相當簡單。I promise.
輸入法的 “Hello, world!”
什麼是輸入法的 “Hello, world!” 呢?最簡單最簡單的輸入法,其實就是:鍵盤打了什麼,就直接輸出什麼。用網路的術語,這叫 “echo back”,或者叫回送。把使用者打的鍵、也就是餵進輸入法的鍵碼,再原封不動地送回去。事實上,在輸入法上,這也可以稱為 “pass thru”,也就是不做任何處理。
不過,在以下的範例中,我們還是會在這 pass thru 的過程中,再多動一點手腳。
以下就是今天的程式範例,我稱為 FoobarIM.cpp (「foobar 輸入法」):
#include <stdio.h> #include <Openvanilla/OpenVanilla.h> #include <Openvanilla/OVLibrary.h> class FoobarContext : public OVInputMethodContext { public: virtual int keyEvent(OVKeyCode* k, OVBuffer*, OVCandidate*, OVService* s) { char msg[256]; sprintf(msg, "keycode=%d", k->code()); s->notify(msg); return 0; } }; class FoobarIM : public OVInputMethod { public: virtual OVInputMethodContext* newContext() { return new FoobarContext; } virtual const char *identifier() { return "FoobarIM"; } }; OV_SINGLE_MODULE_WRAPPER(FoobarIM);
請將以上的程式碼範例,存檔成 FoobarIM.cpp 。然後,進到 shell ,利用下面這行指令編譯:
g++ -bundle -o FoobarIM.dylib FoobarIM.cpp
編完之後,我們就會得到一個 FoobarIM.dylib 。再將完成品用下面的指令,拷到自己的 OV 模組目錄裡:
cp FoobarIM.dylib ~/Library/OpenVanilla/0.7.2/Modules/
好了,大功告成。請隨便新開一個應用程式(例如 TextEdit.app)──請注意,要是新開啟的應用程式才行──然後,拉下你的 OV 選單,你應該會看到如下例的圖片:
FoobarIM 輸入法正式進入選單中!
你可以選用這個輸入法,在 TextEdit.app 中隨便打幾個字,看看會有什麼東西。
So, 這就是最簡單的 OV 輸入法了。我們會在下一篇中慢慢解釋,上面看似怪異的程式碼,到底做了哪些事情。
使用 svn 取出範例
事實上,我們先前建立版本管理倉庫,有一個好處是:我們完全可以用版號來分辨目前進行到哪一個階段。例如,如果你想知道今天之前我們放進了哪些東西,你可以用 svn co -r 2 http://svn.openfoundry.org/ovgeoinfo 這個指令,來取得「revision 2」的所有程式碼。
今天送進去 svn repo 裡的東西為 revision 3。我們之後還會繼續送新的東西進去。用 svn 的好處已經很明顯:我們不再需要開啟例如 step1/ step2/ step3/ … 等等目錄。我們直接用 svn 的 co 指令,就可以取得某一個特定版號的所有程式碼。
lukhnos :: Jul.05.2006 :: tekhnologia 技術或者藝術 :: 2 Comments »
2 Responses to “輸入法開發實驗:地理資訊輸入法(三),”Hello, world!””
[...] http://lukhnos.org/blog/zh/archives/340 [...]
[...] cahier lukhnos (nota lumina) » 輸入法開發實驗:地理資訊輸入法(三),”Hello, world!” (tags: Tech InputMethod OpenVanilla) [...]