Skip to content

Releases: metasequoiaime/msime-windows

v0.9.3

Choose a tag to compare

@fanlusky fanlusky released this 30 Sep 18:46
703803f

水杉输入法 v0.9.3

更新内容

修复了双拼模式下 3 个字母的快捷短语无法混入候选项的问题。(#561)

v0.9.2

Choose a tag to compare

@fanlusky fanlusky released this 30 Sep 16:23
cc7e0b8

水杉输入法 v0.9.2

更新内容

⚠️ 重要修复

  • 卸载时不再删除自定义数据目录中的其他文件。之前如果把数据目录设成一个已有文件的文件夹,卸载会把整个文件夹清空。现在的处理方式:

    • 数据目录不是空的,或者是驱动器根目录时,输入法改为在里面新建 metasequoiaime 子目录存放数据。
    • 只有安装时本来就是空的目录,卸载时才会整个删除。
    • 旧版本创建的目录,卸载时只删除输入法自己的文件。

    (#538,修复 #537)

✨ 新功能

双拼

  • 新增内置双拼方案:搜狗、紫光、智能 ABC、国标、拼音加加。(#526)
  • 支持自定义双拼方案:在数据目录的 shuangpin\custom\ 下放一个 TOML 文件,然后在设置页选用。设置页可以直接打开这个目录、刷新方案列表。写错的方案会显示出来但不能选,鼠标悬停可以看到错误原因。(#529)

五笔

  • 五笔拼音混输改为同时混排:同一串字母同时查五笔和全拼,五笔候选在前,拼音候选跟在后面。混输和 z 键通配现在是两个独立的开关。(感谢 @jsfaint,#517)
  • 批量导入纯汉字词组:在设置页「词库管理」导入一份纯汉字名单(比如人名、地名),按 86 版词组取码规则自动生成五笔编码。(感谢 @jsfaint,#530)

候选与输入

  • 候选框翻页箭头:候选框可以显示「‹ ›」翻页箭头,点击即可翻页,是否显示由皮肤控制。(#550)
  • 快捷短语混入候选(默认关闭):全拼或双拼下,编码完全匹配的快捷短语会出现在候选里,并参与调频。在设置页「实用功能」中开启。(#533, #539)
  • 造词时 Esc 只清除还没选的拼音(默认关闭):打开后,第一次按 Esc 保留已经选好的词,再按一次才全部取消,和小狼毫的行为一样。(#521)
  • 快捷短语编码重复时,错误提示会说明是哪些条目冲突了。(感谢 @ouchihao,#545,修复 #520)

语音输入

  • 豆包流式语音改为按停顿分句:按住快捷键说话时,说完一句的标点会立刻出现在预编辑里。整段文字仍然在松开快捷键时一起上屏,不会从中间断开。(#524, #527)

皮肤

  • 新增内置皮肤「microsoft」,仿微软拼音的样式,自带翻页箭头。(#552)
  • 外部皮肤可以配置的内容更多了:更细分的配色、菜单、外框线宽、高亮圆角、阴影和字体族。颜色支持 #rgba 写法。设置页的皮肤预览也会同步显示这些效果。(#542)
  • 本仓库新增外部皮肤合集 skins/,收录搜狗经典·石墨、大肥鱼·国庆、大肥鱼·探头、QQ 经典蓝等皮肤。这些皮肤不会打进安装包,需要自己下载安装。示例皮肤写全了所有可配置的字段,并说明了颜色的写法。(#540, #544, #546, #549, #555)

⚡ 性能

  • 语言模型改为只读内存映射,用到时才载入;神经整句模型在第一次开启时才加载。默认配置下内存占用明显减少。(#554)
  • 每次按键的查询路径更短:候选缓存命中时不再复制整份候选列表,Google 整句解码可以复用上一次的搜索结果。(#554)
  • 神经网络重排结果到达时,只清掉整句缓存,其他缓存保留。(#554)
  • 图片缓存设了数量上限,不再无限增长。(#554)

🐛 问题修复

输入

  • 修复微信里打两三个字母后输入框被清空、按键被吞:光标位置没变时不再重复移动候选窗,同时加大了 Server 接收消息的缓冲区。(#535)
  • 修复英文混输调频把英文词顶到中文前面:比如在 zai 下选过一次 zaire,它就会一直排在「在」前面。现在英文候选只和英文候选比较调频,并且按每个输入分别记住英文词的位置。补全出来的英文词默认放在首页最后一位。(#558)
  • 全拼长句不再为更短的前缀额外补一条 Google 整句。(#522)
  • 修复神经网络重排的后台线程出错时导致输入法崩溃。(感谢 @jsfaint,#557)

界面

  • 整句候选的来源标签改为默认不显示。(#519)
  • 切换到其他输入法时,悬浮工具栏能正常隐藏了。(#525)
  • 托盘菜单不再超出屏幕,比如任务栏在屏幕顶部的情况。(感谢 @ouchihao,#547,修复 #505)
  • 「杨柳青」皮肤横排时,翻译贴着底部显示,行尾留白,最后一项的高亮不再撑满整行。(#543)
  • 「杨柳青」和「秋桂」的横排预览不再超出卡片范围。(#541)
  • 皮肤列表中预览的圆角和字体与实际候选窗一致。(#549)
  • 候选配色只接受合法的颜色写法。修复 WebView2 下候选文字颜色不生效的问题。(#542)
  • 统一设置页的字号层级,整理五笔方案各子项的排版。(#553)
  • 设置页中 Unigram 整句的说明去掉了「Google」字样,避免让人误以为需要联网。(#523)

🔧 开发与构建

  • 所有 MSVC 目标都明确按 UTF-8 编译源文件,修复中文代码页下编译 Server 失败的问题。(感谢 @ouchihao,#548, #551,修复 #436)
  • 引擎测试的 main 函数会捕获意外抛出的异常。(感谢 @jsfaint,#556)
  • 新增使用 SimplySign 正式签名的轻量 hotfix 打包入口。(#536)
  • 外部皮肤合集和皮肤样例已并入本仓库的 CI 和文档。(#540)

🙏 感谢

v0.9.1

Choose a tag to compare

@fanlusky fanlusky released this 28 Sep 14:03
0fa62f8

水杉输入法 v0.9.1

更新内容

✨ 新功能

皮肤

  • 外部皮肤支持背景图:可以给候选框设置背景图,背景图会铺满到边框下面。还可以自定义圆角,装饰图也能对齐。设置页的皮肤预览会同步显示背景图、圆角和装饰图。(#515, #516)
  • 外部皮肤可以配置悬浮工具栏配色:在 skin.toml 的 [toolbar] 表里设置,取代原来的 toolbar.css。设置页的工具栏预览也会读取这里的配色。(#516)

悬浮工具栏

  • 没有操作时自动隐藏(默认关闭):打开后,工具栏在设定的时间内(1~60 秒,默认 5 秒)没有任何操作就会淡出。鼠标停在工具栏上会重新计时。切换中英文、全半角、标点、大写锁定、简繁等状态时,工具栏会重新出现。(#503)

整句联想

  • 新安装默认关闭词格、Google 和神经网络(速度优先)三种整句来源。(待提交)
  • 整句候选上的来源标签可以在设置页关闭。(#511)

🐛 问题修复

  • 覆盖安装时不再清空输入统计数据(stats.db)。(感谢 @jsfaint,#508)
  • 用系统的 Ctrl+Space 切换中英文时,也会显示光标状态提示。(#504)
  • 候选横排时,第一项和最后一项的高亮圆角与外框一致,四周边距也统一了。这项修复覆盖 D2D 和 WebView2 两种后端,自定义皮肤会按它所基于的皮肤计算这些尺寸。(#512)
  • 鼠标悬停在已选中的候选上时,高亮颜色不再改变。(#514)
  • 设置页皮肤预览:
    • 横排时的高亮边距和首尾圆角与实际效果一致。(#514)
    • 自定义皮肤的胶囊条和浅色配色能正确显示。(#514)
    • 皮肤列表里的外部皮肤按各自的深色或浅色配色显示。(#516)
  • 设置页中延迟加载的子页面,预览部分也会套用当前主题。(#502)

🙏 感谢贡献者

  • @jsfaint:修复覆盖安装丢失输入统计数据

v0.9.0

Choose a tag to compare

@fanlusky fanlusky released this 27 Sep 15:37
50eef10

水杉输入法 v0.9.0

更新内容

✨ 新功能

输入与候选

  • 神经网络整句联想:新增神经网络整句模型,用来重新排序候选结果。设置页可以选择整句联想的来源,安装包已经带上这个模型。整句来源的标签只显示在整句联想候选上。(#466, #482)
  • 按光标位置重算候选:在输入串中间移动光标时,按光标前的拼音重新给出候选,选词后只结算这一部分,剩下的拼音保留。光标移回末尾时恢复完整候选。(感谢 @jsfaint,#460)
  • 退格撤销选词:造词过程中按退格,先撤销最近一次选的词,而不是直接删拼音字母。(感谢 @jsfaint,#467)
  • 固定排位候选显示徽标:固定在某个位置的候选词会显示徽标,徽标样式可以配置。(感谢 @jsfaint,#463)
  • 导入自定义辅助码:可以导入自己的辅助码表。内置的「加加」改名为「拼音加加」。(#477)

五笔(感谢 @jsfaint,#456)

  • 四码只有唯一候选时自动上屏。
  • 支持顶字:四码之后接着打,前一个字自动上屏,后面的字母不会丢。
  • 每打一个键都有前缀提示,并且会根据使用频率调整候选顺序。

光标状态提示(感谢 @AaGMix,#448)

  • 按快捷键时,在光标旁边显示当前是中文还是英文。设置页可以配置并预览效果。(#448)
  • 提示可以显示在光标的左下方、正下方或右下方。(#475)
  • 焦点切到另一个输入框时,也会提示当前的中英文状态。(#476)

外观

  • 新增内置皮肤「秋桂」,「杨柳青」在 D2D 下的高亮效果和 WebView2 保持一致。(#478)
  • D2D 悬浮工具栏的配色跟随候选窗皮肤。(#478)
  • 皮肤可以给候选的翻译文字单独设颜色。(#480)
  • WebView2 悬浮工具栏改用和 D2D 相同的图标字体。(#480)
  • 候选列表中贴着四角的项使用外框的圆角。(#478)

设置窗口

  • 冷启动从约 2.6 秒缩短到约 0.7 秒。(#479)
  • 设置窗口关闭后在后台保留的时长可以配置,保留期间占用的内存更少。(#479)

⚡ 性能

  • 打字更快:上屏时不再清空候选缓存,按键时不再重复生成混合候选。(#489)
  • 切换语言的热键不再每按一次键就重新读取 config.toml。(#489)
  • D2D 候选窗每次显示只绘制一遍。卡片阴影、字体格式和文字测量结果都做了缓存。(#489)
  • 翻译结果没有变化时,不重新绘制候选页。(#489)
  • 选词后学习写入词库的操作移出了按键线程,不再拖慢打字。(#491)
  • 简拼、快捷短语、表情和颜文字的查询复用同一个词库连接。(#491)
  • 输入框获得焦点时的激活流程改为事件唤醒,减少空转等待。(#497)

🐛 问题修复

候选窗显示

  • 修复候选窗闪烁:隐藏时清空画面,重新显示时不会闪出上一次的卡片;移动方向不同时,调整移窗和绘制的先后顺序。(#483)
  • 同一次输入中候选卡片只会变大不会变小;换一个输入或翻页之后,不再留下空白。(#483, #488)
  • 候选的翻译改为跨页缓存,翻页时不会先消失再出现。(#483)
  • 英文模式和 Y 模式临时英文在查询结果返回之前,不再先画出空白页或占位页。(#483, #487)
  • D2D 候选窗不再超出当前显示器的工作区。(#484)
  • 状态提示窗放到候选窗下面一层,打字时不再和候选窗重叠闪烁。(#484)
  • D2D 预编辑光标不再紧贴第一项的高亮。(#483)
  • 托盘菜单(D2D 和 WebView2)中菜单项的圆角和外框同心对齐,行高和内边距也放宽了。(#486)

输入行为

  • 选词回复超时后,不再上屏一个用户没看到的候选。(#481)
  • WebView2 选词时不再空等界面同步超时。(#485)
  • 用退格删空输入串时,已经选好的词不会被一起吞掉。(#467)
  • 造词过程中用退格清空输入时,输入法不再卡住等到超时。(#467)
  • 选中开头一段拼音的候选后,光标不再跳到输入串末尾。(#460)
  • 五笔:前缀提示不再挡住混合的拼音候选,重复的候选已去掉;修复顶字或自动上屏后快速打字丢字母的问题。(#456)
  • 五笔:顶字之后剩余的编码不再被清掉。(#456)
  • 全拼云候选查询带上手动分词;云候选和 AI 联想候选上屏后,按手动分词写入词库。(#453)
  • 词库正在写入时,读取操作会等待而不是直接报错。(#491)

设置页

  • 切换子页面时,滚动位置回到顶部。(#452)
  • 区块标题不再被很长的说明文字挤得换行。(感谢 @jsfaint,#465)
  • 修正下拉菜单的键盘焦点和回车确认的目标。(#448)

🔧 开发与构建

  • 新增 installer/prepare-package-inputs.ps1,一个命令准备好模型和词库。本地打包的中转目录 staging/ 已加入忽略列表。(#473, #454)
  • 发布流程会下载并打包神经整句模型。(#466)
  • CI 单独构建并运行引擎自己的测试;新增逐键耗时基准 bench_input_session。(#493, #494)
  • 按职责拆分 ime_windows.cpp、windows_webview2.cpp、event_listener.cpp、ime_config.cpp、Controls.cpp、KeyEventSink.cpp、MetasequoiaIME.cpp 和 CompositionProcessorEngine.cpp 等大文件。(#490, #495, #496)
  • 每次发布后都会通知 MSIME-Web,不再只在修复流程中通知。(#451)

🙏 感谢贡献者

  • @jsfaint:五笔自动上屏与顶字、按光标位置重算候选、退格撤销选词、固定排位徽标
  • @AaGMix:光标输入状态提示

v0.8.0

Choose a tag to compare

@fanlusky fanlusky released this 20 Sep 16:45
b1ec320

水杉输入法 v0.8.0

本次整句输入改善特别感谢:https://github.com/fcitx/libime

注意:建议用户下载安装 MetasequoiaIME_Setup_v0.8.0.exe 版本,具有相关技术背景想要借助 pdb 文件进行定位的用户,可以使用带有 pdb 的那个版本。

新增功能

  • 新增「输入统计」页面:
    • 可查看输入字数、输入速度、日历热力图、今日时段分布、字符分类和最近 30 天明细。
    • 统计功能默认关闭,仅在本机记录字符数量与活跃时长,不记录实际输入内容,也不会上传数据。
    • 支持永久保留或自动保留最近 30、90、180、365 天的数据,并可随时清空全部统计。
  • 新增加加辅助码(拼音加加),成为第六套可选辅助码方案。
  • 整句候选引入 KenLM 三元语言模型,改善长句切分和候选排序。
    • 词格整句候选现在优先于 Google 解码器候选展示。
    • 优化精确读音、多音字和未登录词的评分。
    • 选中的整句候选会写入用户词库,后续输入时可以参与调频。
  • 新增组词内按分词编辑:
    • Ctrl + ←/→ 按分词移动光标。
    • Ctrl + Backspace 删除前一个拼音分段。
    • 使用 Backspace 清空剩余拼音后,可以继续退选已经选定的分词。
  • 候选窗口支持使用 Ctrl + Enter 直接上屏当前候选右侧的译文。
  • 重构智能标点:
    • 支持中文标点后按空格转换成对应英文标点。
    • 支持在 2 秒内再次按下同一标点,将英文标点转回中文。
    • 数字后、字母后直出英文标点可以分别设置。
    • 「固定标点」改为“跟随中英文状态 / 始终中文 / 始终英文”三选一。
    • 新安装默认关闭智能标点,可在设置中按需开启。
  • 日语模式下,- 现在用于输入长音符 ー,并停止使用 - / = 翻页。
  • 安装时可以自定义词库、配置、皮肤等用户数据的存放位置;升级安装时也可迁移到新位置。

输入体验改进

  • 全拼整句候选改用更准确的语言模型排序,改善长句联想质量。
  • 修复 Google 解码器对 ü 相关音节的处理,正确转换 nue、lue、ju 等拼写。
  • 修复全拼模糊音开启后,备选切分候选抢占正常调频位置的问题。
  • 备选切分候选现在可以正常参与调频,并且不会覆盖已经形成的候选名次。
  • 调频比较范围改为按相同音节尺度计算,减少不相关候选之间相互影响。
  • 修复双拼 yo 无法作为完整音节使用的问题。
  • 修复连续使用双辅助码查询时缓存互相污染的问题。
  • 中英混输默认触发长度由 2 个字母调整为 5 个字母,减少中文输入时误出现英文候选。
  • 修复按数字选择候选时,偶尔选择到与屏幕显示不一致候选的问题。
  • 修复长按 Backspace 清空预编辑后,退格继续传递到应用的问题。

界面与设置

  • 候选窗口阴影现在会按照皮肤配置显示,与 WebView 候选窗保持一致。
  • 高亮候选中的辅助码和翻译文字会跟随选中文字颜色,改善部分皮肤下的可读性。
  • 修复词库管理浮层的位置及翻页交互。
  • 修复候选窗口菜单回调访问已释放对象的问题,降低菜单操作导致崩溃的概率。
  • 语音输入提示条现在能够正确适配分辨率和 DPI 变化。
  • 优化语音提示条在不同任务栏位置下的居中与底部定位。
  • 统计页面在窗口重新获得焦点或恢复可见时会自动刷新。
  • 恢复「始终使用中文标点」选项,并将固定标点设置整理为单选组。
  • 日语输入方案名称由「罗马字」调整为「罗马音」。
  • 调整设置窗口启动页提示文案和字号。

安装与兼容性

  • 安装程序会在安装前检查 Microsoft Edge WebView2 Runtime 和 Visual C++ 2015–2022 x64 运行库,并在缺失时给出说明和下载入口。
  • 正式签名流程现在覆盖安装包内全部 EXE 和 DLL,改善辅助程序的可信度并降低被安全软件拦截的概率。
  • 修复 TSF DLL 的版本资源,文件属性现在能够显示正确的产品版本。
  • 修复智能标点在部分终端程序中无法完成标点改写的问题,恢复 SendInput 兼容路径。
  • 加强语音输入控制协议,对启动、停止及生命周期请求进行串行化和字段校验,提升语音功能稳定性。
  • 完善自定义数据目录下配置、词库、皮肤、统计数据及诊断日志的路径处理。

v0.7.1

Choose a tag to compare

@fanlusky fanlusky released this 13 Sep 20:09
eb98756

水杉输入法 v0.7.1

注意:

建议用户下载 MetasequoiaIME_Setup_v0.7.1.exe 版本。

MetasequoiaIME_Setup_v0.7.1_with_pdb.exe 是为方便部分技术背景的用户定位 bug 随附发布。

修复

  • 修复中文书名号输入完一次之后会退化成单书名号的问题
  • 将 excel 中的中文标点成对补全禁用,对齐微信输入法,规避移动单元格的问题
  • 修复 d2d 渲染的候选项的背景高亮有时无法将当前行铺满的问题
  • 加固保留用户原有配置

优化

  • 发布时同时带上包含 pdb 的版本,方便部分具有技术背景的用户定位问题。

v0.7.0

Choose a tag to compare

@fanlusky fanlusky released this 13 Sep 15:12
96c4ee3

水杉输入法 v0.7.0。自 0.0.9.2(2026-08-25)以来累计 1484 个提交,这里按主题归纳,不逐条罗列。

产品仍在内测,安装与已知问题见仓库的 issue 以及 discussion 区。

渲染架构:WebView2 → Direct2D

候选窗、悬浮工具栏、托盘菜单三个高频界面全部从 WebView2 换成 Direct2D presenter,并改用 DirectComposition 宿主。同时也保留了 webview2 的渲染方式。这是本轮跨度最大的改动,直接带来输入时的响应速度、内存占用和稳定性改善:

  • 候选窗、悬浮工具栏、托盘菜单添加了新的 D2D 渲染方式,复用 D2D 场景、打字时宿主尺寸保持稳定
  • 同时保留 webview2 的渲染方式,并在设置页添加了切换渲染方式后的重启生效按钮。
  • 不再把所有 Unicode 统一走 CJK 字体映射,D2D 工作集显著下降
  • 设置页冷启动优化,启动时先显示 Direct2D 闪屏(带 DWM 圆角),不再干等 WebView2 加载
  • 菜单项支持 SVG 图标、开关控件与字体回退

输入引擎

  • 日语输入:从零加入,含整句算法、模糊查询、动态状态图标,以及 R 模式临时日文输入
  • 全拼纠错:补齐漏字/多字,k-best 切分按词频消解歧义;候选按编辑代价分层,便宜读音整组领先;支持「纠正头部 + 简拼尾巴」的组合;完整音节加单个元音尾不再被误判为简拼
  • 模糊音:11 个模糊音键、分区总开关、首次启用时按规则播种并持久化标记
  • 拼写别名:ü 系拼法归一,非标准拼法的候选带轻量标记
  • 输入模式:新增 J 模式(简拼)、Y 模式(临时英文)、R 模式(临时日文)
  • 以词定字、候选跨页方向键导航、中英混输触发字数阈值的细粒度控制
  • 手动分词符在预编辑与候选中保留并去重;不完整拼音也能造词
  • Enter 提交原始串并记入词库;整句回落候选带规范拼音

候选、排序与翻译

  • 候选翻译接入多家服务:腾讯云、DeepLX、小牛翻译(NiuTrans),并补充韩语、德语
  • 横排候选窗内显示翻译;长句翻译不再截断
  • 候选排序、置顶与固定位置菜单,排序缓存刷新
  • 云候选与 AI 预测支持更多厂商,可配置多组自定义提示词

语音输入

  • 支持多家厂商;豆包语音识别适配新版控制台的单 API Key 鉴权,并补充多项自定义参数
  • 可配置快捷键与动态 hook 生命周期,Esc 可取消当前语音输入
  • 超时丢弃;录音期间可选临时静音其他媒体播放

皮肤与外观

  • 引入皮肤系统,新增微信风格皮肤(含明暗两套)与 Fluent 浅色主题
  • Direct2D 各界面支持分面主题(per-surface),明暗跟随设置与系统实时切换
  • 外部皮肤改用 TOML 色彩令牌预览,不再直接注入 cand.css
  • 安全加固:第三方皮肤 CSS 的远程引用被丢弃,候选窗/悬浮工具栏/托盘菜单加上 CSP
  • 增加了一个暂时未启用的 v2 应用图标。

表情与符号面板

  • 剪贴板功能、更多符号、颜文字渲染与搜索框卡顿优化、SVG 渲染、页签图标优化

设置页

  • 批量导入:全拼词库、纯中文词组(经 cpp-pinyin 注音)、Rime userdb.txt 与 dict.yaml、快捷短语
  • 用户词库导出(含紧凑导出控件)
  • API Key 配置项新增连通性测试按钮
  • 候选外观控件与预览行为同步、页大小数字门控、界面渲染后端可重启 Server
  • 设置窗口关闭后先隐藏,十分钟后才真正退出
  • 优化了一些 UI 方面的细节

悬浮工具栏与状态同步

  • 工具栏组件可定制并持久化,位置在焦点切换和分辨率变化后保持,且被限制在显示器范围内
  • 中英/中日、全半角、标点模式经 IPC 同步;Caps Lock 有对应状态指示
  • 从其他输入法切回时维持默认中英文状态

稳定性与兼容性修复

  • 候选窗:右侧截断、贴边后乱飘、阴影被裁切、换行闪烁、菜单越界、滚轮翻页(可开关)
  • DPI 与缩放:实时 DPI 变化自适应、RDP 会话跟随宿主实际渲染比例、任务栏指示图标按有效 DPI 取尺寸
  • 路径:中文用户名等非 ASCII 路径下的配置读写与持久化(文件路径按 UTF-8 构建,不再走 ANSI 代码页)
  • 高 CPU 占用下的界面卡顿、候选窗频闪与 worker 队列积压
  • 应用兼容:UILess 模式支持三角洲行动等游戏;Word 中裸 Shift 中英切换;JetBrains 双击 Shift 冲突;Telegram 候选窗被提前销毁;VSCode 多窗口状态不同步
  • 升级时保留用户词库与自定义翻译配置;覆盖安装前先退出驻留的设置进程
  • 修复了在部分机器上使用中文标点成对补全时会导致右边的标点呈现选中状态的问题。

工程与发布

  • 五个仓库合并为单仓,TSF、Server、引擎、GUI 框架、页面与安装器同树管理
  • release-please 接管版本号,发布走 CI,自动构建与正式发布分成两个频道
  • 安装包与 uiAccess Server 代码签名,符号文件随发布产出
  • 修复 CodeQL 告警,补齐 IPC、皮肤 CSS、TSF 空指针等审计缺陷

致谢

v0.7.0 这一轮除我之外还有 14 位贡献者参与,按提交量排列:

  • Evan Hu(@houko)— 186 次提交
    发布与工程基建的主要负责人:五个仓库合并为单仓、release-please 接管版本号、
    自动构建与正式发布双频道、product-lock.json 产品锁与发布门禁、release
    流程全面脚本化到 scripts/ci/,以及 IPC 回落语义与共享契约的收敛、CodeQL 告警清理。

  • Jia Sui(@jsfaint)— 29 次提交
    输入引擎:模糊音完整链路(11 个模糊音键、分区总开关、首次启用播种并持久化)、
    ü 系拼写别名归一、全拼纠错补齐漏字/多字与 k-best 切分、双拼置顶权重修复,
    另有 RDP 会话下候选窗缩放、D2D 候选窗明暗主题实时切换。

  • Ouchihao(@ouchihao)— 12 次提交
    TSF 与候选体验:横排候选窗显示翻译、候选锚点坐标转换与 DPI 重建、
    小键盘标点上屏、JetBrains 双击 Shift 冲突、中英混输的英文候选排序、
    非 ASCII 用户目录下的设置持久化。

  • Neptrue Lin(@Neptrue-Lin)— 7 次提交
    反复打磨 Issue 模板的字段、标签与填写提示,降低新用户反馈门槛。

  • linym(@linyanm)— 6 次提交
    设置窗口激活卡顿优化、批量导入兼容 Rime userdb.txt 与 dict.yaml、
    全拼导入按汉字数切分并识别文件编码、缩放变化时重建 D2D 工具栏。

  • 柳梦婉(@liumengwanlhf-design)— 4 次提交
    任务栏指示图标按显示器有效 DPI 取尺寸、为中间缩放比例补 28/36/44px 图标帧、
    延迟加载 shcore.dll。

  • Aegon8719(@Aegon8719)— 3 次提交
    候选窗可配置的有序回落字体、简繁切换与候选翻页/以词定字快捷键、
    候选词与辅助码之间保留半角空格。

  • PathGao(@PathGao)— 3 次提交
    让宿主看到切换输入模式的裸 Ctrl 释放、Enter 结束组合时上屏造词前缀、
    安装就绪页显示目标目录。

  • Carry(@LilyCarry)— 2 次提交
    候选窗滚轮翻页(#81)、为 msimeui 测试传 /utf-8 修复 CP936 下的 C4819。

  • Manwood(@ManwoodIsolation)— 2 次提交
    补充全拼错拼别名与通用纠错的测试覆盖。

  • 古明四季(@Komeiji-Shiki)— 2 次提交
    修复候选列表溢出换行后的点击区域、升级时保留用户自定义的翻译配置。

  • AaGMix(@AaGMix)— 1 次提交
    发布产物随包携带 PDB 符号,便于崩溃分析。

  • LLLin000(@LLLin000)— 1 次提交
    修复自定义翻译设置不持久化的问题。

  • sk(@GRTsk0818)— 1 次提交
    补充 docs/installation.md 安装文档。

同时感谢所有提交 Issue、复现问题和参与讨论的用户。

v0.6.8-beta.1

v0.6.8-beta.1 Pre-release
Pre-release

Choose a tag to compare

@fanlusky fanlusky released this 08 Sep 20:44

预发布,用于验证中文用户名路径的修复。正式版本仍由 release-please 发布。
本包基于 PR #287(尚未合入 develop/main),安装包版本号手工标为 0.6.8;仓库 version.txt 仍是 0.6.7,由 release-please 管理。

修的是什么

中文用户名的机器(例如 C:\Users\陆傲天)无法完成覆盖安装:安装到最后一步回放用户词库时失败,安装器随即中止。

安装器在 ssPostInstall 调用词库回放工具,任何非零退出都会中止安装 —— 这是刻意设计,避免带着未恢复的词库启动新版本。实测该工具退出码为 -1073740791 = 0xC0000409(STATUS_STACK_BUFFER_OVERRUN),即 MSVC 对未捕获 C++ 异常的 __fastfail。

根因:本项目的窄字符串约定是 UTF-8,而 std::filesystem 的窄字符串转换走系统 ANSI 代码页,两者只在 ASCII 上一致。回放工具把 path::string() 的结果交给按 UTF-8 约定的词库 API,非 ASCII 路径下这个转换直接抛异常,逃逸出 main() 触发 fastfail。

该缺陷自 d5523dd 起就存在,v0.6.7 的 config 路径修复(de4d3ac)没有覆盖到它。

本次改动

  • 词库回放工具 —— 按 UTF-8 构造路径;wmain 加异常兜底,意外失败给出可诊断信息并返回 1,而不是 fastfail。
  • 皮肤目录 —— toml::parse_file(manifest.string()) 同一问题(皮肤就装在用户目录下)。改为按宽路径读文件再解析文本。
  • FanyUtils::GetIMEDataDirPath —— 从 ANSI 环境块拼路径且未判空,全仓库无调用者,删除。
  • 全仓库按"窄字符串即 UTF-8"逐个复核了其余路径构造,未发现其他违规。

验证

真机数据实测:

二进制 中文路径 + 真实词库 ASCII 路径
v0.6.7 exit = -1073740791(0xC0000409) exit 1(正常报错)
本包内的回放工具 Applied 10009 user dictionary operations. exit 0 行为一致

新增 4 个回归测试,覆盖转换契约、词库 API、真实 exe(按安装器的调用方式起进程)、皮肤加载;每个非 ASCII 场景都配了 ASCII 对照组。回放和皮肤两个用例都确认回退修复后会失败。

  • server 全量 Release 构建通过,测试 275 passed
  • windows TSF x64 / Win32 Release 构建通过

谁该装这个

用户名含中文(或其他非 ASCII 字符)、v0.6.7 覆盖安装失败的用户。用户名是纯英文的不受此问题影响,无需升级。

签名

安装包与 uiAccess 服务均以 CN=Open Source Developer LU FAN 证书签名,Certum 时间戳。

  • MetasequoiaIME_Setup_v0.6.8.exe
  • SHA256 32CC75B281B4CAF5931BA70DE45CA0794169E1C579C9864F4213C58BD4FF3A84

相关:#287

v0.6.7

Choose a tag to compare

@houko houko released this 08 Sep 19:36
7fa6fb1

0.6.7 (2026-09-08)

Bug Fixes

  • ci: stop the self-hosted jobs racing on the global git config (f7cd4e6)
  • ci: stop the self-hosted jobs racing on the global git config (d7e7b3f)

安装包

本次安装包为本地构建并使用 Certum「Open Source Developer」证书签名(含 RFC3161 时间戳)。

项 值
文件 MetasequoiaIME_Setup_v0.6.7.exe(完整包,含词典)
大小 80.7 MB
SHA256 FB147837119075C4EDCEDC39D1AF7125437797E0CEE1A2205F978B3ADDC99B72
引擎 da61ca472eda23445ae0ecd2e4d43868063cb36a

安装后建议注销并重新登录一次,确保系统卸载掉正在使用的旧版 TSF DLL。

product-manifest.json 记录了本次构建所锁定的引擎、词典与各文件校验值,可用于复现构建。

v0.6.2

Choose a tag to compare

@houko houko released this 07 Sep 09:35
e9e5abd

0.6.2 (2026-09-07)

Bug Fixes

  • ci: align release matrix with selected vcpkg (#244) (fbd6b39)
  • ci: guard the release vcpkg selection (#247) (d1ac527)
  • installer: test server before embedding uiAccess manifest (#243) (f62e8e5)

Field Value
Installer MetasequoiaIME_Setup_v0.6.2.exe
SHA256 c733da6296983ec8b5782dc72f294888037e0c84069df6f6089c4bc770e84088
Dictionaries dict-v1.0.0
Build inputs product-manifest.json (attached and installed)