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

用Python + OpenVanilla寫輸入法

繼Ruby-based OpenVanilla filter module後,OV和script language相關的進展又一彈:用Python撰寫輸入法。

orcas先前先是幫OpenVanilla撰寫了Python-based、可動態載入的filter module。後來又開始研究用SWIG來包裝OV的C++物件,讓Python也可以拿來撰寫輸入法。於是我們有了以下的code

# -*- coding: utf-8 -*-
import sys
import OVIMPython

class PYIMTestContext(OVIMPython.OVInputMethodContext):
  def keyEvent(self, keycode, buf, candidate, srv):
    char = chr(keycode.code())
    buf.append(char).update()
    srv.notify(char)
    candidate.show()
    candidate.append(char).update()
    return 0

class PYIMTest(OVIMPython.OVInputMethod):
  def identifier(self):
    return "OVIMTest"

編譯方法

目前Python-based input method module僅能在OS X上編譯。請先安裝SWIG(可用port安裝),然後使用最新的OV trunk,然後在OVIMPython目錄下,執行 make ; make DSTROOT=~ install 即可將編完的 OVIMPython 安裝到 ~/Library/OpenVanilla/0.7.2/Modules 中。

使用 Intel Mac 的朋友可能得看一下 Makefile 第三行,把中間那一大串關於 PowerPC 的字樣,改成你 build/ 目錄下(會在第一次 make 後出現)的某個名字。如何自動化處理 Makefile 的字串代換會是建立此類型模組的build system的關鍵所在。

Enjoy!

3 Responses to “用Python + OpenVanilla寫輸入法”

  1. on 14 Jul 2007 at 13:59jiing

    帥啊!

  2. on 16 Jul 2007 at 15:59yungyuc

    好耶!

  3. [...] 讓 OV 的 filter 機制可以用 modern 的 python 或是 ruby 實做只是第一步。Dynamic language 的方便已經讓發展新的 filter 的工作大大的簡化。所以下一個就是看看能不能讓 OV 用 Python 或是 Ruby 來寫輸入法。在未來實驗類似酷音等比較複雜的自然語言處理的輸入法模組的時候,如果可以用 Python 或是 Ruby 來寫輸入法應該會有很大的助益。 [...]