2020/09/27

在Linux Mint上安裝自家輸入法,從cin格式轉到fcitx的mb碼表

Fcitx中文輸入法框架能夠以碼表作為輸入法字碼的依據,不過,Fcitx的碼表是二進制編碼檔案(binary files)和過去比較普及的中文輸入法框架碼表──用ASCII純文字的cin格式並不相容。不相容還是不要緊的,因為Fcitx也有提供工具可以把碼表從cin轉到Fcitx看得懂的mb格式binary碼表(see! MB=碼表!)。

Fcitx中文輸入法框架是支援自行對輸入法碼表編碼和逆編碼的,其命令是txt2mb(編碼成二進制碼表)和mb2txt(碼表解碼成純文字)。和其他支援自帶碼表的輸入法框架不同,Fcitx中文輸入法框架的設定檔是放在和碼表同一位置的另一個設定檔案conf裡面的。

要把現有的cin轉成mb,首先就是要有cin格式的碼表,然後就是參考所謂文檔,手動將適用的配置編成設定檔案,儲存成conf。或者用懶人做法,找個現有的碼表來修改和移植,例如Fcitx中文輸入法框架本身自帶的倉頡輸入法。

先從到公家的Fcitx資料夾中找出碼表資料夾:

cd /usr/share/fcitx/table

裡面應該有兩個檔案,倉頡的設定檔cangjie.conf和碼表cj.mb。由於碼表cj.mb是個二進制的檔案,所以先用Fcitx的mb2txt轉換工具把碼表轉換成純文字。

mb2txt cj.mb > cj.txt

再把幾個檔案複製到桌面慢慢處理。

cp ./c*j*.* ~/Desktop

製作輸入法設定檔和碼表

首先是解讀一下cangjie.conf。

假設我們要移植的輸入法名字叫「課金輸入法」(FKcode),那我們就要一個fkcode.conf,把設定檔案裡面的cangjie和cj都改成新輸入法的名字「課金輸入法」或「fkcode」,尤其注意在碼表檔案的一欄要對應新輸入法的碼表。

File=fkcode.mb

然後就是修改cin,內容的確有點複雜,而且是根據輸入法本身來制訂,所以還是讀文檔吧。所謂官方文檔有點過期【肥叔叔轉載的繁體版】,像文檔中的標示還是簡體中文,在Linux Mint 19起,mb2txt後的碼表都是用英文標籤,不過txt2mbmb2txt都是中英文格式標籤都對應的,還算方便。

文字化後的mb碼表可以分為輸入法格式定義部份和輸入法數據部份。打開一個純文字檔,那就先開一新純文字檔叫FKcode.txt。

開首是宣示這是一份Fcitx的碼表

;fcitx Version 0x03 Table file
筆者的mb有用到的
  • KeyCode/键码:表示該碼表輸入法需要用到的鍵
  • Length/码长:指該碼表輸入法最長的碼長
筆者的mb中沒有用到的
  • InvalidChar/规避字符:某些字符如果出現在編碼之首,表示特殊用途,雖然可以組成單字,但卻不參與組詞
  • Pinyin/拼音:以此字母開頭的為漢語拼音
  • PinyinLength/拼音长度:表示該碼表中漢語拼音的最長長度
  • [Rule]/[组词规则]:表示自動組詞的規則
所有的mb必須的輸入法數據部份:
  • [Data]/[数据]:該標誌以下為該碼表輸入法的數據,按「編碼<空格>對應的漢字」

在格式的部份編輯完成後,就是把cin碼表輸入法的數據移植到純文字mb碼表裡面。cin碼表的數據有兩種,分別為字根和字根組合與對應的輸出字元。

先把字根在%keyname begin%keyname end中間的字根抽出來,都放進[Data]下面的地方。同樣地,在cin檔裡面,%chardef begin 與 「%chardef end」中間的字根組合與對應的輸出字元,也同樣地放到[Data]下面。

這時理論上完成了移植的準備,可以使用txt2mb工具,把純文字的碼表,編譯成Fcitx看得懂的二進制碼表。

txt2mb FKcode.txt fkcode.mb

完成轉碼後,可以把mb碼表和設定檔conf放到用戶自己的隱藏配置目錄中,屬於Fcitx的碼表文件夾。

將自製的Fcitx的碼表放到相關的資料夾

先看看Fcitx的碼表文件夾是否存在

cd ~/.config/fcitx/

如果Fcitx的碼表文件夾不存在,先新增一個文件夾,名為table

mkdir table

再進去table文件夾裡面

cd table

把先前準備好的兩個輸入法相關檔案──設定conf和碼表mb都放進去。
如果有多過一個用戶可以用到這個輸入法,也可以以管理員權限sudo的身份,把conf和mb檔抄寫到公家的Fcitx資料夾中的碼表資料夾(就是先前把倉頡碼表複製出來的那個位置)──/usr/share/fcitx/table

設定和使用自定的輸入法

當碼表放到適當的位置後,就可以到喜好設定(Preferences)中,找出Fcitx的設定程式「Fcitx configure」。

在第一個輸入法的頁面,這裡會把所有正裝有的輸入法(包括英文等預設的)都全部顯示出來。這時應該是不會有剛安裝的輸入法的。如果有其他「被預先安裝」但又不會/不想用的輸入法,也可以點選擇和點左下角的減號掣移除。

到Add-on頁面,下拉找出「Table」以碼表輸入。選擇後點擊設定打開設定操作介面。

這時在下面「其他」欄目中應會有剛新增的輸入法顯示出來。確認剛新增的輸入法有在「其他」欄目中出現後,關掉這個操作介面,再返回第一個輸入法的頁面。

在第一個輸入法的頁面,點左下角的加號掣。

這是應會彈出「新增輸入法」(Add Input Method)的視窗。先把列表下面,預先選了的「Only Show Current Language」的選項消除。消除然後再在列表中找出剛新增的輸入法(應該在列表的最底附近)。點選再確認。

這時「應該」就成功把新增的輸入法加到了框架中使用,找個可以輸入文字的地方試試。OK的話,可以再參閱肥叔叔先前寫的一篇文章,把Fcitx中文輸入法框架設定到開機時自行啟動。

為甚麼好好的要在Linux上試裝自家的輸入法?

肥叔叔用的輸入法是一個在很久很久以前(20年前?!)要付費的中文輸入法,這款輸入法由一個電視編劇發明,其公司後來也發明了單憑numpad上的九宮格就能打中文,而且在十多年前頗為有名。

悲劇是,肥叔叔一學就會,而且就一直靠這個輸入法手多年,把不少自命速成倉頡的高手都曾KO掉。

就叫這輸入法做……「課金輸入法」吧。

那個時代,肥叔叔也真的曾經是去買過正版,媒介是3.5吋的Floppy碟一塊和說明書一本,筆者也頭到尾把說明書讀完。

「課金輸入法」現在仍然存在,筆者過去也曾兩過一兩個版本當作支持一下,可惜現在不再有理由去繼續支持。「課金輸入法」現在還真的是依靠輸入法的「課金」過活,好好的一個輸入法更新了N個版本,輸入法身沒啥好更新的,所謂新的部份就是必須有光碟的DRM、現在進化成是只買「三年授權」之類純粹是坑錢和擾民的玩法。

還好,十多年前網上就流傳一個對應了當時在Linux上比較流行的中文輸入法框架XCIN所使用的碼表格式CIN,這個CIN格式也用到後來在Mac上使用的香草輸入法(OpenVanilla)輸入法框架。

同樣是由台灣人開發的香草輸入法和從香草輸入法分支出來,由台灣的奇摩雅虎的團隊開發和維護了好幾年的Windows 32-bit和64-bit版「Yahoo! 奇摩輸入法(Yahoo! Keykey Input Method)」,可以在偉大的Windows上自攜碼表,只不過最後和大部份Yahoo產品一樣,「被Yahoo了」……

香草輸入法的團隊也曾經短暫把OpenVanilla框架port到Windows上面,大概是由於團隊的都是Mac用戶為核心的原因?Windows版的OV出現過幾個版本就沒有繼續維護。

後來嘛,Mac OS自己也加入了導入CIN作為中文輸入碼表的內建功能,不過筆者還是在Mac上繼續用香草輸入法框架加自帶碼表。

直到最近,肥叔叔在試玩Linux,要是在Linux上要打中文,但沒有再支援CIN作為碼表的輸入法框架,就只有用方法把碼表轉換成「現代」一點的Fcitx中文輸入法框架能看懂的格式了。

PS. 這篇Blog post就是在Linux Mint上用Fcitx加「課金輸入法」碼表打出來的。