Repository navigation
Replies: 1 comment
|
是 行号先对齐一下:你引的 rc.5 上确实在 机制你说得对:Blink 的 text iterator 对非 inline 的布局对象前后各补一个 两种修法,取舍不同
顺带一句:改成 先验证再改:DevTools 里把那条规则的 只读了 master |
0 replies
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.
环境
@deepseek-ai/dsh0.2.1-rc.5,Web GUI(127.0.0.1:3080)现象
在助手消息里从段落开头拖选到结尾(选区中含行内
code),Ctrl+C 后粘贴到任意纯文本框(例如 DSH 底部输入框),结果是:每一段行内 code 前后各多出一个换行符,code 之外的文字留在原来那一行,行尾空格也还在。视觉上完全正常,只有复制出来的纯文本坏掉。块级 ``` 代码栅栏不受影响(它自带复制按钮)。原文形如:
粘贴出来变成:
这不是多打了换行,是剪贴板里的真字符
粘贴后手工删掉这些换行,显示立刻恢复正常;换行数量与粘贴进来的一致。DevTools 里
getSelection().toString()也能直接看到这些\n。所以是"复制那一刻"写进去的,不是渲染折行。根因
packages/client/ui-primitives/src/markdown/MarkdownText.module.css:163-174
Chromium 把选区序列化为纯文本时,会在"非 inline 的块级布局对象"前后各插一个 \n:
third_party/blink/renderer/core/editing/iterators/text_iterator.cc:662
ShouldEmitNewlinesBeforeAndAfterNode()→ :709
return !r->IsInline() && r->IsLayoutBlock() && !r->IsFloatingOrOutOfFlowPositioned() && !r->IsBody();display:inline-flex生成的布局对象是 LayoutFlexibleBox(继承 LayoutBlock,IsInline() 为 false),前后各命中一次 ⇒ 行内代码被复制成一整行。(inline-block 同理;只有display:inline的 LayoutInline 不会触发。)对照同一组件的 compact 变体,同文件 :384-392:
compact 路径复制时不断行 —— 看上去更像主路径漏了这两条声明,而不是有意设计。
当前 0.2.1-rc.5 的构建产物里规则仍在:
node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-BNyAYEM7.css:1
._markdown_1ypvv_5 :not(pre)>code{display:inline-flex;align-items:center;...}复现
建议修法
主路径向 compact 变体对齐:
代价只是胶囊的垂直居中退回基线对齐(水平 padding、圆角、背景色都保留)。
相关
如果这个胶囊视觉是有意为之,也请说明一下,我就只在本地覆盖。
All reactions