Commit Graph
1916 Commits
Author SHA1 Message Date
fanlusky cb75ac8383 feat(ui-html): WebView2 悬浮工具栏改用与 D2D 相同的图标字体
工具栏按钮由 SVG 改为 Segoe Fluent Icons / Segoe MDL2 Assets 码位,与
D2D 工具栏逐一对应;两者都缺某个字形时换成与 D2D 相同的回退文字
(issue #232)。图标颜色因此跟随各皮肤的 .icon color,石墨皮肤的
图标色此前被 SVG 写死的描边覆盖,现在生效。设置页的工具栏与皮肤
预览同步改用图标字体和相同的回退。
2026-09-26 23:38:37 +08:00
fanlusky 7d66b2556c feat(server,ui,ui-html): 候选翻译文本支持在皮肤中单独配色
外部皮肤 skin.toml 的 [candidate.dark] / [candidate.light] 新增 translation 键。
不写时沿用候选文字色叠 62% 不透明度;写了就按原值绘制(含选中行)。
D2D(CandidateList::Appearance::translationColor)、WebView2 注入 CSS
和设置页外部皮肤预览三处一致;预览顺带补上此前漏掉的 number 配色。
2026-09-26 23:38:37 +08:00
Lu Fan(SonnyCalcr) 89bee3a49e Merge pull request #479 from fanlusky/perf/settings-window-startup
perf: 设置窗口冷启动提速到约 0.7 秒,驻留时长可配置并降低驻留内存
2026-09-26 23:01:48 +08:00
fanlusky c539d0cf2a feat(server,ui-html): 设置窗口驻留时长可配置,驻留期间降低内存占用
- 关闭设置窗口后隐藏驻留时,把 WebView2 内存目标设为 LOW 并 TrySuspend 冻结页面;
  重新打开时恢复 NORMAL、Resume 后再显示。本机驻留 60 秒后整棵进程树的工作集
  由约 408 MB 降到约 62 MB,重开仍是瞬间恢复。
- 新增配置项 appearance.settings_window_linger,可选 off / 1m / 5m / 10m / 30m /
  60m / forever,默认 10m。off 表示关闭即退出,forever 表示一直驻留。
- 同步出厂模板、开发配置、ime_config 读写校验和两个设置宿主的快照字段与写入分发;
  设置页“外观 → 界面渲染”新增“设置窗口后台驻留”下拉框。
- 新增测试覆盖模板默认值、缺键、非法值、setter 拒绝和逐值往返。
2026-09-26 22:57:18 +08:00
fanlusky 14815e2f43 perf(server,ui-html): 设置窗口冷启动从约 2.6 秒缩短到约 0.7 秒
- 设置页虚拟主机名改为 imesettings.example / candidate-skins.example:
  不带点的单标签主机名会先走一轮网络名称解析,导航后要空等约 2 秒才开始加载。
- 写 WebView2 用户数据目录和配置目录的 ACL 前先检查:已有 Users 完全控制(可继承)
  和 Medium 标签时跳过 SetNamedSecurityInfoW,避免每次启动都把 ACE 传播到整棵缓存树
  (本机约 120 ms 降到 1.5 ms)。
- 先显示窗口和 splash,再准备 WebView2。
- 显示前最多等 150 ms 取得配置里的主题,浅色主题不再先闪一下深色。
- 新增 METASEQUOIA_IME_SETTINGS_TRACE=1 冷启动打点,写入
  %TEMP%\metasequoia-settings-startup.log。
2026-09-26 22:57:18 +08:00
Lu Fan(SonnyCalcr) 47ffe02330 Merge pull request #478 from fanlusky/feat/autumn-osmanthus-skin
feat: 新增内置皮肤秋桂,杨柳青与 D2D 工具栏对齐 WebView2
2026-09-26 21:58:03 +08:00
fanlusky 030f2d4db8 feat(server): D2D 悬浮工具栏跟随候选窗皮肤配色
此前 D2D 工具栏只按明暗切换默认配色,不看皮肤。新增 floating_toolbar_skin,
按 ui-html/webview2/ftb/<skin>(_light).html 给出背景、边框、图标、悬停、分隔线、
拖动条颜色与圆角;外部皮肤沿用其 base 皮肤,因为 toolbar.css 只作用于 WebView2。
2026-09-26 21:49:04 +08:00
fanlusky 8278c065c9 feat(server,ui-html): 新增内置皮肤秋桂,杨柳青 D2D 高亮对齐 WebView2
秋桂 Autumn osmanthus(autumn_osmanthus):暗色底 #7D929F、高亮 #F97D0A,
亮色底 #D6ECF0、高亮 #FFE399。高亮内缩于外框,首项顶部两角与尾项底部两角
和外框同为 10px;预编辑行隐藏时首项才贴顶。WebView2 候选窗与工具栏、D2D
候选窗、设置页卡片与预览一并提供。

ApplyCandidateFrame 只隐藏多余的候选行,:last-child 找不到最后一个可见行,
因此为其加上 .last-visible,杨柳青的 CSS 同步改用它,候选不满一页时尾项的
补边与贴边高亮才会生效。

杨柳青在 D2D 下改为直角、左右贴边的整行高亮,只在外框四角处用 9px 贴合,
行距、行内边距与预编辑行边距按 CSS 对齐。
2026-09-26 21:49:04 +08:00
fanlusky 0b4d9172f8 feat(ui): CandidateList 让贴着列表四角的项使用外框圆角
Appearance 新增 outerCornerRadius 与 outerTopCornersEnabled:选中或悬停的
填充里,真正落在列表四角上的角改用外框半径,其余角保持 cornerRadius。
既支持内缩高亮与外框同 R,也支持整行铺满、只在外框四角处贴合的皮肤。
2026-09-26 21:49:04 +08:00
Lu Fan(SonnyCalcr) 4375d80414 feat: 支持导入自定义辅助码,内置“加加”更名为“拼音加加” (#477)
* feat(engine): 支持 helpcodes/custom 下的自定义辅助码

custom 目录里的每个 .txt 都是一套方案,方案名为 custom/<文件名>。
文件开头的 "# name:" / "# name_en:" 注释给出中英文显示名,缺省用文件名;
兼容 BOM、CRLF 和全角冒号。方案名不能跳出 custom 目录。

* feat(engine): WebView 契约新增 openHelpcodeDirectory

设置页请求打开自定义辅助码目录,仅允许 settings 页发送。同步 ui-html/webview2/shared。

* feat(server): 设置页列出自定义辅助码并可打开其目录

配置快照带上 helpcode.custom_schemas 与 helpcode.custom_directory,每次都会重新扫描;
方案文件被删除或改名后回退到 lantian。两个设置宿主都会处理 openHelpcodeDirectory。

* feat(ui-html): 辅助码设置显示拼音加加与自定义方案

内置方案“加加”改名为“拼音加加”。自定义方案追加在内置方案之后;新增说明区,
提供“打开目录”和“刷新方案”两个按钮,刷新完成后弹出提示。

* feat(installer): 升级与迁移数据目录时保留自定义辅助码

升级清理时只清掉 helpcodes 里的内置表,保留 custom 子目录;更换数据目录时一并迁移;
安装时建出 helpcodes\custom。
2026-09-26 20:21:55 +08:00
Lu Fan(SonnyCalcr) 8b72f0d8da Merge pull request #476 from fanlusky/feat/caret-state-focus-announcement
feat(windows): 焦点切换到另一个输入框时提示当前中英文状态
2026-09-26 18:02:31 +08:00
fanlusky 625310a314 feat(ui-html): 光标状态提示卡片改为分组标题
“光标状态提示”改为整个卡片的分组标题,不再自带开关;原来的开关改名为
“切换输入法状态时提示”,与“切换输入框时提示”“提示位置”并列在标题
之下,标题下用分隔线区分层级。开关 id 与配置项不变。

各行沿用 section-title 的字号与颜色,字重介于常规与分组标题之间。中文
回退到的微软雅黑只有 Light / Regular / Bold 三档,400–500 都落在
Regular、550 以上都落在 Bold,因此在 Regular 上加 0.25px 描边模拟中等
字重(设置页只运行在 WebView2 上)。
2026-09-26 17:37:13 +08:00
fanlusky b3b3b3303c feat(windows): 焦点切换到另一个输入框时提示当前中英文状态
新增开关 general.caret_state_indicator_on_focus(默认关闭,需同时开启光标
状态提示)。

- DLL 把以下情况视为“换了输入框”:焦点窗口变化(Win32 编辑框、对话框、
  其他应用各有自己的窗口);焦点经过一段没有可编辑文档的间隙后落到可
  编辑文档上(Chromium、WPF 等单窗口宿主在字段之间就是先失焦再聚焦);
  焦点会话真正结束后重新开始。Chromium 打字时在两个可编辑文档之间直接
  替换文档管理器,不会触发。从 Win+. 面板返回不计入;线程焦点在真正的
  应用切换后返回计入。一次切换的多次回调由定时器合并为一次提示;组字
  过程中、以及没有光标的控件都保持静默。每次判断在 TSF 诊断日志里记录
  判定标志,不含任何文本
- 协议复用 IMESwitch:wch 改为 FanyImeCaretStateTrigger(UserToggle /
  CapsLockEdge / FocusEntered),CapsLockEdge 保持首发时的 VK_CAPITAL
  取值,Server 对未知值按 UserToggle 处理
- Server 在开关打开时显示当前的有效模式(Caps Lock 开启时为“英”);
  配置项同步写入两份模板和两个设置窗口宿主的读写映射
- 设置页在光标状态提示卡片中增加“切换输入框时提示”开关
2026-09-26 17:09:34 +08:00
MSIME(MetaSequoia IME) daf346f1a2 Merge pull request #475 from fanlusky/feat/caret-state-bottom-positions
feat(server): 光标状态提示补全左下方、正下方、右下方
2026-09-26 16:25:04 +08:00
fanlusky d99aaa0d7d feat(server): 光标状态提示补全左下方、正下方、右下方
提示位置原先只有左上方、正上方、右上方和“下方”四种,且“下方”在设置页
预览里居中显示,Server 却把它放在光标左侧。

- 新增 bottom-left(左下方)与 bottom-right(右下方)
- bottom 保留原配置值、改名为“正下方”,并改为与 top 对称地居中,
  使运行时位置与预览一致;已选“下方”的用户升级后不会被重置
- 合法位置与“是否在光标下方”的判断集中到 caret_state_indicator_policy.h,
  配置读取、写入与定位共用一份定义
- 同步两份配置模板的注释、设置页下拉项、aria 文案与预览样式,并补充测试
2026-09-26 16:00:59 +08:00
fanlusky 2ca7414e5c fix(windows): lcompile-release 以 generate.stamp 判断是否需要重新配置
配置失败(例如 vcpkg 安装出错)时 CMakeCache.txt 依然会留下,导致之后
直接跳过 configure、在残缺的构建目录上编译。改为检查只有项目生成成功才
会写入的 CMakeFiles/generate.stamp。
2026-09-26 16:00:59 +08:00
Lu Fan(SonnyCalcr) b4d60c7872 Merge pull request #448 from AaGMix/feat/issue-229-ime-status-indicator
feat: 添加光标输入状态提示
2026-09-26 15:07:04 +08:00
fanlusky 8b6bdb4acd fix(ui-html): 配置同步测试等待懒加载模块完成再恢复全局
configSnapshot 处理器通过 fire-and-forget 的动态 import 把各段配置交给
skin、appearance 等模块。测试同步结束后 afterEach 立即撤销 document
桩,CI 上较慢的 import 随后回调,抛出 document is not defined 的未处理
拒绝。现在为这些模块提供无副作用的桩,并在恢复全局前等待动态 import
全部完成。
2026-09-26 14:07:52 +08:00
fanlusky 59973a9c14 fix(ui-html): 修正下拉菜单键盘焦点与确认键目标
从按钮进入菜单时向下键聚焦第一项、向上键聚焦最后一项;
Enter/空格只作用于菜单内的可用项。
2026-09-26 13:58:22 +08:00
fanlusky 597d087580 fix(server): 光标状态提示仅由用户快捷键触发并收紧协议边界
- 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 时只处理一次
2026-09-26 13:58:22 +08:00
fanlusky dc7cfa0354 Merge branch 'develop' into feat/issue-229-ime-status-indicator 2026-09-26 13:58:03 +08:00
Lu Fan(SonnyCalcr) 39d992c376 Merge pull request #473 from fanlusky/chore/prepare-package-inputs
chore(installer): 新增 prepare-package-inputs.ps1 一键准备模型与词库
2026-09-26 01:23:59 +08:00
fanlusky 52af935d41 chore(installer): 新增 prepare-package-inputs.ps1 一键准备模型与词库
本地打完整测试包需要神经整句模型、sc.lm 和词库。该脚本依次调用 fetch-neural-model.ps1、build-language-model.ps1,并按 product-lock.json 从公开 release 直接下载词库、用 product_lock.py verify-dictionaries 校验,免去本机登录 gh。各步骤均幂等。
2026-09-26 01:12:11 +08:00
Lu Fan(SonnyCalcr) 436c71b80b Merge pull request #467 from metasequoiaime/feat/backspace-restore-selected-word
feat(server,windows): 造词中的退格优先撤销最近一次选词
2026-09-26 00:01:43 +08:00
Jia Sui 6506a7a07f fix(server): 退格删空 raw 不再吞掉已选词
输入 nihaoya、选「你好」、再敲一个字符后连按退格,删掉最后一个 raw 字符
的那一次会把造词态连同已选词一起清掉(尾部「raw 空即清」规则),用户看到
「你好」被直接删掉。这条规则的前提是「客户端会随空 raw 取消组合」,但协商
过 CompositionRestored 的客户端会应用帧、把组合留在「只有已选词」的状态
(与 R3 段删除一致),此时清态反而丢字。

- 新增 ShouldKeepCreatingWordAfterRawEmptied:仅协商过组合恢复、非 UILess
  且有快照时保留造词态与快照;普通退格与 Ctrl+Backspace 段删除共用该谓词。
- 普通退格删空 raw 时置 keep:帧里 word 非空,DLL 走
  _ApplyCreatingWordPayload 的「只有已选词」分支继续组合,不再 _HandleCancel;
  下一次退格由「raw 为空时退格只能是撤销」把最近一次选词撤回,而不是丢整句。
- 未协商与 UILess 客户端维持原行为(本地取消 + 清态),避免两侧状态分叉。
- 测试补 deleting_the_last_raw_character_keeps_the_created_word。
2026-09-25 15:59:05 +08:00
Jia Sui 9aba1a44ea refactor(server): 组合恢复帧统一走候选页发布助手
组合恢复帧的候选发布此前只在注释里按「退格撤销」解释,但条件挂在
composition_restored 上,实际覆盖的是每一帧:退格撤销、Ctrl+Backspace
段删除、Ctrl+方向段跳转。段删除与段跳转同样改了 raw / 光标前缀,旧代码
只发帧不重建页面,页面上留着按键前的候选与选择。

- 把发布逻辑抽成 PublishRestoredCompositionCandidates,注释写明它服务
  的是「每一帧组合恢复」而不是只有撤销,以及两条收起规则(raw 为空、
  前缀为空)各自的理由;抽取不改行为。
- 一次性高亮的消费随之落到助手内部,仍然每帧消费一次,不跨帧泄漏。
2026-09-25 09:46:05 +08:00
Jia Sui a596f8b1bc fix(server): 撤销重高亮只在候选页前缀未变时应用
选词快照记的候选绝对位置对应的是选词那一刻用户眼前的候选页,而撤销
重建的页面由恢复后的 raw 与光标前缀决定:选词之后用 Del 或光标编辑改
动过后缀时,重建页装着另一批候选,旧位置会把高亮落到不相干的项上。

- 新增 FanyImeIpc::NormalizeCandidatePagePrefix,按引擎的页身份把光标
  前缀折成小写(refresh_prefix_candidates 的同一套归一化)并夹到 raw 长度。
- 快照多带一个 selected_page_prefix,取在 advance_composition_after_selection
  之前(那之后引擎已经换成结算后的 raw,不再是用户看到的那一页)。
- 一次性交接从裸 int 改成 RestoredSelectionHighlight(位置 + 页前缀),
  HandleImeKey 重建页面后先比较前缀再套用位置,不一致就只发布新页不高亮。
- 测试更新位置交接用例并覆盖归一化谓词的空串、越界、大小写与改短后缀。
2026-09-25 09:43:38 +08:00
Jia Sui eb6c6f84ce fix(server): 造词态被退格清空时也回帧,避免 TSF 挂起烧满超时
答帧判定用的是按键之后的 creating_word.active,而退格删掉最后一个
raw 字符时尾部会清掉造词态与快照,形态随之消失:这样一次退格不发
帧,而 DLL 的 hold 只看按键前的镜像 word_for_creating_word,仍然
非空,于是白等满 50ms 才回退本地删除,正是本次改动想消除的那类等待。

- HandleImeKey 在 ApplyCompositionEditKey 之前抓一份客户端可见的
  形态,答帧条件改为「撤销过 或 按键前形态 或 按键后形态」,用新的
  ShouldAnswerRetreatBackspace 把这条不变量写成可测谓词。
- 该结局的 payload 是空 raw + 空 word,DLL 侧按 _ApplyCreatingWordPayload
  的空 word 分支立即 _HandleCancel,语义与超时后一致,只是不再等。
- 候选窗收起的判据从「raw 空且造词态还在」放宽为「raw 空」:造词态
  被这次退格终结时同样不能落入重建分支,否则会给空输入发布兜底假候选。
- 测试补 retreat_backspace_reply_survives_the_key_that_ends_the_word。
2026-09-25 09:37:57 +08:00
Jia Sui c06dc17ae1 feat(server,windows): 造词中的退格优先撤销最近一次选词
把"退格撤销上次选词"从旧的两条窄触发(剩余输入只剩一个字符、或光标
正好停在这个词后面)放宽为造词态下的默认行为,对齐 Rime/微信:只要
造词还活着且有可选回的快照,首个退格先撤销最近一次选词,剩余输入
长度与光标位置不再参与判定。

- 选后编辑锁(selected_before_editing):选词后又输入了新字符,退格
  继续删除这些新输入,而不是把选词从脚下抽走;只标记最新快照,与
  Rime 一致。空输入例外——没有字符可删时退格只能是撤销,否则会退回
  #35 的整句丢弃。
- 恢复改为前插:被选词消耗的拼音插回未删除的后缀之前,光标随恢复
  长度平移("输入变长、光标不动"),不再整串覆盖 raw 而丢掉后缀。
- 撤销后重新高亮:选词快照记下所选候选的绝对位置,撤销重建候选页
  后把高亮放回同一项(一次性消费),下次按键可直接改选,不用再找。
- 客户端契约拆成两层:DLL 只凭造词镜像(word_for_creating_word)
  挂起等待回复,看不到 Server 侧的快照与编辑锁,因此新增
  HasRetreatBackspaceShape 描述客户端可见形态,Server 对形态内每个
  退格都必须答帧(撤销、锁定删除或空历史空操作),否则挂起白烧满
  50ms 超时;ShouldRetreatCreatingWordSelection 只在真能改写状态时
  为真。
- 撤销改为纯状态操作,引擎序列、候选重建与光标前缀由尾部统一执行
  一次,替换原先每次撤销都额外跑一遍完整候选查询的 helper。
- DLL 侧:已消耗请求槽位的回复(或光标 0 处的 Normal 应答)之后
  丢弃 request id,让 worker 回退本地读取,而不是为已消失的槽位
  再烧一个 50ms 超时。

Signed-off-by: Jia Sui <jsfaint@gmail.com>
2026-09-24 20:52:12 +08:00
Lu Fan(SonnyCalcr) 2755c77192 Merge pull request #466 from fanlusky/feat/neural-sentence-association
feat: 神经网络整句联想与多来源整句开关
2026-09-24 14:53:55 +08:00
Lu Fan(SonnyCalcr) 9099958b89 Merge pull request #463 from metasequoiaime/feat/candidate-fixed-pin-badge
feat(server): 固定排位候选词显示钉子标识
2026-09-24 14:53:23 +08:00
Jia Sui eac9fa72b5 feat(server): 固定排位候选词显示可配置的徽标
固定排位徽标此前硬编码为 📌,嫌吵的用户既关不掉也换不了。
新增两个配置项:candidate_fixed_badge 总开关与 candidate_fixed_badge_style 样式枚举(paperclip/pushpin/dot),设置页外观分组提供开关与下拉,改动后立即刷新候选页。
配置存枚举名而非字面 emoji,TOML 与日志里不出现图形字符;展示层白名单与配置层同宽,手改 TOML 写错只会退成无徽标。默认样式改为 📎,比实心红钉安静。
2026-09-24 14:32:10 +08:00
fanlusky 631f642630 test(installer): 打包测试夹具补上神经整句模型
Prepare-PackageFiles 要求完整包带两个 safetensors 与授权声明,夹具没跟上导致
Package contents 失败。补夹具、断言三个文件进包,并像 sc.lm 一样验证缺模型时拒绝打包。
2026-09-24 14:18:01 +08:00
fanlusky 9dfa69c7e5 build(installer): 打包神经整句模型并在发布流程中下载
Prepare-PackageFiles 断言并拷贝两个模型与授权声明;release workflow 在收集产物前
运行 fetch-neural-model.ps1。
2026-09-24 14:03:43 +08:00
fanlusky 16877cb2d0 feat(server): 整句联想来源开关接入配置与设置页
新增 [association] 段的五个开关(词格、Google、神经 desktop / keyboard、去重补位),
同步写入出厂模板、工作配置和两个设置窗口宿主的读写映射,设置页输入分区加对应选项。
2026-09-24 14:03:43 +08:00
fanlusky e7f7addd4f feat(engine): 神经网络整句联想与词格 n-best 重排
- 新增 engine/neural:移植 chinese-ime-lm 的字符级 Transformer 推理,在词格解出的最多 12 条
  n-best 里重排挑选整句,desktop / keyboard 两档模型各出一条首选,后台 worker 异步打分
- 词格支持 n-best 输出与重排(quanpin/lattice_rerank),全拼、双拼共用
- 新增 SentenceAssociationOptions,经 QueryRequest 传给各 provider;四个来源默认全关
- 资源契约登记两个 safetensors 与 NOTICE;模型二进制不进仓库,由
  scripts/fetch-neural-model.ps1 按 neural-model/lock.json 下载并校验 SHA256
- 新增 neural_sentence 测试
2026-09-24 14:03:39 +08:00
Lu Fan(SonnyCalcr) 589092e603 Merge pull request #460 from metasequoiaime/feat/caret-driven-resegmentation
feat: 根据光标位置动态组词
2026-09-24 13:39:11 +08:00
fanlusky 3929ec482b fix(server): 前缀选词后同步剩余 raw,避免光标被挪到串尾
HandleImeKey 在选词之前写入 raw_input_with_cases,前缀选词把 caret 归 0 后
它仍是选词前的整串,下一次编辑键里「raw 变了且 caret==0 → 光标移到串尾」的
判定误触发:DLL 光标停在后缀首,Server 跳到串尾,之后的插入与移动两侧分叉。
组合继续时统一同步剩余 raw;串尾造词流不受影响(caret 仍被夹到新串尾)。
2026-09-24 12:54:31 +08:00
Jia Sui 3821f3ede8 fix(server): 补回合并时丢失的测试用例花括号 2026-09-24 09:04:27 +08:00
Jia Sui 5b0be4e71d Merge branch 'develop' into feat/caret-driven-resegmentation 2026-09-24 08:45:54 +08:00
Jia Sui 54c41d34b2 fix(engine): reset_cache 连带失效 caret 前缀候选缓存 2026-09-23 21:32:59 +08:00
Lu Fan(SonnyCalcr) 2ce4ad609a Merge pull request #465 from metasequoiaime/fix/settings-section-title-wrap
fix(ui-html): 设置页区块标题不再被长说明挤压换行
2026-09-23 17:55:48 +08:00
Jia Sui 8f91ecc41c fix(ui-html): 设置页区块标题不再被长说明挤压换行 2026-09-23 17:41:52 +08:00
Lu Fan(SonnyCalcr) b9e437f52f Merge pull request #456 from metasequoiaime/feat/wubi-auto-commit
feat: 五笔 P0 改进:四码自动上屏、顶字、逐键提示与调频接线
2026-09-23 15:55:03 +08:00
fanlusky 7b7b19f449 fix(wubi): 前缀提示不挡混合拼音、候选去重,修复顶字/自动上屏后快打丢字母
- 只有精确码行才算五笔表已回答,前缀提示不再阻止混合拼音回退;拼音无结果时保留提示
- 五笔前缀查询按词去重,保留精确码行
- HideCandidate 抑制改为推送成功记账、Hide 消费(带 1s 时限),不再被下一个按键撤销;
  四码唯一自动上屏路径同样记账
2026-09-23 15:41:04 +08:00
AaGMix adfdab04ab feat(ui-html): 配置并预览光标状态提示 2026-09-22 23:52:28 +08:00
AaGMix 902989abc4 feat(server): 显示光标输入状态提示 2026-09-22 23:52:28 +08:00
AaGMix a855a9c7f4 feat(windows): 发送光标状态切换事件 2026-09-22 21:20:07 +08:00
Jia Sui 4f26f35ac3 fix(server): 光标移回串尾时从引擎重建候选页
RefreshCandidatePageUi 只重排旧 candidate_ui.items、不重读引擎,而结算读的
正是 items。回串尾时引擎已整串重算,页面却停在旧前缀候选:选词只消费前缀,
ni'hao'ya 回串尾得「你好ya」而非「你好呀」。提取
ResolveCaretArrowCandidatePublish(前缀空收起;门控启用含回串尾一律
PrepareCandidateList 重读并复活窗口;未启用维持只刷页面,R7/AC8 零差异)。
2026-09-22 18:49:37 +08:00
Jia Sui fceb0692cb fix(server): 造词帧的 caret 字段只发给协商过组合恢复的客户端
未协商的旧版 DLL 会把第 2 个制表符后的整个尾部当 display_preedit,
追加的 caret 字段会污染一次 inline preedit。提取
ShouldCreateWordFrameCarryCaret 谓词(协商 && caret<剩余串),
未协商时帧输出与旧 Server 字节一致;CompositionRestored 帧本就只在
协商路径产生,无需改。
2026-09-22 16:39:50 +08:00