- DLL 只在 Shift/Ctrl 切换、Shift+Space、Ctrl+.、Caps Lock 与 Ctrl+Shift+F 处显式请求提示;Server 下发的模式同步、宿主转换模式 同步和激活初始化不再弹出提示,移除 compartment 回调里的推断逻辑 - 恢复文档切换时候选窗的 OnKillThreadFocus,改用 COM 身份比较 - 能力位改名为 CaretStateIndicator,DLL 仅在 Server 确认后发送切换 事件;Server 端这些事件只驱动提示,不再改写工具栏或状态快照 - 标点提示的中英模式由 DLL 随 PuncSwitch 携带 - UILess 宿主不显示提示,会话转为 UILess 时隐藏已显示的提示 - Ctrl+Shift+F 的锚点就地读取,不再覆盖 Global::Point,且只采信 协商了该能力的客户端 - 撤回对所有包默认 point 的修改;提示窗口创建失败不再阻断 Server 启动;提示内容改为结构化 CaretStateBadge - Caps Lock 在同一按键重复进入 TestKeyDown 时只处理一次
windows —— TSF 文本服务
水杉输入法在 Windows 上的前端:一个纯 TSF 方案的文本服务 DLL,注入宿主进程,负责按键预判、焦点与线程归属、composition 的 edit session 写入,以及与 Server 之间的命名管道协议。候选窗、工具栏、设置页和实际的候选计算都在 ../server/,本目录只做宿主适配。
产品介绍、安装和功能说明见仓库根目录的 README;本目录的代码地图、TSF/COM 硬约定和改动要求见 AGENTS.md。
构建
从仓库根目录配置,源码目录是本目录:
cmake -S windows -B windows/build -A x64 `
-DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_INSTALLATION_ROOT/scripts/buildsystems/vcpkg.cmake" `
-DVCPKG_TARGET_TRIPLET=x64-windows-static
cmake --build windows/build --config Release --parallel
ctest --test-dir windows/build -C Release --output-on-failure
Win32 用 -A Win32 和 x86-windows-static;安装包两种架构都要。scripts/ 下是本机开发用的生成、构建、注册和签名脚本,从本目录运行。
引擎契约来自 ../engine/contracts/,是本仓的目录,普通检出就有。TSF 只引用这些头文件,不链接引擎运行库。