Skip to content

[Feature] [UX] 文件路径菜单找不到入口:默认折叠 + 只有 hover 才出现的「⋯」(附:hover 看不到文件真实位置) #74

Description

@Baekjojo

What problem does this solve?

功能本身是好的:main/path-target.ts + ui/FilePathMenu.tsx 能把「相对 / 中文 / 空格」路径正确解析成
绝对路径,三个动作(打开文件 / 在访达中显示 / 复制路径)在 Windows 11 + 0.6.0 上实测都正常。
问题是入口找不到,而且看不到文件到底在哪。

我自己为了找到它花了点时间,过程:

  1. 让 agent 改一个文件;
  2. 轮末那行「修改了 1 个文件 · +23 −0」默认是收起的(TurnDiffChip.tsx:97 的 <details> 没有
    open,也没有受控状态),所以文件路径当时不在屏幕上;
  3. 先去的两个地方都没有菜单:
    • 工具调用卡自己的摘要行也显示文件路径(chat/ToolCallCard.tsx:73 的 summarizeArgs 会取
      path 参数,第 98 行渲染成卡片摘要),但那里没有挂点;
    • 聊天正文 / 工具输出里出现的路径文本同样没有挂点(不做文本嗅探是明确的取舍);
  4. 最后才意识到:要先点那行右侧的箭头展开,再对展开出来的文件行右键,或者把鼠标停上去等
    hover 出的「⋯」。

两个问题

① 入口不可发现

  • components/chat/TurnDiffChip.tsx:97:一个 <details>(className 为 turn-diff drawer-details
    加一个进入动画类),默认收起;
  • components/chat/TurnDiffChip.tsx:148(注释原文):「主操作仍是左键跳 diff,这里是冗余入口
    (与胶囊叉叉同款:aria-hidden 的鼠标增强)」,对应实现里该按钮带 aria-hidden="true"(第 151 行);
  • styles/globals.css:1743(注释原文):「文件行「⋯」更多按钮(issue [Feature] 任务栏最小化 / 模型搜索 / 对话重命名置顶 / 文件右键打开 #55 ⑤):hover 该行才浮出,
    点开与右键同一套菜单。」→ 实现是 :1746-1757 基础规则 opacity: 0(第 1754 行),
    :1761-1763 仅在 .turn-diff-file:hover 时变 opacity: 1;
  • 行本身有 cursor: pointer + :hover { background: var(--color-hover) }(globals.css:897-916),
    但它暗示的是左键可点;对右键没有任何提示;
  • 挂点只有两处:轮末文件行(TurnDiffChip)与变更抽屉卡片头(DiffFileCard)—— 扫过 renderer
    全部 89 个 tsx,引用 FilePathMenu 的只有这两个。

进入菜单需要连续猜中三件事:要展开、要 hover、要右键。

② hover 看不到文件的真实位置

  • styles/globals.css:917-929(注释原文「mono path RTL 截断:优先保留文件名端」):
    .turn-diff-path 用 direction: rtl + text-overflow: ellipsis + max-width: 420px 截断,
    优先保留文件名、切掉目录 → 路径越长,位置信息越少;
  • 行上其实已有 title={f.path}(TurnDiffChip.tsx:139、DiffFileCard.tsx:179),但内容是原始
    相对路径
    (就是行上已经显示的那串),对「这文件在磁盘哪儿」没有帮助;
  • 结果是:知道改了哪个文件,但不知道它在什么位置。

顺带一个平台用词问题(同一菜单):
i18n/zh.ts:238 reveal: "在访达中显示"、:568 pathRevealFailed: "无法在访达中显示";
i18n/en.ts:241 "Reveal in Finder"、:583 "Could not reveal in Finder"。
Windows 上没有「访达」,i18n 里也没有按平台取词的分支。

Proposed solution

  1. 折叠态就能进菜单:summary 那行 hover 时直接给出入口,这样不必先猜出「要先展开」;
  2. 文件行 hover 时用 tooltip 显示解析后的绝对路径,替掉现在的原生 title(相对路径)。这样既补上
    「文件在哪」,也让「这一行可交互」有了明确信号。零件基本都是现成的:宿主已有 ui/Tooltip.tsx,
    它的文件头注释原文就是「轻量自定义 tooltip,替代原生 title(延迟不可控/跟随鼠标/系统样式)」——
    而文件行现在用的正是原生 title;解析通道 resolvePath 也已在用(「复制路径」走的就是它),
    两个挂点都已经拿得到 cwd。注意:该 tooltip 现在是 whitespace-nowrap 的单行气泡,长绝对路径
    可能横向溢出,实现时大概需要换行/断词变体(组件注释里也提到靠右缘要用 align="end");
  3. 「⋯」键盘可达(Tab + Enter),并去掉 aria-hidden;
  4. 文案按平台取词:Windows 用「在文件资源管理器中显示」,macOS 保留「在访达中显示」。

Alternatives considered

  • 靠搜索框或变更抽屉找文件(都是绕路,而且抽屉里同样是这个 hover-only 的 ⋯);
  • 把菜单挂到更多地方(工具卡路径、正文路径)—— 会被文本嗅探的问题拖住,所以现在这个取舍本身
    没问题,要补的是「可发现性」而不是「更多挂点」;
  • 只把路径行宽度放开不截断 —— 长路径会撑坏布局,不如 hover 出完整绝对路径。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions