輸入法框架帶來的無限可能

Saturday, November 19th, 2005 | 瀏覽:11,075人次

輸入法讓你聯想到什麼?是注音、倉頡、還是嘸蝦米?
其實輸入法可以作得更多;中文輸入可以有智慧選字,那打英文時為什麼不能也聰明地幫我即時校正拼字或是自動補齊呢?你可能在想某些軟體有這些功能,但其實有很多人不想為了這些功能去習慣不同的軟體。這種功能應該是無所不在的,不管在什麼程式中都能擁有的。那麼,有可能嗎?
有的,答案就是「輸入法」。

輸入法的角色很特別,它位於一般應用程式和作業系統的中間。輸入法可以攔截所有程式的輸入,再加以轉換後輸出給應用程式。所以輸入法是一個非侵入式的輸入過濾器。
以中文輸入法來看,就是攔截使用者從鍵盤輸入的一串字元,接著透過某種編碼(注音、倉頡…)轉換為中文字輸出給程式。
輸入法一直以來都是扮演著這種輸入各國文字的角色,但輸入法真的只有這樣而已嗎?

其實輸入法在作業系統中是一個可以攔截任何輸入的程式,我們可以在這個位置提供更多方便的功能,不只有打中文這麼單純的事而已。例如,當我們用英文輸入時,輸入法可以幫助我們較正拼字,也可以讓我們只輸入頭幾個字,接著就自動補齊剩餘的部分。甚至還可以作成網址輸入工具:當我們輸入「@台灣大學」時,輸入法就自動到google找出台灣大學的URL http://www.ntu.edu.tw,接著輸出<a href=”http://www.ntu.edu.tw”>台灣大學</a>。

輸入法真的可以做到這些嗎?答案是可以的。做這些事本身其實並不難,只是難是難在如何在某個作業系統下寫一個輸入法?在以往開發輸入法是非常困難的事,除了必須和作業系統的底層打交道外,還得面臨嚴重缺乏文件的困境。畢竟輸入法是歐美國家不會用到的東西,偏偏現在的作業系統都是這些不需要輸入法的人所開發出來的,所以自然不會受到太多重視。

但現在已經不同了。

2005年,我們終於有了一個可以跨平台(Windows、Linux、FreeBSD、Mac OS X)的輸入法框架:OpenVanilla 開放香草輸入法
OpenVanilla其實並不是一個輸入法,而是一個可以掛載輸入法的框架。它將不同作業系統上開發輸入法的複雜程式封裝在每個平台特有的載入器(loader)中,並且定義了一個跟平台無關的介面讓我們能更輕易地開發不同的輸入法。
輸入法框架使得閈發輸入法不再是一件困難的事,而且輸入法再也不用和作業系統打交道了。
輸入法框架替開發人員省去了研究作業系統底層細節的功夫,任何一個會寫程式的人都可以直接開始寫他想要的輸入法。他能很容易知道使用者按了什麼鍵,也不用擔心怎麼畫視窗,只要盡量發揮創意去思考要如何處理就可以了。

有了開發輸入法的簡易框架,我們就能做一些以往很難做到的事。
以我自己為例,我是一個重度的Vim使用者,不管是寫程式還是寫文章,都非常依賴Vim提供的高效操作模式。這種習慣讓我很難使用其它的編輯器,不管是像Visual Studio之類的整合開發環境,或是瀏覽器中的textarea,少了Vim的key binding,用起來就是不順手。
但我又不可能改寫每個程式,自己加入Vim的操作模式,那我該怎麼辦呢?
輸入法框架帶來了一個可能的解答。我可以寫一個”edtior adapter”,讓我在一般編輯器中輸入Vim的特殊指令,再幫我轉換為一般編輯器的操作指令輸出,於是我就有可能在任何地方都維持同樣的操作習慣了 :-D

輸入法這種無所不在的特性,再加上能攔截按鍵輸入的能力,蘊藏著無限可能,以往很多不得不作在應用程式中的功能,其實都可以移到輸入法框架上,使得每個程式都能受益 :-D

ICOS 2005

Sunday, November 13th, 2005 | 瀏覽:15,786人次

昨天到科技大樓參加ICOS 2005的OpenVanilla座談會,終於見到了OpenVanilla的開發團隊們(其實好像只有pcman和b6s沒有見過:p)。
中午在OV session開始前,還和lukhnos研究了一下You-Know-What上的輸入法問題。
(透露一個好消息,我們在昨天終於讓universal OV有點進展了,也發現了一些無法載入的原因 :-D )

OV Session結束後因為有事就先走了,沒有聽到後面的議程有點可惜(聽說有個講Smalltalk的session,似乎挺有趣的)。

OpenVanilla Debian packages on apt.dot

Wednesday, June 22nd, 2005 | 瀏覽:10,561人次

最新的OpenVanilla Debian套件已經放上http://apt.debian.org.tw了:)。
請大家改用下面的apt source來取得OpenVanilla。

  deb http://apt.debian.org.tw unstable main

OpenVanilla Debian packages!

Tuesday, June 21st, 2005 | 瀏覽:10,184人次

昨天研究了debian maintainers’ guide一整晚,
終於把OpenVanilla包成debian package了:)

如果想先試用的人,可以直接把下面的位址加入/etc/apt/sources.list中,

  deb http://vgod.info/ deb-vgod/

接著再apt-get update,
就能安裝下列套件了。

  1. scim-openvanilla: openvanilla loader,須依靠SCIM才能執行
  2. openvanilla-im-modules: 一些openvanilla的輸入法模組。
    包括了OV行列、注音、大易、倉頡、漁村符號、日文假名、藏文以及河洛白話字 (POJ)等輸入法

安裝完上面兩個套件後,只要啟動scim,
就可能看到以OpenVanilla-開頭的輸入法了。
(至於怎麼使用scim,請參考scim官方說明文件。)

目前我只有編譯出i386和amd64的binary package,
如果有其它平台的Debian使用者有需要可以跟我聯絡。
接下來就看看能不能把OpenVanilla推進Debian的官方套件中,以造福更多使用者。

OpenVanilla on Linux and FreeBSD

Friday, June 3rd, 2005 | 瀏覽:8,836人次

今天在FreeBSD上和OV奮鬥了一晚,
終於找到SCIM一直無法載入OVLoader-SCIM的原因了。
簡單地說,這問題是因為FreeBSD 4是用gcc 2.95作為預設的compiler。
所以ports中的scim,就是用gcc 2.95 + stlport編起來的。
但是OVLoader-SCIM一直都是用gcc 3來編譯的,
而不幸的是gcc的STL和stlport所產生的mangle name是不同的。
於是,SCIM就永遠也沒辦法載入OVLoader,因為只要有用到STL的function,其symbol就會不同,所以根本就link不起來。

原因找到後,目前我們決定暫時不支援還在用gcc 2.95的平台。
(其實要支援也行,只是就要寫更多更複雜的autoconf, automake rules…)

所以OpenVanilla已經確定能移殖到FreeBSD上,
剩下的只是把一些該寫的功能寫完,就能正式release了。

OpenVanilla on Linux!

Monday, May 30th, 2005 | 瀏覽:12,665人次

這幾天都在作OpenVanilla的移殖工作。
一個好消息是,OpenVanilla已經被移殖到Linux上了!

有圖有真相:

目前OpenVanilla是透過SCIM作為平台,來讓OV上的輸入法能夠移殖到X11上面用。
這張圖抓的是OpenVanilla上的的行列,從圖上可以看到這是有二級簡碼的行列,
不是SCIM內建的版本。

目前在Linux下是已經能正常使用了,
但在FreeBSD上還有些問題要解決:( ..

OpenVanilla HTML Char Entity Filter

Monday, May 16th, 2005 | 瀏覽:10,015人次

OpenVanilla 0.7可以讓人寫過濾器(filter module)。
所謂的過濾器就是在你打字時,攔截你輸入的字串,
再轉換成不同的字串輸出。

有寫過HTML的人都知道,
HTML中有些特殊字元要寫成很醜的形式(這叫character entity)。
例如最常用的’<’和’>’,
要寫成&lt;和&gt;才行。
這實在是一件煩人的事,
於是我就利用OV寫了一個可以直接把HTML中這些特別的字元轉成character entity輸出的過濾器。

有了這個好東西後,寫HTML就再也不用辛苦背奇怪的碼了。

OV行列的「快打模式」

Friday, May 13th, 2005 | 瀏覽:9,954人次

array-quick.png

今天把OV行列的快打模式寫完了:)
而且我也順便包了一個compile過的測試包,可以給有興趣的朋友幫忙測試。

OV 0.7 行列測試包下載
這個測試包下載回去後,請解至根目錄(/)下,再重新login就可以了。

關於行列的快打模式,目前的設計是像嘸蝦米一樣,
用”,,sp”(8v8v2-0^)這個特殊的碼來切換快打模式。
未來的正式版本應該會加入正常的GUI設定介面。
要特別注意的是,目前快打模式的設定並不會永久記錄下來。
如果想要改變永久設定值,可以手動編輯/tmp/org.openvanilla.070.plist
這個檔案,找到裡面的

        <key>OVIMArray</key>
        <dict>
                ..........
                <key>ForceSpecialCode</key>
                <string>0</string>
        </dict>

把ForceSpecialCode下面的0改成1就可以了。

OV行列特別碼輸入法!

Friday, May 13th, 2005 | 瀏覽:10,121人次

用行列的朋友們可能都聽過以前Win98時代有一個叫「行列特別碼輸入法」(簡稱特行)的東西。
這輸入法的特點是在組字送出時自動提醒該字的特別碼(如果有特別碼的話)。
因為特別碼平常不會顯示在候選字區上,於是這種方法可以有效地幫助大家學習用行列特別碼。

我想要這個功能也很久了,今天終於有機會自己來做了。
於是下午就研究了一下,發現不難在OV行列中實做,
於是就這樣不小心寫出來了。

現在OV 0.7的行列會在送字時自動提醒你該字的特別碼,
下一步是加入類似嘸蝦米的「快打模式」,
讓大家可以用來強迫自己輸入最短的碼來提升打字速度。

array-sp2.png

array-sp1.png

OpenVanilla 0.7的新行列!

Wednesday, May 11th, 2005 | 瀏覽:8,483人次

前幾天lukhnos說到OV 0.7己經可以用了,只是還沒把行列移殖過去,
於是我就趁此機會接下來porting的工作,想順便研究一下OV的架構,
而且或許還可以把OV行列缺少的二級簡碼和wildcard補進去。
最後越看越覺得重寫一定會比較快..。

於是我就花了一整天重寫了一個新的行列。
最後完成的版本已經加入了完整的二級簡碼,而且也修正了原本的錯誤行為
(XCIN的表格把簡碼和普通碼混在一起其實是不對的)。

現在這個新行列已經可以從OpenVanilla的SVN repository下載了,
請有用行列的各位朋友幫忙測試看看吧。