問題描述
「加詞失敗:字數不符或夾雜符號」這個錯誤訊息把兩種不同的失敗原因合併成一句,其中「字數不符」的實際成因(加詞方向設定為向後抓字、但游標在緩衝區尾端)對使用者完全不可見,容易誤導使用者往「符號」方向排查。
實際案例:使用者在 fcitx5-chewing(預設 AddPhraseForward=True,對應 chewing_set_addPhraseDirection(ctx, 0))打出「物流士」三個純漢字後按 Ctrl+3,反覆失敗。因為游標停在句尾、方向設定又是抓游標後面的字,所以永遠「字數不符」——但訊息裡的「夾雜符號」讓使用者一直懷疑是輸入內容有問題,而不是游標位置/方向設定。
環境
- libchewing 0.11.0(Ubuntu 26.04 套件
libchewing3 0.11.0-1)
- fcitx5-chewing 5.1.10
重現步驟
使用 Python ctypes 直接呼叫 C API(乾淨的暫存使用者詞庫):
import ctypes, os, tempfile
lib = ctypes.CDLL("libchewing.so.3")
lib.chewing_new2.restype = ctypes.c_void_p
lib.chewing_new2.argtypes = [ctypes.c_char_p]*2 + [ctypes.c_void_p]*2
lib.chewing_aux_String.restype = ctypes.c_char_p
lib.chewing_aux_String.argtypes = [ctypes.c_void_p]
def run(label, direction, left_moves):
tmpdir = tempfile.mkdtemp()
ctx = ctypes.c_void_p(lib.chewing_new2(
None, os.path.join(tmpdir, "chewing.dat").encode(), None, None))
lib.chewing_set_maxChiSymbolLen(ctx, 20)
if direction is not None:
lib.chewing_set_addPhraseDirection(ctx, direction)
for ch in "j4xu.6g4": # ㄨˋ ㄌㄧㄡˊ ㄕˋ(三個純漢字)
lib.chewing_handle_Default(ctx, ord(ch))
for _ in range(left_moves):
lib.chewing_handle_Left(ctx)
lib.chewing_handle_CtrlNum(ctx, ord('3'))
print(label, "->", lib.chewing_aux_String(ctx).decode())
run("預設方向、游標句尾", None, 0)
run("預設方向、游標句首", None, 3)
run("direction=1、游標句尾", 1, 0)
輸出:
預設方向、游標句尾 -> 加詞失敗:字數不符或夾雜符號
預設方向、游標句首 -> 加入:勿流逝
direction=1、游標句尾 -> 加入:勿流逝
緩衝區內是三個純漢字、完全沒有符號,但訊息仍然提到「夾雜符號」。
建議
把兩種失敗原因拆成兩個訊息,例如:
- 字數不符(方向抓不到足夠的字):「加詞失敗:游標之後(或之前,依方向設定)不足 N 個字」
- 真的夾雜符號時才顯示:「加詞失敗:詞中夾雜符號」
這樣使用者能立刻知道該調整的是游標位置或加詞方向設定,而不是去檢查輸入內容。
(附帶一提:前端 fcitx5-chewing 的選項文案「前方加詞」也不容易讓人聯想到「抓游標後方的字」,若訊息拆開後能帶出方向資訊,對前端使用者的困惑會有很大幫助。)
必要的話我可以協助提 PR。
問題描述
「加詞失敗:字數不符或夾雜符號」這個錯誤訊息把兩種不同的失敗原因合併成一句,其中「字數不符」的實際成因(加詞方向設定為向後抓字、但游標在緩衝區尾端)對使用者完全不可見,容易誤導使用者往「符號」方向排查。
實際案例:使用者在 fcitx5-chewing(預設
AddPhraseForward=True,對應chewing_set_addPhraseDirection(ctx, 0))打出「物流士」三個純漢字後按Ctrl+3,反覆失敗。因為游標停在句尾、方向設定又是抓游標後面的字,所以永遠「字數不符」——但訊息裡的「夾雜符號」讓使用者一直懷疑是輸入內容有問題,而不是游標位置/方向設定。環境
libchewing30.11.0-1)重現步驟
使用 Python ctypes 直接呼叫 C API(乾淨的暫存使用者詞庫):
輸出:
緩衝區內是三個純漢字、完全沒有符號,但訊息仍然提到「夾雜符號」。
建議
把兩種失敗原因拆成兩個訊息,例如:
這樣使用者能立刻知道該調整的是游標位置或加詞方向設定,而不是去檢查輸入內容。
(附帶一提:前端 fcitx5-chewing 的選項文案「前方加詞」也不容易讓人聯想到「抓游標後方的字」,若訊息拆開後能帶出方向資訊,對前端使用者的困惑會有很大幫助。)
必要的話我可以協助提 PR。