跳到主要内容

更新日志

版本号沿用仓库的 Git tag。逐条提交与二进制下载见 GitHub Releases。

v1.1.8​

候选栏多了翻页提示器,拼音区按音节断开。

‹ › 提示还有没有下一页。 rime 不给总页数,做不出页码,能给的只有方向:› 画在最后一个候选后面、‹ 画在第一个候选前面,贴着候选走,不甩到行尾。两个箭头各占一列且常驻——没方向可翻时那列留白,不是省略,所以翻页瞬间候选词一列都不左右平移。箭头与候选共用同一份宽度预算,终端多宽就显示几个,怎么挤都不越界。

拼音区按第一个候选词给分隔符。 以前显示敲进去的裸字母(nihao),现在是 ni hao,且分隔符随音节可辨认逐步出现。取第一个候选为准,是因为 rime 每页都按当页高亮候选重算 preedit——单字页没有读音可显示时会把裸输入拼回 nihao;换输入时取一次 preedit 缓存、翻页复用就不会。

分发产物带上许可文本。 二进制静态链接约 15 个第三方库,随包 rime-data 里还有 LGPL-3.0 与 Apache-2.0 的数据——源码 MIT 不等于产物单一授权。现在三条分发路径(Release tarball、install.sh、cmake --install)都随附 LICENSES/ 与逐文件数据授权声明,网站新增「许可与分发」页。

词库搬家,引擎跟上游同步。 词库并入 librime-stl fork 的 dict/(submodule 9→8),本仓不再留示例词库与死配置;这轮又进两轮读音校准:删 149 条死读音、补 59 条现代读,违例 125→35。librime 同步上游 67 个提交到 1.17.0,运行时正则入口统一走 PCRE 翻译层,坏模式不再崩引擎;词库在构建期同步,dict/VERSION 2026.10.12 随包。

修三个静默吞数据的缺陷。 配置文件里一个键类型写错,以前整份配置被丢弃,现在越界钳制、坏类型按缺省,绝不丢整份;候选窗口的 SIZE_MAX 哨兵在换页后未渲染时会被 select() 窄化成非法下标,现在任何时刻都是合法下标;宽字符「左半格/右半格」不变量只补了 put,erase 与 resize 两条路径会留下半个字符,三条路径补齐。

发布有测试闸门了。 release.yml 以前从构建到发布不跑任何测试,而 install.sh 指向 /releases/latest——「没测过」和「发给所有人」是同一个事件。现在 tests job 先跑 ctest 与全部 e2e 才允许发包;release 二进制默认 strip(5.4M→4.2M),install 目标只交付可执行文件,curl 失败时给出可操作提示而不是裸报错。

v1.1.7​

修三个吞键 / 误路由的 bug,都在组合态下撞得到。

Enter 现在提交候选。 此前 \r 既不匹配字母分支也不匹配标点分支,被当作裸换行直接转发给 shell —— 候选词永远上不了屏。更糟的是数字选词之后组合态还开着,下一次 Enter 会再提交一遍,于是 shell 去执行上屏的中文词,报 not found。

IME 没消费的按键不再被静默丢掉。 中文模式下按 [7,7 被吃掉 —— 数字没有对应的候选槽位,代码走了 continue,字节就没了。现在每个按键分支都必须用 KeyClaim 明示自己去向(消费 / 转发 / 丢弃),全仓库刻意丢弃的地方只剩 2 处。

转义序列作为整体处理。 此前逐字节分发会吃掉开头的 ESC,再把 [、3、~ 分别喂给 IME。按 Delete 会提交你正在拼的拼音,并往 shell 里注入字面量 [3~。

三个 bug 同一根源:每个分发分支各自决定「这个键怎么办」,而「丢掉」是隐式的。

另外。 模糊音的合成方案改为 init 时 join,消除 prism 部署竞态;删除 Termux 支持(一直是实验性的,arm64 二进制只在模拟器跑过,从未真机验证);修 advance_candidate_window 隐式依赖 render() 刷新快照。

v1.1.6​

模糊音加框成一组。 上一版的「模糊音」组标题只是一行灰字,跟下面五项同缩进,看不出来是个分组。现在五项收进一个带标题的边框(╭ 模糊音 ──╮ … ╰──╯),跟上面两项(界面语言、候选词数量)一眼分开。

label 改音标对。 五项的名字从「平翘舌 / n/l / r 系 / h/f / 前后鼻音」换成它实际并的音素:zh⇄z、n⇄l、r⇄l、hu⇄fu、an⇄ang。一眼看出这组不分的是哪两个音。r 组标 r⇄l 只是主对,引擎实际还把 r 并到 y(单向),那条仍由描述行说清楚。

描述行位置变了。 以前描述画在焦点项正下方、随焦点走;加了内框后,描述若还画在框内会让框高度随焦点在 5、6 行之间跳,撑爆 19 行预算。改成所有项之后的一行固定槽,内容仍是焦点项的说明,高度恒定。

v1.1.5​

设置面板开始解释自己在干什么。 以前面板只有一行行开关名(模糊音 平翘舌、候选词数量),看不出一项管的是哪件事,得先知道拼音方案怎么组织才敢动。现在每一项下面跟一行说明 —— 焦点所在的那一项才画,说明跟着光标走,面板高度在上下移动时不变。按键提示也从三行并成一行,整个面板钉在 19 行,20 行高的终端放得下(状态栏还占着最后一行)。

模糊音的五行并成一组。 五个开关上面加了「模糊音」分组标题,说明各行也从「模糊音 r 系」缩成「r 系」—— 分组标题已经说明了这几项是什么,行内不必重复。

说明文字中英文各一份,跟界面语言走。

v1.1.4​

修一个装完就哑的坑。 用 tarball 或 Homebrew 安装、且机器上另有系统的 librime 数据目录(/usr/share/rime-data,装过 fcitx5-rime/rime-data 一类包就会有)时,程序会选中那个系统目录:它的文件名里有 [拼],切换也正常,但打字一个候选都不出 —— 因为拼音方案在 term-ime 自带的数据里,不在系统目录里。以前找数据只认一个编译期写死的构建机绝对路径,运行时压根不看可执行文件自己旁边。

现在按「离二进制最近的优先」找:二进制同级的 ../share/term-ime/rime-data(tarball、Homebrew Cellar、install.sh 装的 PREFIX 都是这个形状)、./share/rime-data,再往后再轮到常见安装路径,系统目录排最后。而且"是不是 term-ime 自带的数据"要看目录里有没有那份模糊音方案,光目录存在不算。

真的哪里都找不到自带数据时(比如手工拷了个半套),程序照常启动,并在日志里写明当前用的目录缺哪份方案、拼音不会可用,不再让用户对着一空候选栏猜。日志另加一行记录最终选中的目录。

v1.1.3​

四处用户能直接感觉到的变化。

粘贴不再丢字。 一次键盘读入的字节现在整段交给 shell,不再逐字节写。逐字节写意味着每喂一个字节,就把"还没送出去的出站队列"重新搬运并重排一次,再多一次 pty 写调用:65536 字节的粘贴实测 65652 次写,现在 19 次(其中 16 次恰好 4095 字节 —— 内核 pty 的单写上限,不是策略选择)。

缓冲写满时丢最新,不再丢最旧。 丢最旧会把一段文本从中间剪断:送出去的前半和后半接不上。丢最新保证送达的部分是原文的连续前缀,日志里另外写明丢掉了多少。能送多少由 shell 那侧是否在读决定,队列只保证顺序。

字符集转义不再上屏。 程序(htop、vim 等)发出的 ESC ( B 这类选择字符集转义,终止字符此前会被当成一次按键回显到屏幕;解析器现在进 SCS 子态等完整序列收完。

日志。

  • 配置里写的 log_file 现在真的承载"配置加载"这件事的诊断。以前配置解析失败的报错落在启动日志,而用户打开的是配置指定的那个文件,两边看不到对方。
  • 写不进配置指定的文件时继续写启动日志,并把仍在写哪个文件说清楚。以前这一步会把级别设成 off,于是这次失败之后的所有 warn/error 一起消失。
  • warn 及以上立即落盘,其余最多等一秒。以前只在干净退出时 flush,被信号或关掉终端打断时,丢掉的正好是要看的那几行。

另外两项:终端尺寸越界不再回绕成另一个合法值(比如悄悄变成 65535 行);pty / stdin / 信号的监听注册被拒时明确报错退出,不再留下一屏"像卡住了"的画面。

更早​

版本主要内容
v1.1.2aarch64 预编译包与 install.sh 支持、Homebrew formula、终端方案对比页
v1.1.1中文标点修复、安装后翻译缺失修复、短命令 ti、站点改版
v1.1.0SGR 颜色(16 / 256 / 24bit 真彩)、ED/EL 擦除、模糊音拆成 5 组独立开关

v1.0.x 及更早的改动见 GitHub Releases。