The Old Blog Archive (Traditional Chinese), 2004-2009

輸入法開發實驗:地理資訊輸入法(三),”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 in action

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 指令,就可以取得某一個特定版號的所有程式碼。

2 Responses to “輸入法開發實驗:地理資訊輸入法(三),”Hello, world!””

  1. [...] http://lukhnos.org/blog/zh/archives/340 [...]

  2. on 15 Jul 2006 at 08:30-TMA-1- » links for 2006-07-15

    [...] cahier lukhnos (nota lumina) » 輸入法開發實驗:地理資訊輸入法(三),”Hello, world!” (tags: Tech InputMethod OpenVanilla) [...]