更新说明
✨ 新功能
- 增加主题包 .wtheme:主题连同背景图等资源打成一个文件分发,双击即可导入
- 增加英文词组按 ' 分词输入
- 组合键能绑定的功能补齐到与单个按键一样多
- 显示编码提示升级为「编码提示来源」,支持双拼编码提示支持
- 增加「含生僻字的词组」是否过滤的功能
- 临时英文的「上屏后自动加空格」独立开关
- 增加工具栏「主动检测全屏状态」,优化一些系统和应用的全屏状态不准
- Valve 游戏兼容的登记名称改为可自定义(设置 → 高级 → 游戏兼容)
- 主题九宫格背景中段支持平铺,候选窗变宽时纹理不再跟着拉伸(slice_repeat,详见文档)
- 字符集分类表增加「优先」列与仲裁规则说明
- 设置程序关窗确认框会列出未保存的项,悬停可看、点击可复制
- 命令行增加 wind_input theme:主题列表、主题包预览与导入
- 增加码表方案自动切分功能(实验性)
⚡ 优化改进
- 英文「首候选为输入原文」改为三档方式
- 中文标点态下产物不变的上挡符号(默认 @#%&*)改为透传不吃键,与微软拼音一致
- 组合键可能被 Windows 抢走时,配键界面当场给出提示,两个配键入口都接上了
- 设置页「默认输入状态」挪到输入页页首,与二级导航对齐
- 手动加词的编码与文本长度加上上限(128 字 / 10000 字)
- 词库、码表等文本文件的导入改为流式处理行尾,大文件导入更快
- 部分设置项的说明文案与实际行为对不上,已逐条修正
- 英文方案改名为「清风英文」避免和英文模式混淆
🐛 问题修复
- 修正部分宿主下同时出现两个候选框、或候选窗停留在上一帧内容的问题
- 修正 Python Tkinter 等程序里中文态下 # % & 不上屏、反而让光标乱跳的问题
- 修正选中着文字按 Ctrl+= 造词时,选中内容被替换成一个空格的问题(Qt / Electron / QQ 等)
- 修正 Illustrator 画布中候选窗钉在屏幕左上角、Tabby 里每打一码候选窗就挪一下、行满回绕时候选窗横穿屏幕的问题
- 修正每次组合开始时候选窗先闪一下旧坐标的问题
- 修正浏览器非输入区域工具栏不隐藏的问题
- 修正 WPS 里用命令短语配对上屏后,光标弹回文档开头的问题
- 修正智能符号在英文半角状态、以及组合区中途有输入时失效的问题
- 修正快捷输入里打了 . 就再也输不进字母(.txt 永远停在那个点)的问题
- 修正快捷输入中英文词频不生效,学过的词要多打一码才浮上来的问题
- 修正生僻字模式下快捷符号候选被整批滤空的问题
- 修正新建的字符集分类默认压不过出厂分类、改一个字都没反应的问题
- 修正开启模糊音后混合简拼候选整批消失的问题
- 修正 n↔l / f↔h / r↔l 这类会改首字母的模糊音在简拼下召不回词的问题(nqc 打不出「篮球场」)
- 修正模糊音下自动生成的词条用户自己打不出来的问题
- 修正导入词库后单字被多音节词压后、部分用户词始终出不来的问题
- 修正生僻字模式下简拼保底候选被丢弃的问题
- 修正超长简拼编码可能导致崩溃的问题
- 修正主题内嵌的图片解码不了、市场主题导入后没有背景图的问题
- 修正词库重建后仍然供出旧内容的问题
- 修正已关闭的码表仍然读盘建缓存、文件被占用删不掉的问题
- 修正词库同码词条丢失导入顺序、候选退化成按字典序的问题
- 修正句首大写的英文单词上屏不补空格的问题
- 修正独立编码栏下超长编码把翻页栏和模式徽标挤出窗口、以及内联编码下翻页栏白占一行的问题
- 修正非整数倍缩放下相邻候选行之间空出 1px、行间距设 0 也去不掉的问题
- 修正模式徽标那一帧提示框右边凭空多出一块空白的问题
- 修正升级后配置项的值迁移一次都不会执行的问题
- 修正安装过程中途退出会永久挡住输入法服务启动的问题
- 修正设置页搜索找不到部分选项的问题
📌 其他说明
- 升级前开启过「英文上屏后自动加空格」的用户,临时英文会变成不补空格,需另外打开「设置 → 输入 → 临时英文」里的新开关
- 候选注释变量 ${code} / ${code_all} 更名为 ${code_rev} / ${code_rev_all},老名字保留为永久兼容别名
- 便携版不再生成从来没人读过的 userdata\user_config.seen,已有的文件可自行删除
下载
| 版本 | 适用场景 |
|---|---|
Windows 安装版 .exe |
推荐。向导式安装、自动配置输入法 |
Windows 便携版 .zip |
免安装,解压即用,适合放 U 盘或绿色使用 |
macOS 安装包 .pkg |
通用二进制,Apple 芯片与 Intel 机型通用 |
每个安装包都附带同名 .sha256 校验文件,可用于核对下载完整性。
🌏 国内网络建议从 官网下载页 经 CDN 获取同一版本,速度更稳。
⚠️ Windows:安装时若 Windows 安全中心(SmartScreen)拦截,点「更多信息」→「仍要运行」即可继续。SmartScreen 要看下载量积累起来的信誉,新版本发布初期仍可能被拦。
⚠️ macOS:本版本未经 Apple 公证,双击安装包会提示「无法验证开发者」。请改用 右键 →「打开」→「打开」,或在终端执行sudo installer -pkg <安装包路径> -target /。装完后到「系统设置 → 键盘 → 文本输入 → 输入法 → 编辑 → +」里添加「清风输入法」。
📖 使用文档 · 问题反馈
🌐 官网 · 📖 使用文档 · 🕘 历史版本 · 🐛 反馈问题 · 💬 QQ 交流群 1085293418
变更记录(143 个提交,v0.121.2 → v0.122.0)
新功能
- codetable: 逆切分补三码那一格, 并把只有符号的段当空码 (5f8b8de)
- release: push 支持 --force 重发同一个版本号 (8f27932)
- coordinator: 逆切分候选的组合区切分显示与沉底层 (df5982d)
- engine: 码表逆切分, 满码空码切成 2+2 两段拼接成候选 (4c7dffb)
- webdata: 补全学习数据的查看/清空 RPC, 并纳入整机备份 (819c0e7)
- coordinator: 邮箱模式 + 网址历史补全, 两者共用一个补全候选源 (74a3cb2)
- config: 新增 [input.email] 与网址历史两个开关 (8d07c3e)
- store: 补全候选的用户学习数据落一张全局 completion 表 (68d3781)
- release: 补 auto-sign (等 CI 再自动签名上传), 菜单数据改成按需刷新 (32541f7)
- release: release.sh 直接运行进交互菜单, 并把 bump 基准对齐 release.ps1 (5bf218b)
- release: Linux 侧发版脚本, 把 release-from-linux.md 的手工序列固化下来 (499f630)
- schema: 内置英文方案改名「清风英文」 (2003662)
- cli: wind_input theme export —— 把已装主题打成 .wtheme (54294d8)
- webdata: theme.exportPackage —— 主题包导出, 定制版 hide 掉的 id 读取侧也拒掉 (7d4dd35)
- cli: wind_input theme —— 主题列表、包预览与导入 (72e8025)
- webdata: theme.previewPackage / theme.importPackage (65fb4ca)
- transfer: 主题包 .wtheme 的格式定义与导入导出 (9076c2a)
- english: 英文词组按 ' 分词输入, 打两头就能定位到 iPhone 15 Pro Max (9143fa1)
- keys: 组合键能配的功能补齐到与单键一样多, 中英文切换终于绑得上组合键 (50e2357)
- english: 首候选原文加「仅当它是词库词」一档, 补上两档各对一半的缺口 (144296a)
- theme: 九宫格中段可平铺,候选窗变宽时纹理不再跟着缩放 (60e91e6)
- dev: 设置端的测试与重生成也搬到本机, wine 下实测跑通 (16db846)
- candidate: 双拼编码放宽到任何拼音方案,${code_schema} 改名 ${shuangpin} (1703766)
- config: show_code_hint 改为四档 code_hint_source (bb91042)
- candidate: 注释变量新增 ${code_schema},${code} 更名 ${code_rev} (7c884ce)
- engine: 按活跃方案暴露「code+boundary → 双拼击键」 (5ce9d86)
- engine: 双拼反向表——把解码规则反演成「音节→击键」 (842e6df)
- pinyin: 改首字母的模糊组(n↔l/f↔h/r↔l)在简拼里召不回词 (bf364d7)
- input: 加词/临拼/特殊/生僻字各加一个「要不要用占位 composition 取坐标」开关 (72a411c)
- english: 临英与英文方案的「上屏补空格」拆成两份开关 (624056a)
- system: status 加 --json, 供设置端读回注册表实况 (1f11a3d)
- system: Valve 游戏兼容的登记名称改为可配置 (0d08368)
问题修复
- release: 检查点说明里的 target\release 被 printf %b 吃成了 targetelease (3649794)
- release: 上传前必须验签, 否则本机构建的裸包会被静默传上 Release (27193e4)
- codetable: 逆切分审查跟进 —— 混输下关闭, 沉底层前移, 三处表述改正 (ab36407)
- coordinator: 审查修复 —— 幽灵候选、历史冻结、分段上屏孤儿 (aa16777)
- coordinator: 邮箱后缀只学「像域名」的那些, 别把半截当后缀 (81b29b6)
- coordinator: 回车恒上屏原文, 不再被补全候选顶掉 (dbe3ef6)
- ui: 三条翻页栏测试的前置条件写死了字符数, 只在 macOS CI 上红 (e230306)
- macos: CoreText 的 family_exists 恒返回 None, 字体缺失告警整条空转 (d364abf)
- theme: 主题节点写错字族名一直没有任何信号, 换主题时逐个查一次存在性 (8159513)
- config: 拼音自动学习的 promote_count 注释写反了, 0 是不晋升而非用内置默认 (9540bf9)
- rpc: config.get 传 key 改为当场拒掉, 别再无视参数后静默给空值 (c900804)
- punct: 补上第三处开关判据与方案级自定义标点表这个减数 (c461e05)
- ipc: CMD_MODE_PUSH 补上标点态位, 否则焦点切换后中文标点被当英文态 (9612227)
-
punct: 配对那条排除判据也要连开关一起判, 否则
(永远轮不到透传 (49127e5) - host-render: 写帧/建连失败的日志展开错误链, 否则查不到 Windows 错误码 (a6f6a2c)
- rpc: 错误出口按 {:#} 展开整条链, 别让 context 把真正的原因吃掉 (d5326e0)
-
punct: 智能符号那条排除判据要连开关一起判, 否则
.永远轮不到透传 (38b17ee) - punct: 英文标点态也走透传, 补上 B-9 的最后一块 (9cca150)
- webdata: 导出失败的原因别被 context 吃掉, RPC 出口只传最外层那一句 (bbc4b3e)
- punct: 标点透传扩到 OEM 键, 并补上「按键占用」这层判据 (8d77c3e)
- punct: 中文态产物不变的上挡符号改为透传, Tkinter 里 #%& 终于能上屏 (bed86a9)
- tsf: 无 composition 的提交在拒锁时也退异步, 不再直接落 SendInput (9687618)
- english: 词库把撇号从编码里去掉时, 打 o'clock 从第四键起就没有候选 (c0d7a14)
- deploy: 全量推送连设置端一起停, 否则「配完按键就部署」这条路必然 scp 失败 (561418a)
- english: 分词符规则误伤了 o'clock, 它原文真是词库词却连头部候选一起没了 (8478834)
- english: 审查跟进 —— 分词符打散了快捷输入的 don't, 临英开关改了要重启才生效 (a981ff3)
- toolbar: 进出全屏不产生回调, 补一条默认挂起的复查线程 (GH#134 上半条) (afdbbaf)
- tsf: 空上下文不再兜底成「可编辑」, 浏览器非输入区工具栏终于能隐藏 (1d8167a)
- mix: 用选词键取走「重复上屏」候选, 会往词频库写一条永远查不中的空码行 (bd06085)
- candidate: 独立编码栏下超长编码把翻页栏和模式徽标挤出窗口右缘 (F-17) (5864961)
- ui,mix: 审查跟进 —— 插入符宽度随打字抖, 提示窗预算段与装配段分叉 (ce4e45c)
-
mix: 快捷输入里打了
.就再也输不进字母,.txt永远停在那个点 (bcb1eb3) - mix: 快捷输入的英文词频窗口恒等于配额, 学过的词要多打一码才浮上来 (89f94ed)
- config: 便携版在用户眼皮底下生成一个从来没人读的 user_config.seen (645e1dc)
- ui: 非整数倍缩放下相邻候选行之间空出 1px, 行间距设 0 也去不掉 (becf1d7)
- candidate: 只有模式徽标那一帧, 提示框右边凭空多出 41px 空白 (2bee2a9)
- candidate: 翻页栏并入编码栏只认独立栏, 内联编码下竖排照旧白占一行 (55032bc)
- pair: 审查跟进 —— 配对记账改看显式标记, 多格左移不再塌缩成一格 (05dc070)
- charset: 新建的字符类默认压不过出厂类, 改一个字都没反应 (84c79ca)
- pair: 命令短语配对上屏挪进按键上下文, WPS 里光标不再弹回文档开头 (5b3a879)
- caret: Tabby 每打一码候选窗挪一下; 行满回绕时横穿屏幕跳 1044px (53afee2)
- symbol: 透传上报补两处失效通路, 记账抽成可测的纯逻辑单元 (dd87899)
- special: 空码补全的生僻准入漏了模式守卫, 快符模式候选被整批滤空 (c92bdb8)
- symbol: 英文半角下 DLL 上报透传事实, 补上智能符号最后一条误删通路 (d4e6f28)
- symbol: 智能符号武装态遇中间输入即失效, 不再削掉组合区里的候选 (e2aa9f3)
- import: 守卫收紧到函数粒度, 补上被文件粒度放过的三个加载器 (3bfd984)
- charset,comment-dict,emoji: 清掉 KNOWN_GAPS 里能清的三条, 剩下的归入 codetable 案 (6331ec7)
- import: 补上审查查出的 6 个漏网入口, 守卫改按「有没有按行解析」判 (e4cacf6)
- aux-code,common-chars: 辅助码表与常用字表同样对行尾挑食, 归一化提到 wind-utils (cb70b84)
- ui: 主题内嵌的 data: 图片解码不了,市场主题导入后没有背景图 (a1dd0d0)
- import: 导入端对行尾挑食, 孤立 \r 的文件被当成一行 (145230c)
- config: 值迁移在真实分层下一次都不会执行 (a763ad2)
- pinyin: 上浮判据仍读裸 boundary, 填没填边界字段决定了用户词能不能被看见 (d7df50b)
- pinyin: 近距离补全无条件上浮没有名额, 一批词把单字整批压后 (34ab890)
- pinyin: 没有边界信息的词条绕过音节数约束, 导入词库后单字被多音节词压后 (3f0e34d)
- pinyin: 模糊音下自动造出的词, 用户自己打不出来 (f8707f7)
- candidate: 词里有一个字不在常用字表内就整词被滤, 过滤改成只管单字 (554f8b7)
- pinyin: 超长简拼键让变体枚举溢出 panic; 补 Initial 段校验的负向护栏 (c85097f)
- store: 手动加词 code 参数长度上限 128 字 (a2c4a18)
- pinyin: 简拼键变体上限的算例是错的, 全 l 的键实际落在覆盖外 (c1098f0)
- pinyin: 取解释时用了 or 而非 min, 拿到的是更差的那个解释 (7d2c748)
- pinyin: 纯简拼的模糊召回不打折扣, 模糊解排到了精确解前面 (498687c)
- input: 上屏换行被无条件折成 CR 改写了用户数据, 改由服务端按应用配置 (5c0cca7)
- pinyin: 简拼保底配额在生僻字模式下白丢字; 那条路径根本不重排 (65ba253)
- store: 手动加词文本长度上限 10000 字 (f585139)
- pinyin: 模糊命中的简拼候选绕过了权重折扣; 一个配额测试是假护栏 (3bc167d)
- pinyin: 开模糊音后混合简拼候选整批消失; senrikl 的段校验不走模糊音 (98cece9)
- input: 宿主默认位置置了「缓存已验证」, 下一次组合先闪一下旧坐标 (144925d)
- tsf: Illustrator 画布候选窗钉在左上角; 宿主说「没插入点」时采信它给的默认位置 (c3a2477)
- tsf: 按一次软键盘开关就让 Enter/Esc/Backspace 失灵; 会话位改由服务端权威驱动 (448931b)
- tsf: 不建 composition 的加词收不到 Enter/Esc/Backspace, 单开一位撑输入会话 (a242a34)
- tsf: 记事本等普通应用一个候选框都没有; 「读了就是在画」改成 opt-in (0373fdb)
- dev: TSF 部署只推安装目录, 宿主加载的那份三天没换过 (dfdc010)
- dict: 词库重建后仍供出旧内容, reader_pool 认不出被替换的文件 (e7f4791)
- engine: 关掉的码表照样读盘建缓存, 还被 mmap 占着删不掉 (47303d6)
- store: wdict 同码词条丢失导入顺序, 候选退化成按字典序 (c69131f)
- english: 句首大写的词上屏不补空格, 判据拿小写缓冲比了投影后的文本 (0dc22e7)
- tsf: 那条「钉住不变量」的单测其实在自证其说; 三个纯逻辑测试接进 CI (3347c79)
- tsf: 候选判据抽出来做真值表单测; 改正两句不成立的注释; 多线程抹账能自愈了 (a0bf9e3)
- tsf: 安装器中途死掉就永久挡住服务, 闸门补上「主人还活着吗」这道判据 (2417f3b)
- tsf: 宿主读走候选串即判定自绘, 收起自己的那个框; 快照改懒刷不再交付上一帧 (9d9c24f)
- system: 白名单落进仓里; 老装机识别串重新上钉; status 显出记录值 (200e49d)
- tsf: 升级后别名根本保不住——判据改以记录值为准; 出厂值换成「拼音输入法」 (155fc32)
性能优化
其他变更
- split: 候选 ② 的显示形态定为本仓候选契约 (a93e0de)
- version: docs/VERSION 置为 0.122.0 (baf1a55)
- engine: 探针去掉多余的 Box::leak, 并记下关闭态的双二进制对照 (b93c190)
- codetable: 记下逆切分的本机 REPL 实测与部署状态 (7049a5c)
- engine: 探针改多层并接上小鹤音形, 论证复核有了对照组 (6d4baa0)
- engine: 逆切分的编码空间探针, 并记下五笔 86 的实测 (5a9ec46)
- codetable: 逆切分设计文档, 并同步候选管线现状文档 (98a9a27)
- design: 前缀夺取文档的两个「已规划扩展」改记为已实现 (49d4298)
- fmt: cargo fmt 统一格式化 (2dfd696)
- config: 自动上屏最短码长不再是隐藏参数 (a7b264c)
- rpc: 审查跟进 —— 拒绝文案指向 config.getItem, 并把 {:#} 的成立条件写准 (f947a91)
- design: 主题包 .wtheme 补进导入导出设计 —— 格式、RPC 契约、测试判据 (9c40e37)
- fmt: cargo fmt 统一格式化 (b052829)
- fmt: cargo fmt 统一格式化 (657f434)
- mix: 上一条改了这条测试的 doc 却漏了断言文案, 两者现在自相矛盾 (a497e31)
- special: 审查跟进 —— 三处注释与代码对不上, 夹具自检改成真能测出东西 (59b5f97)
- 清掉 clippy -D warnings 下的四处卡点, CI 的 darwin lint 关卡恢复绿 (d9f4d15)
- agents: Linux 这侧按现状重写, 补上 wine 那套与它的边界 (3c3b56c)
- design: 补齐 GH#128 这轮的设计记录与三处判断修正 (f876eab)
- rpc: 设置端产物的对账搬到 core 这边, 改完配置当场就能跑 (844cf9b)
- input: 切中英那条出口的换行改写堵的是理论缺口, 不是可复现故障 (b5accaf)
- pinyin: 两个召回键函数用错哪个都不报错, 补分工表与唯一的探测断言 (ca05bdb)
- 补上 9/14 四个提交漏掉的 rustfmt (a3797a0)
- tsf: 写明单测的覆盖边界, 免得「判据全绿」被当成「闸门验过了」 (ae8f5b0)
- pinyin: 音节探针的守卫查错了文件, 3 条测试在半成品数据树上恒红 (d046e29)
- release: Linux 发版流程已端到端跑通, 回写实测结果 (d6b2f2e)