feat(desktop): 支持成对符号包裹选中文本 - #3925
Conversation
Signed-off-by: Stella-xixi <2559689615@qq.com>
|
| Filename | Overview |
|---|---|
| apps/desktop/src/renderer/lib/pairedSelection.ts | 定义共享符号映射和原生文本控件的选区包裹计算,逻辑直接且测试覆盖主要边界。 |
| apps/desktop/src/renderer/components/new-chat/ListComposerTextarea.tsx | 在原生 textarea 键盘处理链中接入包裹行为,并正确处理 IME、maxlength 与选区方向。 |
| apps/desktop/src/renderer/components/new-chat/SelectionPairing.ts | 通过单个 ProseMirror 事务包裹 TextSelection,但重建选区时会丢失反向选择方向。 |
| apps/desktop/src/renderer/components/markdown/CodeMirrorSelectionPairing.ts | 通过单个 CodeMirror 输入事务完成包裹,同样会把反向选区改为正向。 |
| apps/desktop/src/renderer/components/markdown/PlaintextEditor.tsx | 将共享 CodeMirror 扩展接入纯文本、Markdown 和代码编辑模式。 |
Prompt To Fix All With AI
### Issue 1
apps/desktop/src/renderer/components/new-chat/SelectionPairing.ts:25-28
**反向选区方向丢失**
反向选中文本并输入成对符号后,这里使用已排序的 `from` 和 `to` 重建选区,会将其强制变为正向选区。随后使用 Shift 加方向键时,选区会从另一端扩展或收缩,导致连续编辑行为不符合用户预期。CodeMirror 的适配也存在相同问题,而 textarea 路径已通过 `selectionDirection` 保留原方向;建议根据原选区的 anchor/head 重建方向,并补充反向选区测试。
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Reviews (1): Last reviewed commit: "feat(desktop): 支持成对符号包裹选中文本" | Re-trigger Greptile
| transaction.setSelection( | ||
| TextSelection.create(transaction.doc, from + input.length, to + input.length), | ||
| ); | ||
| view.dispatch(transaction.scrollIntoView()); |
There was a problem hiding this comment.
反向选中文本并输入成对符号后,这里使用已排序的 from 和 to 重建选区,会将其强制变为正向选区。随后使用 Shift 加方向键时,选区会从另一端扩展或收缩,导致连续编辑行为不符合用户预期。CodeMirror 的适配也存在相同问题,而 textarea 路径已通过 selectionDirection 保留原方向;建议根据原选区的 anchor/head 重建方向,并补充反向选区测试。
Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/desktop/src/renderer/components/new-chat/SelectionPairing.ts
Line: 25-28
Comment:
**反向选区方向丢失**
反向选中文本并输入成对符号后,这里使用已排序的 `from` 和 `to` 重建选区,会将其强制变为正向选区。随后使用 Shift 加方向键时,选区会从另一端扩展或收缩,导致连续编辑行为不符合用户预期。CodeMirror 的适配也存在相同问题,而 textarea 路径已通过 `selectionDirection` 保留原方向;建议根据原选区的 anchor/head 重建方向,并补充反向选区测试。
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.|
@Stella-xixi 👋 这个 PR 还有 1 条 review conversation 没 resolve(apps/desktop/src/renderer/components/new-chat/SelectionPairing.ts),auto-review 因此暂时跳过、没法继续审查 / 合并。 如果你已经按评论改完或回应了,请到对应 thread 上点 Resolve conversation;全部 resolve 后,下一轮 auto-review 会自动重新审查这个 PR。 |
|
这个 PR 改的是选中文本后输入成对符号的默认交互(主聊天、textarea、CodeMirror),属于产品行为变化,需要维护者确认后才能继续。 球不在作者这边:请等待维护者在本 PR 上 Approve。如果维护者要求修改,会走 Request Changes;改完后再 Approve 即可放行。 确认方式见讨论 issue:#3927 |
|
命中 UI 路径(apps/desktop/src/renderer/components/markdown/CodeMirrorSelectionPairing.ts / apps/desktop/src/renderer/components/markdown/PlaintextEditor.tsx / apps/desktop/src/renderer/components/new-chat/ChatInput.tsx 等)但 description 未附界面效果证据——建议补充改动后效果:截图/录屏,或改动后界面的 HTML 页面(```html 代码块、.html 附件或在线预览链接),便于确认界面符合 DESIGN.md 设计规范 缺 UI 证据不阻断合并,只是方便对照 DESIGN.md。补一张改动后截图、录屏,或把改动后界面的 HTML 贴进 description 即可。 |
|
@Stella-xixi 👋 这个 PR 现在在等维护者确认,确认之前流程不会合并它 —— 不是卡住了,也不是在等你再改一版(你推的改动流程都读到了,判的就是最新一版代码)。
这条是流程自动发的状态提醒(同一版代码只发一次),不用回复。 |
这次改了什么
摘要
在 Cindy 的主要文本编辑入口中加入类似 VS Code 的选区包裹行为:选中文本后输入双引号、单引号、圆括号、方括号、花括号或尖括号的左符号,会保留原文并在两侧插入配对符号,原内容继续保持选中。
变更类型
feat新功能fix缺陷修复refactor/perf重构或性能优化docs/test/chore文档、测试或工程维护范围
"、'、(、[、{、<时,内容被对应符号包裹而非覆盖。UI 变化
docs/design-rules/DESIGN.md§4 Inputs。本改动只调整既有编辑器的文本输入交互,不新增或改变视觉、布局、颜色、文案与主题样式;Light/Dark 均复用现有界面。怎么验证的
自动验证
手工验证
未执行:当前独立 worktree 不属于运行中 Desktop dev 实例,无法在不影响宿主 checkout 的情况下做实机输入验证。
未执行的验证
风险
风险分类
影响与回滚
提交前检查
git commit -s,见 DCO)