[Bug] 启用带连字(ligature/calt)的字体后,Web 输入框开头字符不显示 #6269
jakiesumrain
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Bug:启用带连字(ligature/calt)的字体后,Web 输入框开头字符不显示
摘要 / Summary
在 Web UI(
dsh web)中,通过自定义 CSS 把界面字体换成默认启用连字 / 上下文替代(calt)的字体后,在会话输入框(composer)中连续输入大量符号(例如一行-)时,开头的若干字符不可见——字符确实存在于 DOM 中、光标位置正常,但左侧一段没有绘制出来。撤销该字体样式后立即恢复正常。复现步骤 / Reproduction
npx @deepseek-ai/dsh web启动 Web UI。用 Stylus / 用户样式把界面字体指向一个默认启用连字与上下文替代的字体,例如 Maple Mono NF CN:
刷新页面,在底部输入框中连续输入一行符号,例如
--------------------(或先输入-若干再输入文字)。观察输入框左侧:开头的若干
-没有绘制出来,视觉上像是从中间开始。实际行为 / Current behavior
Range.getClientRects()均正常(单个文本矩形,起点在编辑器左内边距 14px 处),说明排版正确、只是没有绘制 / 字形被替换后未正确渲染。预期行为 / Expected behavior
输入框内所有字符都应正常绘制,不应因为所选字体启用了连字 / 上下文替代而丢失可见性。
可行的规避方式 / Workaround
在用户样式中显式关闭这些字形特性即可恢复:
建议的上游修复 / Suggested fix
在 composer 的 contenteditable 样式上直接关闭连字,不要依赖用户样式:
即:正文与代码块可以保留连字,但编辑区应强制使用标准字形,以避免用户更换字体后出现“字符不显示”的问题。
环境 / Environment
@deepseek-ai/dsh@0.1.5-rc.1(npm 全局安装)Maple Mono NF CN(本地安装,calt默认开启)备注 / Notes
我尝试在 headless Chromium(同一台机器,包含 GPU/ANGLE、SwiftShader、1x/1.25x/2x 缩放、有头/无头)中复现,均未复现:DOM 文本、文本矩形与渲染像素都正常。该问题只在用户本机 Chrome 中稳定出现,因此可能与具体渲染路径相关;这里提供的因果判断(连字特性 → 字形替换 → 未绘制)是经过用户端 A/B 验证的结论:启用该字体的样式必然复现,关闭必然恢复,且加上述
font-feature-settings关闭连字后即修复。与已有讨论的关系 / Related discussions
发帖前已检索全部 800 条 Discussion 的标题(中英文症状词:字体/字形/连字/输入框/符号/显示/不显示/渲染/消失/font/glyph/ligature/composer),并逐条阅读了最接近的 5 条正文。未发现同一问题的重复提交,但以下两条相关,特此说明区别:
0.1.0-rc.6;本问题是更换字体触发、版本0.1.5-rc.1,且输入框与文字均正常存在,只有开头一段未绘制。两者可能是同一渲染脆弱点的不同触发路径,建议维护者一并参考。<textarea>+color:transparent+.backdrop镜像层)在当前0.1.5-rc.1中已不存在:输入框现为 Lexicalcontenteditable,文字使用color: var(--dsw-alias-label-primary)直接绘制,包内已无_backdrop/_mirror。因此该文所述根因不适用于本问题,仅作为历史背景。其余候选不相关:#696 为 RTL/双向文本排序错误(另一类失败),#398 为统计行省略号截断,#277 为 Markdown 删除线渲染。
All reactions