Skip to content

PIME 2.0.0-beta5 測試版釋出

Pre-release
Pre-release

Choose a tag to compare

@PCMan PCMan released this 14 Nov 22:05

PIME 2.0.0-beta5 更新內容

本版本包含多項穩定性強化、後端容錯機制改善,以及新酷音、Rime、大易、倉頡等輸入法的錯誤修正。

核心架構、PIMELauncher 與 TSF 客戶端

  • 修正 Watchdog 誤殺正常後端行程的問題 (#1002):當客戶端視窗斷線或送出不需回應的 close 通知時,自動清除殘留的等待中請求,避免 15 秒後觸發 watchdog 誤判後端無回應而強制重啟。
  • 確保視窗關閉通知 (close) 正確轉發至後端 (#990, #997):修正 PIMELauncher 誤丟棄正常斷線通知的問題,確保後端能正常釋放已關閉視窗的資源,並在後端異常終止時立即排空輸入佇列。
  • 強化 IPC 訊息格式驗證 (#998):在轉發訊息至後端前驗證 Client ID 長度與分隔符號,過濾格式異常的輸入。
  • PIMELauncher 改為靜態連結 MSVC CRT (#975, #983, #990):移除對外部 VCRUNTIME140.dll 的動態相依,解決部分環境缺少 VC++ 可轉散發套件導致無法啟動的問題。
  • 管理員權限啟動警告 (#973, #1016):當偵測到 PIMELauncher 以提升權限(Elevated)執行時,於日誌中記錄警告與 icacls 權限修復指令說明。
  • 修正 PIMEClient 初始化狀態切換順序 (#994):在派發 init 回應前先將連線狀態設為 Ready,確保初始化期間的回呼能正常運作。
  • 修正候選字視窗版面配置套用順序 (#1019):在 PIMETextService::updateStatus() 中先套用 customizeUI(例如每列候選字數)再更新候選字清單,避免首次顯示使用舊版面。
  • 修正 DLL 註冊時的圖示索引傳遞與成員初始化 (#992, #993):確保 Windows 8+ 專用圖示索引(iconIndex)於註冊時正確傳入,並明確初始化 PIMETextService 成員變數。

新酷音輸入法 (Chewing)

  • 修正使用者詞庫編輯器無法刪除詞彙與狀態回報錯誤的問題 (#393, #417, #456, #1022):移除在傳統字碼頁主控台下會引發 UnicodeEncodeError 的除錯輸出,使刪除詞彙能正常執行,並正確回報新增/刪除結果與重新整理列表。
  • 強化詞庫載入容錯機制 (#988):若磁碟上的使用者詞庫無法開啟,自動退回使用記憶體內(in-memory)資料庫,避免後端崩潰。

CIN 表格輸入法引擎與各輸入法 (倉頡、大易、行列、輕鬆、注音、拼音、速成、嘸蝦米)

  • 碼表改為非同步背景載入 (#1004):引入 CinTableBase 與 ThreadPoolExecutor 非阻塞載入主碼表、反查碼表與同音字碼表,移除原本耗用 CPU 的 busy-wait 輪詢迴圈。
  • 修正設定檔參數容錯與空值崩潰問題 (#864, #933):自動驗證並修正 candPerPage、candPerRow 與 fontSize 等設定值,避免設定檔空白或異常時引發崩潰。
  • 修正萬用字元查詢崩潰問題 (#627, #934):完整初始化低頻字集並最佳化萬用字元查詢,解決 KeyError 異常。
  • 修正大易輸入法符號輸入卡住組字狀態的問題 (#856, #935):補齊 dsymbols.json 中的 = 與 - 定義,並在無候選字按下空白鍵、Enter 或 Esc 時正確重置組字狀態。
  • 補齊大易三碼遺漏的官方字碼 (#520, #1018):補回 tf8(續)等 10 組遺漏字碼。
  • 修正倉頡系列與速成五代碼表中「㤘」的部首編碼 (#390, #1020, #1023):將誤置於手部(qnsm / qm)的「㤘」修正為心部(pnsm / pm)。
  • 修正設定工具 (ConfigApp) 無法自動結束的問題 (#1027, #1028):確保設定視窗逾時關閉時先停止事件迴圈再關閉,避免背景處理程序殘留。

Rime 輸入法

  • 修正共用 librime 引擎生命週期問題 (#1003):移除單一視窗關閉鍵盤或重新部署時過早呼叫的 rime.finalize(),改於後端行程結束時統一釋放,避免其他視窗的 Rime 輸入法失效。

Python / Node.js / Go 後端與其他輸入法

  • 修正設定檔與日誌目錄的 NTFS 權限問題 (#988):移除 os.makedirs 中的 mode=0o700,避免在 Windows 上產生異常的目錄權限(DACL)。
  • 修正按鍵狀態位元遮罩檢查 (#1000):修正 Python 後端對 Windows API GetAsyncKeyState 與 GetKeyState 回傳值的位元檢查邏輯。
  • 提升 Node.js 後端 (nime) 穩定性 (#936, #937, #945, #946, #951, #952, #971):加入全域例外捕捉,並妥善處理未初始化客戶端請求、損毀的 ime.json 或格式錯誤的訊息,防止單一錯誤導致整個 Node.js 後端終止。
  • 修正 Emoji 輸入法候選字游標與選字邊界檢查 (#999):防止空清單時產生 NaN 游標位移,並修正候選字滿 10 個時的數字鍵選字問題。
  • 修正 Go 後端「喵喵輸入法」語系設定 (#1024):將語系註冊由 zh-CN 修正為繁體中文 zh-TW。

安裝程式與文件

  • 修正 Node.js 輸入法設定工具缺少 Python 環境的問題 (#977, #989):勾選安裝小麥注音、狐狸輸入法或行列 30 時,自動一併安裝設定工具所需的內建 Python 執行環境。
  • 安裝程式最低系統需求調整為 Windows 10 (#966, #976, #1005):於安裝初期檢查 Windows 10 以上版本,並移除過時的 VC++ 可轉散發套件下載步驟。
  • 更新開發與建置文件 (#832, #981, #1008):更新 README.md 與 HACKING.txt 中的建置環境與 Python 版本說明。

完整變更對比: v2.0.0-beta4...v2.0.0-beta5

What's Changed

  • build(launcher): statically link the MSVC CRT by @asdf80730 in #975
  • installer: remove obsolete VCRedist bootstrap and inetc (#966) by @asdf80730 in #976
  • fix(launcher): add immediate stdin drain on restart and enable crt-static (#983) by @PCMan in #990
  • fix(installer): install Python runtime when McBopomofo, McFoxim, or McTabim are selected (#977) by @PCMan in #989
  • fix(python): remove mode=0o700 DACL lockout and add chewing in-memory fallback by @PCMan in #988
  • cinbase: sanitize candPerPage and candPerRow to prevent crash (#864) by @PCMan in #933
  • cinbase: fix KeyError crash in wildcard lookup (#627) by @PCMan in #934
  • chedayi: add = and - symbol mappings and fix stuck composition (#856) by @PCMan in #935
  • docs: refine AI declaration, copyright notice, and modification rules in AGENTS.md by @PCMan in #991
  • fix(PIMETextService): initialize popupMenu_ and currentLangProfile_ members by @PCMan in #992
  • fix(PIMEClient): set Ready state before dispatching init response by @PCMan in #994
  • docs: emphasize focused, small PRs solving one problem at a time in AGENTS.md by @PCMan in #996
  • fix(registration): pass iconIndex to LangProfileInfo during DllRegisterServer by @PCMan in #993
  • nime: keep the Node.js backend alive on uninitialized clients and malformed lines (#936, #937) by @ilwu in #971
  • docs: make README build and install instructions match the tree (#832) by @asdf80730 in #981
  • fix(PIMELauncher): forward close notifications to backends without dropping by @PCMan in #997
  • feat(PIMELauncher): validate client ID width in backend input by @PCMan in #998
  • fix(node): prevent process crash on uncaught exception (#936) by @PCMan in #945
  • fix(node): guard loadServices against missing or invalid ime.json (#951) by @PCMan in #952
  • fix(node): handle pre-init and unknown service requests gracefully (#937) by @PCMan in #946
  • fix(python): correct GetAsyncKeyState and GetKeyState bitmask checks by @PCMan in #1000
  • fix(emojime): guard candidateCursor and candidate selection bounds by @PCMan in #999
  • feat(cinbase): asynchronous table loading with Future and CinTableBase by @PCMan in #1004
  • docs: correct the bundled Python version in HACKING.txt by @asdf80730 in #1008
  • PIMETextService: apply customizeUI before the candidate list by @DaveTseng2019 in #1019
  • fix(cinbase): stop 酷倉 offering the wrong-radical 㤘 under qnsm (#390) by @asdf80730 in #1020
  • fix(cinbase): stop the 倉頡 siblings offering 㤘 under 手 codes (#390) by @asdf80730 in #1023
  • fix(cinbase): give 大易三碼 the official codes it dropped (#520) by @asdf80730 in #1018
  • fix(go-backend): register 喵喵 under the Traditional Chinese locale by @asdf80730 in #1024
  • chore(python): ignore pycache bytecode caches by @asdf80730 in #1015
  • Fix event loop handling in ConfigApp to ensure proper closure by @leon728 in #1028
  • feat(installer): require Windows 10 or later by @asdf80730 in #1005
  • fix(PIMELauncher): purge disconnected requests to prevent watchdog false positives by @PCMan in #1002
  • fix(rime): keep shared librime instance alive during session lifecycle by @PCMan in #1003
  • fix(launcher): warn in the log when started elevated (#973) by @asdf80730 in #1016
  • fix(chewing): let the user-phrase editor finish deletes and report the truth (#393 #417 #456) by @asdf80730 in #1022

New Contributors

Full Changelog: v2.0.0-beta4...v2.0.0-beta5

What's Changed

  • build(launcher): statically link the MSVC CRT by @asdf80730 in #975
  • installer: remove obsolete VCRedist bootstrap and inetc (#966) by @asdf80730 in #976
  • fix(launcher): add immediate stdin drain on restart and enable crt-static (#983) by @PCMan in #990
  • fix(installer): install Python runtime when McBopomofo, McFoxim, or McTabim are selected (#977) by @PCMan in #989
  • fix(python): remove mode=0o700 DACL lockout and add chewing in-memory fallback by @PCMan in #988
  • cinbase: sanitize candPerPage and candPerRow to prevent crash (#864) by @PCMan in #933
  • cinbase: fix KeyError crash in wildcard lookup (#627) by @PCMan in #934
  • chedayi: add = and - symbol mappings and fix stuck composition (#856) by @PCMan in #935
  • docs: refine AI declaration, copyright notice, and modification rules in AGENTS.md by @PCMan in #991
  • fix(PIMETextService): initialize popupMenu_ and currentLangProfile_ members by @PCMan in #992
  • fix(PIMEClient): set Ready state before dispatching init response by @PCMan in #994
  • docs: emphasize focused, small PRs solving one problem at a time in AGENTS.md by @PCMan in #996
  • fix(registration): pass iconIndex to LangProfileInfo during DllRegisterServer by @PCMan in #993
  • nime: keep the Node.js backend alive on uninitialized clients and malformed lines (#936, #937) by @ilwu in #971
  • docs: make README build and install instructions match the tree (#832) by @asdf80730 in #981
  • fix(PIMELauncher): forward close notifications to backends without dropping by @PCMan in #997
  • feat(PIMELauncher): validate client ID width in backend input by @PCMan in #998
  • fix(node): prevent process crash on uncaught exception (#936) by @PCMan in #945
  • fix(node): guard loadServices against missing or invalid ime.json (#951) by @PCMan in #952
  • fix(node): handle pre-init and unknown service requests gracefully (#937) by @PCMan in #946
  • fix(python): correct GetAsyncKeyState and GetKeyState bitmask checks by @PCMan in #1000
  • fix(emojime): guard candidateCursor and candidate selection bounds by @PCMan in #999
  • feat(cinbase): asynchronous table loading with Future and CinTableBase by @PCMan in #1004
  • docs: correct the bundled Python version in HACKING.txt by @asdf80730 in #1008
  • PIMETextService: apply customizeUI before the candidate list by @DaveTseng2019 in #1019
  • fix(cinbase): stop 酷倉 offering the wrong-radical 㤘 under qnsm (#390) by @asdf80730 in #1020
  • fix(cinbase): stop the 倉頡 siblings offering 㤘 under 手 codes (#390) by @asdf80730 in #1023
  • fix(cinbase): give 大易三碼 the official codes it dropped (#520) by @asdf80730 in #1018
  • fix(go-backend): register 喵喵 under the Traditional Chinese locale by @asdf80730 in #1024
  • chore(python): ignore pycache bytecode caches by @asdf80730 in #1015
  • Fix event loop handling in ConfigApp to ensure proper closure by @leon728 in #1028
  • feat(installer): require Windows 10 or later by @asdf80730 in #1005
  • fix(PIMELauncher): purge disconnected requests to prevent watchdog false positives by @PCMan in #1002
  • fix(rime): keep shared librime instance alive during session lifecycle by @PCMan in #1003
  • fix(launcher): warn in the log when started elevated (#973) by @asdf80730 in #1016
  • fix(chewing): let the user-phrase editor finish deletes and report the truth (#393 #417 #456) by @asdf80730 in #1022

New Contributors

Full Changelog: v2.0.0-beta4...v2.0.0-beta5