Use native candidate actions and harden frontend resource loading

This commit is contained in:
justme committed 2026-10-20 11:52:39 +08:00
1 parent 99fe8f589f
commit d8e780dfa1
18 files changed
+1083 -227

No files matched your search

+15 -15
View File
@@ -10,7 +10,7 @@
刚度、阻尼、方向、距离都可以调。
- 在候选词上**右键**打开动作菜单,内容取决于输入法提供的动作。拼音有
"忘记候选词 / 置顶为自定义短语 / 从自定义短语中删除"。
- **忘记候选词后不会再出现**,包括系统词库和扩展词库里的词(见下文"屏蔽列表")。
- 候选菜单只调用引擎提供的原生动作,不在前端屏蔽词语。
- Wayland 和 X11(Xwayland)输入上下文都支持,定位和鼠标处理沿用 `classicui`。
- 可选的 KWin 辅助脚本:只缩短候选框自己的 KWin 淡出时间。
@@ -104,23 +104,23 @@ systemctl --user daemon-reload && systemctl --user restart app-org.fcitx.Fcitx5@
`SurfaceColor` 完全透明时回退到 classicui 的图片绘制,所以原有的 classicui
主题仍然可用(但没有动画)。
## 屏蔽列表
## 候选动作与资源防护
拼音引擎的"忘记候选词"只会删除你自己打字学到的词,系统词库(`sc.dict`)和
扩展词库里的词是只读的,忘记之后重新输入仍会出现,当前输入状态里也一样。
右键菜单只显示引擎的 `candidateActions()` 并通过 `triggerAction()` 调用。
“忘记”由引擎处理,不保证永久隐藏或降低到某个排名。前端不再读取或写入
旧的 `blocked-words.txt`,已有文件不会被删除。
所以 m3ui 在你点"忘记候选词"时,会把这个词记到
`~/.local/share/fcitx5/m3ui/blocked-words.txt`(一行一个词),并在每次刷新候选
之前把它们从候选列表里摘掉。
图片限制为 16 MiB 文件、单边不超过 8192 像素、总计不超过 16 Mi 像素。
SVG 渲染一次后缓存为位图,异常资源回退到既有主题或文字图标。
这些限制不是解码沙箱,不能保证复杂 SVG 的处理时间,也不能替代底层库安全更新。
- 按候选词的完整文字精确匹配,只隐藏这个词本身。
- **重启不会丢**:文件是原子写入的(先写临时文件、`fsync` 再改名,中途被杀也不会留下写坏的文件),
权限是 `600`;某次保存失败时这个词在本次运行里仍然隐藏,下次会重试写入。
- 文件被别的程序或手动修改后会自动重新读取,不用重启。
- 只有**通过右键菜单点"忘记候选词"**才会记录。用拼音自带的快捷键(`Ctrl+7`)忘记的词不会被记录,
这类词如果来自系统词库,下次还会出现。
- 想恢复某个词:删掉文件里对应的一行即可。
- 这是界面层的补充。换回原版 classicui 后,这些词会重新出现。
`patches/fcitx5-icon-cache.patch` 修复核心图标缓存的循环链、越界、
字符串终止和映射文件截断问题,损坏缓存回退为文件查找。
`build.sh` 会检查并应用此补丁;但 `install.sh` 只安装插件,
**不会替换运行中的 Fcitx5 核心库**,所以仅安装插件不代表核心修复已部署。
构建后可运行 `bash scripts/test.sh` 验证候选菜单、缓存和真实图片解码。
也可通过 `FCITX_SOURCE_DIR`、`FCITX_BUILD_DIR` 指定已有源码和构建目录。
## KWin 淡出(可选,KDE Plasma)