修好了 fcitx-chewing

每次輸入法壞掉,我在電腦前、網路上就近乎啞了一樣。上次修好 ibus-chewing 前,我用行列輸入法一個字一個字慢慢拆,還是不若使用注音輸入法流暢,現在臨時要我用行列,我除了基本十訣還有些模糊的印象,也早就忘光光了。

這次因為 libchewing 0.4.0 改了幾處,fcitx-chewing 果然如我預料的也壞了,我又用輕鬆輸入法搭配拼音輸入法一個字一個字慢慢拆、慢慢拼。輕鬆輸入法真的好學不易忘,我覺得最大的缺點就是它用了四排鍵來定位字根,造成選字麻煩。而這個問題我想在觸碰面板裝置上反而不是問題,如果我更進一步能在 Android 上實作一個可自動選字詞的輕鬆輸入法,我爹以及千千萬萬個不習慣注音符號、漢文素養卻不差的長輩,用起來應該會很高興。

對於不是很慣 C 的我來說,要修好輸入法不像慣 C 的夶們那麼簡單,但是秉持著「自己的輸入法自己修」精神,我還是硬著頭皮、用我程度相當彆腳的 C 與 GDB 知識去修。

上次修 ibus-chewing 時,非常幸運地用 GDB 加上人腦 debugger,在主程式一開始沒幾行就抓出型別錯誤問題,順利把 bug 解掉,後來從 iBus 跳到 Fcitx 輸入法框架,則一直開開心心地在之上使用新酷音、Anthy 分別處理中、日文輸入,沒遇過什麼問題。

而此次 fcitx-chewing 我依照編譯時的錯誤訊息,分別停用 chewing_Init(), chewing_Terminate() 以及把 chewing_zuin_String() 改用 chewing_bopomofo_String_static() 後,還是無法使用新酷音。

在這中間我翻了 libchewing 本身的文件、測試案例,不得不說 libchewing 到後來漸次補上的這些測試案例寫得很棒,是很好的新酷音實作參考範例;還翻了 fcitx/developer-handbookfcitx/fcitx-templates,幾乎把整個 fcitx-chewing 逐行審核過,收穫之一就是大概瞭解了在 Fcitx 之下如何實作一個輸入法。

我發現程式在 chewing_new() 這邊就已經未正常產生一份 context,遑論後續的操作。交叉測試之下,才發現是 userpath(使用者詞庫目錄)參數在我電腦上出了詭異的問題。libchewing 0.4.0 新增使用 SQLite 資料庫來維護使用者詞庫,而我的 userpath ($HOME/.chewing/) 底下原本該有一份 chewing.sqlite3 資料庫檔案,卻被生成為一個目錄,導致 chewing_new() -> chewing_new2() 根本無從處理,只好傳回 NULL。於是我手動移除 $HOME/.chewing/ 讓 libchewing 重建,終於讓 fcitx-chewing 可以正常運作。

我後來又翻了 libchewing 想要重現這個問題,卻怎麼也找不出問題所在,無論是 GetDefaultUserPhrasePath() 還是 InitUserphrase() 看起來都很正常,只好先擱置了。


已發佈

分類:

作者:

標籤:

留言

在〈修好了 fcitx-chewing〉中有 1 則留言

  1. 「Dennis Yen」的個人頭像
    Dennis Yen

    Dear Hiroshi,

    我一直以來都使用酷音輸入法,雖然速度比MS的新注音快,可惜酷音有幾個問題:
    1. 使用者詞庫 的詞彙 只能增加,無法刪除。(即便刪除之後還是會跳出)
    2. 中英切換只能用Shift,不能用Ctrl,導致英文輸入的時候很容易切換回中文
    3. 原創者無心經營更新改善,最新版0.4版不知道如何下載

    我現在使用 0.3.4.8版本,懇請告訴我如何下載0.4版,感恩!