Skip to content

fix(terminal): preserve native TUI mouse selection across pane boundaries - #801

Closed
Kuddev wants to merge 3 commits into
mainfrom
fix/native-mouse-editor-20261029
Closed

Kuddev wants to merge 3 commits into
mainfrom
fix/native-mouse-editor-20261029

Conversation

@Kuddev

@Kuddev Kuddev commented Oct 29, 2026

Copy link
Copy Markdown
Owner

Result / 用户结果

修复全屏 TUI 编辑器中的左键拖选:移出分屏、进入相邻分屏或移出窗口后,移动与释放仍交回最初收到按下事件的应用,避免丢失释放或向邻近应用发送未配对的拖动。点击定位、选区和删除继续由 CLI 原生编辑器处理。

Design / 设计边界

  • GPUI 终端视图记录按下时的会话、协议代次及最后有效单元格;窗口捕获监听负责跨命中区域的移动和释放。
  • 终端核心维护鼠标协议/坐标代次,覆盖模式关闭再开启、编码变化、主/备用屏切换、reset 和实际网格 resize。应用重复声明仍启用的鼠标跟踪不会中断有效手势。
  • 失焦、隐藏和布局变化结束手势;旧会话或旧协议的事件丢弃。legacy 编码范围外或历史滚动区的释放使用最后可编码坐标。
  • 无新依赖、工作线程、定时器、持久化或编辑缓冲区;键盘、IME、粘贴、右/中键沿用原路径。鼠标报告只发给原会话。Shift 在按下时决定应用/终端选区归属。
  • 生命周期依据见 architecture/notes/nebula_app/gpui_shell/terminal/view/2026-10-28-application-mouse-gesture-lifetime.md。

Evidence / 验证依据

当前独立分支:

  • python3 scripts/check_architecture.py --base 1b58f5dd74cdfd0ea5e8d0c79a5e55687250db12:通过,只有既有软预算提示。
  • python3 -m unittest scripts.tests.test_architecture_budgets scripts.tests.test_architecture_dependencies scripts.tests.test_architecture_governance:55 通过。
  • 11 个改动 Rust 文件的 rustfmt 检查、提交 diff whitespace 检查:通过。
  • 独立分支直接 GPUI 构建/行为测试等待串行构建资源;PR 暂为 draft。

复用此前已完成的 Linux 实测:本分支全部 8 个生产终端/鼠标文件与被测版本逐文件 Git 对比一致,两个后续修复文件另核对 SHA-256 一致。原生 fixture 额外补上终端按键绑定初始化。

  • Debian 13 / Xfce + Xvnc / 软件 Vulkan,生产 GPUI 终端视图 + 真实 PTY + X11 鼠标键盘事件。
  • Codex 0.165.0、Claude Code 2.1.310:点击中间插入、拖选后 Backspace、中文/组合音标/ZWJ emoji 选区 Delete 均通过;CLI 使用隔离 QA home,未提交模型请求。
  • Codex 另验证反向跨行删除与窗口外释放后继续编辑。Claude 的选中后直接打字实际为追加,保留应用自身语义,不宣称统一替换行为。
  • 30 个 pointer 测试、6 个鼠标编码测试通过;终端核心前序全套 295 通过、2 忽略。原生 Codex / Claude 测试各 1 通过。
  • 回归覆盖两方向跨分屏、按下后 Shift 变化、失焦、隐藏、会话替换、迟到 release、resize、legacy 坐标范围、历史滚动区及应用重申协议。原实现的丢失释放已由失败测试重现。

已有真机结果不等同于当前分支完整工作区/安装包验收;本轮未独立验证 Windows ConPTY、macOS、硬件 GPU 或真实中文 IME 引擎。Unicode 草稿通过产品 IME commit 入口设置,再用真实 X11 鼠标和删除键验证。新增热路径仅一个有界手势状态与捕获检查,没有输入延迟对照测量,不作普遍性能提升声明。

Required Review / 必须确认

  • 已遵循贡献指南、架构与工程合同。
  • 按职责拆分,终端协议代次保持单一权威实现。
  • 架构检查通过,未增加预算。
  • 回归覆盖成功与取消/失效路径;平台与当前分支验证边界已列明。
  • 无新增用户文案、持久化迁移或治理规则改动。

必需 CI 与维护者审阅仍需完成。

@github-actions github-actions Bot added the size/L 501–1500 行 label Oct 29, 2026
@Kuddev Kuddev closed this Oct 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/L 501–1500 行

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant