刪除、修改與設計自己的輸入法

OV 最大的特色之一,就是能夠更方便的修改安裝包當中內建的輸入法表格,符合自己的特殊需要,比方說就原本的注音或倉頡輸入法,新增幾個自己所習慣的按鍵;也可以使用比相較於 TCIM 所提供的輸入法編輯工具更具彈性的方式,設計自己的輸入法。

可以使用表格方式載入,而在目前 OV 還沒有提供、且無法提供的輸入法,據我們所知有:

刪除不需要的輸入法

所有 OV 使用的輸入法模組及資料檔案,都位在系統硬碟中的「資源庫」(或是英文界面下的 Library)→「OpenVanilla」→「0.8」目錄下。在這個目錄中,您可以看到許多副檔名是 .bundle 或 .dylib 的檔案,這些是各個輸入法所使用的動態執行檔案,如果您覺得有些輸入法實在用不著,您可以刪除這些檔案(在您刪除檔案之前,建議您先在系統偏好設定中的「國際設定」,停用 OV,刪除完後再重新啟用)。

其中,OVIMArray 是行列輸入法、OVIMCanjei 是倉頡、OVIMChewing 是酷音、OVIMPhonetic 是注音、OVIMPOJHolo 是台語白話字輸入法、OCIMGeneric 則是可以載入各種通用輸入法表格的泛用輸入法模組。

編輯 cin 輸入法表格

每個輸入法需要的檔案,都位在同名的目錄下。比方說,選單上的「OV 行列輸入法」的表格,就是在 OVIMArray 下的 array30.cin,而白話字(POJ)輸入法的表格是 OVIMPOJHolo 下的 poj.cin,而您會修改、新增的檔案,通常便位在通用輸入法模組下。

您可以使用任何可以一套編輯純文字檔案的編輯軟體,修改輸入法表格。注意:由於放在「資源庫」目錄下的檔案都有權限控管,您必須先將您想修改的資料檔,拷貝一份至您的工作目錄中,待修改完後,再以蓋寫方式放回原來目錄。蓋寫時,您必須擁有系統管理人的權限,OS X 的 Finder 會在蓋寫時要求您輸入您的密碼。

輸入法表格的副檔名必須是「.cin」,在存檔的時候,也必須使用 UTF-8 編碼存檔,Mac OS X 內建的「文字編輯」(TextEdit)就是一套可以編輯純文字檔案,以及轉換編碼的編輯軟體。在一個 .cin 檔案中,應該要包含以下資訊。

以漁村輸入法為例,在檔案的開頭需要有以下設定資訊:

%gen_inp

%ename EHQ-Symbols

%cname 漁村符號

%encoding UTF-8

%selkey 1234567890

其中:

接下來必須要有 %keyname begin 與 %keyname end。在這兩個標籤的內容中定義的是輸入時所使用的按鍵,還有按下的時候應該先產生怎樣的結果,按鍵名稱與顯示名稱中間隔一個空白,每個按鍵的設定寫成一行。比方說,在倉頡輸入法的設定中,就是「q 手」、「a 日」,標準鍵盤配置的注音輸入法就是「1 ㄅ」、「q ㄆ」等。

在設定完按鍵之後,就是設定每一個按鍵組合所應該產生的結果了,這些設定放在 %chardef begin 與 %chardef end 之間,前面設定的是您在前面 %keyname 所設定的按鍵定義的組合,空一個空格後,是產生的結果。比方說,您可以在注音輸入法當中加入自己創建的新字,想要用「ㄅㄧㄤˋ」打出「棒」這個字,就是多加一行「1u;4 棒」。此外,在 %keyname 與 %chardef 所定義的英文按鍵,是沒有區分大小寫的。

在 cin 檔案中還有一項 %endkey 選項,因為可以應用的範圍比較複雜,將會在下一節中詳述。

自訂標點符號

不同的輸入法,對於如何便捷地輸入全型標點符號,總是有不同的作法;更有甚者,同一種輸入法,也會有好幾種不同的習慣。有人希望按下英文的標點符號之後就自動轉成中文全型標點,有人喜歡按 shift+英文標點再變成全型標點,有人偏好使用「`」之類的前導字元,有人習慣按組合鍵等等。

由於每種輸入法拿來組字的字根對應到英文鍵盤的位置範圍不盡相同,標點符號的處理就應該自行定義,最好能提供使用者選擇的自由。基於這樣的原則,OV 的 XCIN 模組只能在能力所及的情況下,透過 cin 檔的規則來完成這個任務。

%endkey 這個欄位的用途是列舉輸入法字根中會觸發組字事件的字元。舉例來說,注音的聲調符號通常該出現在每個注音序列的最後,表示這串注音已經打完,要重組為一個中文字。因此,在使用標準鍵盤對應的情況下,注音的 cin 檔裡應該有這麼一行:

%endkey 3467

3467 分別是注音標準鍵盤對應裡的三聲、四聲、二聲與輕聲。這個欄位可以有效幫助我們自訂標點符號的輸入方式。以使用倉頡輸入法為例,首先,如果喜歡用「shift+英文標點」這種方式來輸入全型標點,就應該把這些「shift+英文標點」加進 cin 檔的 %keyname 及 %chardef:

 %keyname begin

 < ,

 > 。

 ? ?

 : :

 " 、

 { 「

 } 」

 | |

 ~ 〜

 ! !

 @ @

 # #

 $ $

 % %

 ^ ︿

 & &

 * *

 ( (

 ) )

 _ ‐

 + +

 ...(以下是倉頡本來的字根,別把這行也抄進去啊!)

 %keyname end

 %chardef begin

 < ,

 > 。

 ? ?

 : :

 : ;

 " 、

 " ”

 " ’

 " ‘

 { 「

 { 『

 { 《

 { 「

 { 〔

 } 」

 } 』

 } 》

 } 」

 } 〕

 } }

 | |

 | \

 ~ 〜

 ! !

 @ @

 # #

 $ $

 % %

 ^ ︿

 & &

 * *

 ( (

 ) )

 _ ‐

 _ _

 _ ─

 _ –

 _ —

 + +

 + =

 ...(同樣,以下是倉頡本來的字根對應)

 %chardef end

上面的例子,在 %keyname 裡加入了會用來輸入標點符號的英文鍵位,並在 %chardef 裡加入了可能會用到的全型標點符號與字根對應的狀況。像是「<」(相當於 shift+,)只會對應到「,」,但「:」(相當於 shift+;)就會對應到「:」或「;」。當 cj.cin 加入了這些資訊之後,「shift+英文標點」就可以用來輸入全型標點了。

做了以上修改後,由於倉頡的組字事件通常由空白鍵來觸發,每次打標點符號時,也得多按一個空白鍵才能讓倉頡輸入全形符號。這時候 %endkey 就派上用場了,因為 %endkey 的用途是「列舉輸入法字根中會觸發組字事件的字元」,而輸入全形符號的狀況就是,如果有一種字的字根只有一個,打了之後就代表要組字。因此,在 cj.cin  裡再加上這一行:

%endkey <>?:"{}|~!@#$%^&*()_+