windows-chewing-tsf 25.8.1.0 釋出

192 views
Skip to first unread message

Kan-Ru Chen

unread,
Jul 31, 2025, 7:52:55 AMJul 31
to chewing-devel, che...@googlegroups.com
從這裡下載原始碼跟我們提供的安裝檔:

https://github.com/chewing/windows-chewing-tsf/releases/tag/v25.8.1.0

### 🚀 主要新功能

- 全新設定介面:採用 Slint UI 框架重新設計,整合詞庫編輯器與設定功能
- 詞庫編輯器增強:支援詞彙排序、篩選與檔案路徑顯示功能
- 外觀自訂:可設定字型、字型顏色、背景顏色與半透明候選字視窗
- 符號輸入改善:支援 Shift 快速符號輸入與 Shift+Ctrl 組合鍵
- 簡體中文轉換:新增 Ctrl+F12 快速切換簡體中文轉換功能,使用新的轉換引擎
- 全形模式控制:可自訂全形切換鍵啟用狀態,並新增選單切換項目
- 通知系統:可設定通知顯示與使用者詞彙提醒
- UILess 模式:支援無介面模式運作,與全螢幕遊戲相容

### 🐛 重要修復

- 高 DPI 支援:完善高解析度螢幕下的字型縮放與視窗定位
- 應用程式相容性:修正與舊版 Delphi 應用程式和沙盒應用程式的相容問題
- 按鍵處理:正確處理 Shift 鍵、全形切換與修飾鍵組合
- 候選字視窗:修復視窗裁切與座標轉換精確度問題
- 語言列按鈕:確保輸入模式按鈕正常載入與顯示
- 使用者詞庫:確保使用者自訂詞彙優先於系統詞庫

### 🚜 架構改善

- Rust 重構:大幅將 C++ 程式碼重構為 Rust,提升穩定性與效能
- 記憶體管理:修復選單記憶體洩漏與循環參考問題
- 錯誤處理:改善錯誤記錄與異常處理機制
- 程式碼品質:修正警告並簡化程式碼結構

### 🎨 介面更新

- 系統匣圖示:重新設計系統匣圖示
- 深色模式:改善深色模式偵測與支援
- 本地化字型:正確顯示與排序本地化字型名稱

此次重大更新全面重構核心架構,新增豐富的自訂功能,大幅提升使用體驗與系統相容性。

完整修改紀錄: https://github.com/chewing/windows-chewing-tsf/compare/v24.10.1...v25.8.1.0

Happy hacking,
Kan-ru

黒詩紅月

unread,
Jul 31, 2025, 9:01:07 PMJul 31
to Chewing IM Development
早上一看到消息,馬上在意幾件事情。

有沒有辦法銜接PIME版的詞庫。
詞彙優先度的設計如何。
有沒有辦法實裝提升詞彙優先度的快捷鍵。
詞庫有沒有辦法與英文數字紀錄。
有沒有辦法自己做腳本來快速備份詞庫檔案。

謝謝製作者團隊們的設計用心努力,先來體驗看看。(⑉˙▿˙⑉)

2025年7月31日木曜日 20:52:55 UTC+9 Kan-Ru Chen:

xxx...@gmail.com

unread,
Aug 1, 2025, 5:53:05 PMAug 1
to Chewing IM Development
目前在win10環境使用上發現的問題是選字視窗彈出的速度太慢了
體感似乎時不時就出現要半秒鐘以上選字視窗才會跳出
使用簡單注音模式就會更明顯感覺這個問題
新酷音選字是按空白鍵可以比其他輸入法更快更不影響節奏的選字
不過選字視窗彈出的速度太慢很影響打字速度
Kan-Ru Chen 在 2025年7月31日 星期四晚上7:52:55 [UTC+8] 的信中寫道:

Kan-Ru Chen

unread,
Aug 1, 2025, 5:59:12 PMAug 1
to chewing-devel
感謝回報,雖然我已經沒有 win10 可以測試了,我有想到一個可能可以改善的地方

--
這是 Google 網路論壇針對「Chewing IM Development」群組發送的訂閱通知郵件。
如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 chewing-deve...@googlegroups.com

Message has been deleted

Ken Hsiao

unread,
Aug 4, 2025, 8:24:22 PMAug 4
to Chewing IM Development
在HYPER-V的虛擬機上安裝,作業系統為WIN11,無法開啟編輯詞庫及設定輸入法的視窗!

Kan-Ru Chen 在 2025年8月2日 星期六清晨5:59:12 [UTC+8] 的信中寫道:

Kan-Ru Chen

unread,
Aug 5, 2025, 5:57:07 PMAug 5
to chewing-devel
請問有試過其他的 VM 技術嗎?
我目前沒有 hyper-v 可以測試

On Mon, Aug 4, 2025, at 12:31 PM, Ken Hsiao wrote:
在HYPER-V的虛擬機上安裝,作業系統為WIN11,無法開啟編輯詞庫及設定輸入法的視窗!


Ken Hsiao

unread,
Aug 5, 2025, 8:16:22 PMAug 5
to Chewing IM Development
抱歉,我只有HYPER-V的虛擬機,我也試過於 C:\Program Files\ChewingTextService 目錄下,直接執行依然沒有反應!
目前是用PIME版本,可以正常使用!

Kan-Ru Chen 在 2025年8月6日 星期三清晨5:57:07 [UTC+8] 的信中寫道:

Kan-Ru Chen

unread,
Aug 9, 2025, 9:02:37 AMAug 9
to chewing-devel
我測試後發現是因為 Hyper-V 上面預設沒有需要的 GL 繪圖加速
我看看能不能加個自動退回軟體繪圖
--
這是 Google 網路論壇針對「Chewing IM Development」群組發送的訂閱通知郵件。
如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 chewing-deve...@googlegroups.com

ken

unread,
Aug 11, 2025, 9:07:44 PMAug 11
to chewin...@googlegroups.com
太感謝了

Kan-Ru Chen <ka...@kanru.info>於 2025年8月9日 週六,21:02寫道:

magi...@gmail.com

unread,
Aug 14, 2025, 3:35:26 AMAug 14
to Chewing IM Development
這個問題也困擾我很久, 期待 Kan-Ru 的修正.

暫時可用軟體模擬 GL 繪圖 https://fdossena.com/?p=mesa/index.frag
解開 opengl32.dll 複製到 C:\Program Files\ChewingTextService 底下就可以了.
ken 在 2025年8月12日 星期二上午9:07:44 [UTC+8] 的信中寫道:

ken

unread,
Aug 14, 2025, 4:07:55 AMAug 14
to chewin...@googlegroups.com
感謝,測試可以使用!

magi...@gmail.com <magi...@gmail.com> 於 2025年8月14日 週四 下午3:35寫道:

Ken Hsiao

unread,
Aug 20, 2025, 9:24:45 PMAug 20
to Chewing IM Development
在加入使用者詞庫的功能,目前只能 CTRL+上方的數字鍵加入詞庫,可否加入 CTRL +右方的數字鍵也可以加入,因為在部份軟體如LINE,CTRL+上方的數字鍵應該和軟體本身的熱鍵衝突沒辦法加入自訂詞庫,謝謝!

ken 在 2025年8月14日 星期四下午4:07:55 [UTC+8] 的信中寫道:

Kan-Ru Chen

unread,
Aug 21, 2025, 9:47:02 AMAug 21
to chewing-devel

magi...@gmail.com

unread,
Aug 25, 2025, 10:26:49 AMAug 25
to Chewing IM Development

25.8.1.466 修正 Hyper-V 相容性後, 在 QEMU 虛擬機還是無法使用; 即使用軟體模擬 GL 繪圖也不行, 之後的預覽版也都用不了.
是否能手動修改設定, 關閉 GL 繪圖加速?
ken 在 2025年8月14日 星期四下午4:07:55 [UTC+8] 的信中寫道:
感謝,測試可以使用!

Kan-Ru Chen

unread,
Aug 25, 2025, 9:47:48 PMAug 25
to magi...@gmail.com, chewing-devel
可以分享一下你的 QEMU 設定嗎?感覺不是單純的 GL 繪圖問題

xxx EVA

unread,
Aug 29, 2025, 12:54:08 AMAug 29
to chewin...@googlegroups.com
建議
新增PIME就有的個人詞庫刪詞快速鍵Ctrl+Del
因為輸入法會自行加詞
有時後會加錯而出現不應該存在的詞條
目前詞庫的刪詞也還沒完善方便
若能在選詞視窗中使用刪詞快速鍵可以快速解決錯誤詞的問題

--
您已訂閱「Google 網路論壇」的「Chewing IM Development」群組,因此我們特別傳送這封郵件通知您。
如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 chewing-deve...@googlegroups.com
如要查看這個討論,請前往 https://groups.google.com/d/msgid/chewing-devel/6dbd69bd-32c0-4695-8958-8a531c9593d9%40app.fastmail.com

Kan-Ru Chen

unread,
Aug 29, 2025, 8:16:52 AMAug 29
to chewing-devel
滿多人回饋這個的,先紀錄在 https://github.com/chewing/windows-chewing-tsf/issues/455
--
這是 Google 網路論壇針對「Chewing IM Development」群組發送的訂閱通知郵件。
如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 chewing-deve...@googlegroups.com

magi...@gmail.com

unread,
Aug 30, 2025, 10:52:42 PMAug 30
to Chewing IM Development
我是用 NAS 中的 GUI 設定虛擬機,不清楚 QEMU 的參數是什麼。
在 is_vm() 打印 name.as_str() 結果是空白,不過誤判為實體機應該會用軟體模擬的 opengl32.dll 才對,不知為何還是無法顯示?

改成直接 return true; 就能顯示, 不過顯示速度有點慢,覺得還是用軟體模擬的 opengl32.dll 會比較好,也不用考慮不同的虛擬環境。
--- a/preferences/src/main.rs
+++ b/preferences/src/main.rs
@@ -29,6 +29,7 @@ fn main() -> anyhow::Result<()> {
 }
 
 fn is_vm() -> bool {
+    return true;
     if let Some(mb) = sysinfo::Motherboard::new() {
         let name = mb.name().unwrap_or_default();
         return ["Virtual Machine"].contains(&name.as_str());

另外,在編譯時遇到一些問題想請教: (使用 VS 2022)
1. 編譯前為何要檢查本機 chewing-cli -V? 我把 chewing-cli.exe 複製到 .cargo\bin 才能繼續。

2. 編譯 32bit tip 時 could not find native static library sqlite3
--- a/tip/Cargo.toml
+++ b/tip/Cargo.toml
@@ -10,6 +10,7 @@ build = "build.rs"
 crate-type = ["cdylib"]
 
 [dependencies]
+libsqlite3-sys = { version = "0.35", features = ["bundled"] }
 anyhow = "1.0.95"
 chewing = { version = "0.10.0", features = ["sqlite"] }
 chewing_capi = { version = "0.10.0", features = ["sqlite"] }

3. 判斷 gnu/msvc 似乎有問題,製作安裝檔的 source 路徑有誤
--- a/xtask/src/installer.rs
+++ b/xtask/src/installer.rs
@@ -39,11 +39,11 @@ pub(crate) fn build_installer(flags: BuildInstaller) -> Result<()> {
     };
 
     let x86_64_target = match flags.target {
-        None | Some(Target::Gnu) => "x86_64-pc-windows-gnu",
+        None | Some(Target::Gnu) => "x86_64-pc-windows-msvc",
         Some(Target::Msvc) => "x86_64-pc-windows-msvc",
     };
     let i686_target = match flags.target {
-        None | Some(Target::Gnu) => "i686-pc-windows-gnu",
+        None | Some(Target::Gnu) => "i686-pc-windows-msvc",
         Some(Target::Msvc) => "i686-pc-windows-msvc",
     };
 
@@ -225,7 +225,7 @@ pub(crate) fn package_installer(_flags: PackageInstaller) -> Result<()> {
         .run()?;
     }
     sh.copy_file(
-        "build/installer/bin/Release/zh-TW/windows-chewing-tsf.msi",
+        "build/installer/bin/x64/Release/zh-TW/windows-chewing-tsf.msi",
         "dist/windows-chewing-tsf-unsigned.msi",
     )?;

4. ChewingPreferences.exe 大小有 22M,執行時命令列視窗一直開著.
Kan-Ru Chen 在 2025年8月26日 星期二上午9:47:48 [UTC+8] 的信中寫道:

Kan-Ru Chen

unread,
Aug 30, 2025, 11:49:28 PMAug 30
to chewing-devel
On Sun, Aug 31, 2025, at 11:52 AM, magi...@gmail.com wrote:
我是用 NAS 中的 GUI 設定虛擬機,不清楚 QEMU 的參數是什麼。
在 is_vm() 打印 name.as_str() 結果是空白,不過誤判為實體機應該會用軟體模擬的 opengl32.dll 才對,不知為何還是無法顯示?

感謝你詳細的測試!


改成直接 return true; 就能顯示, 不過顯示速度有點慢,覺得還是用軟體模擬的 opengl32.dll 會比較好,也不用考慮不同的虛擬環境。
--- a/preferences/src/main.rs
+++ b/preferences/src/main.rs
@@ -29,6 +29,7 @@ fn main() -> anyhow::Result<()> {
 }
 
 fn is_vm() -> bool {
+    return true;
     if let Some(mb) = sysinfo::Motherboard::new() {
         let name = mb.name().unwrap_or_default();
         return ["Virtual Machine"].contains(&name.as_str());

可以列印一下完整的內容嗎?

```
dbg!(sysinfo::Motherboard::new());
```

也許可以把空白的名稱都當作是 VM

另外,在編譯時遇到一些問題想請教: (使用 VS 2022)
1. 編譯前為何要檢查本機 chewing-cli -V? 我把 chewing-cli.exe 複製到 .cargo\bin 才能繼續。

因為目前使用系統 chewing-cli 來建立詞庫檔,未來考慮直接下載預先建立好的詞庫版本
不過可能也可以改用建置過程中產生的 chewing-cli 來建立詞庫檔

2. 編譯 32bit tip 時 could not find native static library sqlite3
--- a/tip/Cargo.toml
+++ b/tip/Cargo.toml
@@ -10,6 +10,7 @@ build = "build.rs"
 crate-type = ["cdylib"]
 
 [dependencies]
+libsqlite3-sys = { version = "0.35", features = ["bundled"] }
 anyhow = "1.0.95"
 chewing = { version = "0.10.0", features = ["sqlite"] }
 chewing_capi = { version = "0.10.0", features = ["sqlite"] }

上面,跟下面的問題應該都是因為用了 VS 2022 的 x64 native prompt
改用 VS 2022 的 Developer Command Prompt for VS 2022 才可以同時編譯 x64 跟 x86

3. 判斷 gnu/msvc 似乎有問題,製作安裝檔的 source 路徑有誤
--- a/xtask/src/installer.rs
+++ b/xtask/src/installer.rs
@@ -39,11 +39,11 @@ pub(crate) fn build_installer(flags: BuildInstaller) -> Result<()> {
     };
 
     let x86_64_target = match flags.target {
-        None | Some(Target::Gnu) => "x86_64-pc-windows-gnu",
+        None | Some(Target::Gnu) => "x86_64-pc-windows-msvc",
         Some(Target::Msvc) => "x86_64-pc-windows-msvc",
     };
     let i686_target = match flags.target {
-        None | Some(Target::Gnu) => "i686-pc-windows-gnu",
+        None | Some(Target::Gnu) => "i686-pc-windows-msvc",
         Some(Target::Msvc) => "i686-pc-windows-msvc",
     };
 
@@ -225,7 +225,7 @@ pub(crate) fn package_installer(_flags: PackageInstaller) -> Result<()> {
         .run()?;
     }
     sh.copy_file(
-        "build/installer/bin/Release/zh-TW/windows-chewing-tsf.msi",
+        "build/installer/bin/x64/Release/zh-TW/windows-chewing-tsf.msi",
         "dist/windows-chewing-tsf-unsigned.msi",
     )?;

4. ChewingPreferences.exe 大小有 22M,執行時命令列視窗一直開著.

Release 版的編譯指令是

    cargo xtask build-installer --target msvc --release

預設是除錯用的版本

magi...@gmail.com

unread,
Aug 31, 2025, 3:39:48 AMAug 31
to Chewing IM Development
看來並非 name 空白,而是 sysinfo::Motherboard::new() 出錯:
C:\Program Files\ChewingTextService>ChewingPreferences.exe
[preferences\src\main.rs:32:5] sysinfo::Motherboard::new() = Some(
    Motherboard
thread 'main' panicked at C:\Users\User\.cargo\registry\src\index.crates.io-1949cf8c6b5b557f\sysinfo-0.36.1\src\windows\utils.rs:138:31:
range start index 618 out of range for slice of length 424
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

改用 Developer Command Prompt for VS 2022 解決了一些問題,不過還是會出現 could not find native static library sqlite3

Kan-Ru Chen 在 2025年8月31日 星期日上午11:49:28 [UTC+8] 的信中寫道:

Kan-Ru Chen

unread,
Aug 31, 2025, 11:31:32 AMAug 31
to chewing-devel
On Sun, Aug 31, 2025, at 4:39 PM, magi...@gmail.com wrote:
看來並非 name 空白,而是 sysinfo::Motherboard::new() 出錯:
C:\Program Files\ChewingTextService>ChewingPreferences.exe
[preferences\src\main.rs:32:5] sysinfo::Motherboard::new() = Some(
    Motherboard
thread 'main' panicked at C:\Users\User\.cargo\registry\src\index.crates.io-1949cf8c6b5b557f\sysinfo-0.36.1\src\windows\utils.rs:138:31:
range start index 618 out of range for slice of length 424
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

改用 Developer Command Prompt for VS 2022 解決了一些問題,不過還是會出現 could not find native static library sqlite3

最新 git 上面的版本應該有改善,之前改了一些東西忘了推上去

請你再試試看囉

magi...@gmail.com

unread,
Sep 1, 2025, 5:55:40 AMSep 1
to Chewing IM Development
sqlite3 的問題已解決, 感謝!

在 QEMU 調用 sysinfo::Motherboard::new() 會發生 panic 而結束, 所以把空白的名稱當作是 VM 無法解決問題.
ChatGPT 說可以用 cpuid 判斷, 在 VMware, QEMU, VirtualBox 測試 OK.
不過軟體繪圖有 bug, 自動檢查更新的選單會變成空白:
2025-09-01 17 35 38.png

這裡提供從 ChatGPT 問來的 patch 給您參考, 我沒寫過 Rust, 不確定有沒有問題.
加 -no_vm 參數可以關閉 VM 偵測, 然後用 opengl32.dll 模擬 GL 就沒問題, 速度也快很多.

diff --git a/editor/Cargo.toml b/editor/Cargo.toml
index f4197ac..1913f5c 100644
--- a/editor/Cargo.toml
+++ b/editor/Cargo.toml
@@ -12,6 +12,7 @@ rfd = { version = "0.15.4", default-features = false }
sysinfo = "0.37.0"
win_dbg_logger = "0.1.0"
winit = "0.30.11"
+raw-cpuid = "11"

[dependencies.slint]
version = "1.8.0"
diff --git a/editor/src/main.rs b/editor/src/main.rs
index 0142c1e..8acbe23 100644
--- a/editor/src/main.rs
+++ b/editor/src/main.rs
@@ -20,10 +20,19 @@ fn main() -> anyhow::Result<()> {
Ok(())
}

+use raw_cpuid::CpuId;
fn is_vm() -> bool {
- if let Some(mb) = sysinfo::Motherboard::new() {
- let name = mb.name().unwrap_or_default();
- return matches!(name.as_str(), "Virtual Machine" | "");
+ if std::env::args().any(|arg| arg == "-no_vm") {
+ return false;
+ }
+
+ let cpuid = CpuId::new();
+ if let Some(feat) = cpuid.get_feature_info() {
+ if let Some(hv) = cpuid.get_hypervisor_info() {
+ dbg!(hv.identify());
+ }
+ feat.has_hypervisor()
+ } else {
+ false
}
- true
}
diff --git a/preferences/Cargo.toml b/preferences/Cargo.toml
index 5aa3c11..751b108 100644
--- a/preferences/Cargo.toml
+++ b/preferences/Cargo.toml
@@ -21,6 +21,7 @@ winit = "0.30.11"
sysinfo = "0.37.0"
rfd = { version = "0.15.4", default-features = false }
toml = "0.9.5"
+raw-cpuid = "11"

[dependencies.slint]
version = "1.8.0"
diff --git a/preferences/src/main.rs b/preferences/src/main.rs
index 1afdc0f..ff776e4 100644
--- a/preferences/src/main.rs
+++ b/preferences/src/main.rs
@@ -28,10 +28,19 @@ fn main() -> anyhow::Result<()> {
Ok(())
}

+use raw_cpuid::CpuId;
fn is_vm() -> bool {
- if let Some(mb) = sysinfo::Motherboard::new() {
- let name = mb.name().unwrap_or_default();
- return matches!(name.as_str(), "Virtual Machine" | "");
+ if std::env::args().any(|arg| arg == "-no_vm") {
+ return false;
+ }
+
+ let cpuid = CpuId::new();
+ if let Some(feat) = cpuid.get_feature_info() {
+ if let Some(hv) = cpuid.get_hypervisor_info() {
+ dbg!(hv.identify());
+ }
+ feat.has_hypervisor()
+ } else {
+ false
}
- true
}

Kan-Ru Chen 在 2025年8月31日 星期日晚上11:31:32 [UTC+8] 的信中寫道:

magi...@gmail.com

unread,
Sep 1, 2025, 9:44:52 PMSep 1
to Chewing IM Development
更新 25.8.1.470 後,QEMU 的問題解決了。感謝~~
不過還是有自動檢查更新的選單會變成空白的問題。

另外,這個版本在建立詞庫檔時,會先把路徑轉到 build/bin 再執行 chewing-cli,不過編譯還是會出現找不到 chewing-cli 的問題。
改成 ./build/bin/chewing-cli init --csv ./data/dict/chewing/tsi.csv ./build/installer/Dictionary/tsi.dat 就可以,好奇怪?

magi...@gmail.com 在 2025年9月1日 星期一下午5:55:40 [UTC+8] 的信中寫道:

Kan-Ru Chen

unread,
Sep 1, 2025, 11:07:28 PMSep 1
to magi...@gmail.com, chewing-devel


On Tue, Sep 2, 2025, at 10:44 AM, magi...@gmail.com wrote:
更新 25.8.1.470 後,QEMU 的問題解決了。感謝~~
不過還是有自動檢查更新的選單會變成空白的問題。

這是軟體渲染的問題,要等 Slint 修正


另外,這個版本在建立詞庫檔時,會先把路徑轉到 build/bin 再執行 chewing-cli,不過編譯還是會出現找不到 chewing-cli 的問題。
改成 ./build/bin/chewing-cli init --csv ./data/dict/chewing/tsi.csv ./build/installer/Dictionary/tsi.dat 就可以,好奇怪?

我猜是 shell 的問題,我開發的時候是用 nushell, CI 上面應該是用 CMD.exe


Reply all
Reply to author
Forward
0 new messages