Skip to content

[Feature] 对话空白区右键改为四向环形快捷菜单 #1909

Closed

Description

@Linuxdazhao

Problem / 问题

在对话正文的空白处右键,目前弹出的是纵向列表:复制整段对话、全选对话文本、跳到顶部、跳到底部(conversationMenuItems,见 apps/desktop/src/features/chat/transcript/menu-items.tsx)。这几个动作在长对话里用得不少,但列表要点过去,指针要移动、瞄准。

截图里的四向环形菜单以指针为圆心,指针往哪个方向甩就落到哪个动作。空白区如果换成这个形态,同样四个动作,操作路径会短一些。

Proposed change / 期望改动

只改对话正文空白区的右键(消息行、链接、文件引用的菜单不动),弹出环形菜单:

  • 圆心在指针位置,四个扇区,图标居中;
  • 指针进入扇区高亮,选中后执行并关闭;Esc 或移出圆环取消;
  • 方向键选择 + Enter 作为键盘等价操作;
  • 首版固定四项,不做子菜单。

四向放什么,有两种取法,想请作者定:

A. 沿用现在空白区的四个动作:上=复制整段对话,右=全选对话文本,下=回到最新,左=跳到顶部。

B. 按截图的全局动作:上=工作区文件(打开项目目录或文件管理器),右=浏览器(内置或默认),下=工作面板,左=引用/插入(截图是 #,PI 里没有现成对应,需要确认是指 @ 文件引用、/ 命令还是别的)。

我倾向 A:动作词汇现成,改动只在渲染层。B 更接近截图,但要新增「当前会话对应的工作区/终端」这类入口,而桌面端目前没有终端面板,IconTerminal 只用于工具类型图标。

Feasibility / 可行性

ContextMenu 已经把动作数据和渲染分开了:useContextMenu 负责 preventDefault、记录指针位置和选区快照,ContextMenu 负责 portal、边缘夹取、焦点和键盘。环形版本可以复用同一份 state 和 items,只替换渲染和命中判定(按角度、半径分扇区),各调用点的业务逻辑不用动。

需要确认的几点:

  1. 交互按哪种:右键弹开后移动并单击扇区,还是按住右键拖向某个方向后松开。
  2. 只改空白区,还是消息行也换成环形。我建议只改空白区,消息行的条目随消息类型变化,列表更稳。
  3. 是否加设置开关;加的话默认开还是关。
  4. 是否要支持四项以上。固定四项时扇区角度好算,也和截图一致。
  5. 无障碍:方向键 + Enter 是否够,还是需要保留列表作为替代入口。

Alternatives / 其他方案

继续用纵向列表;或按住修饰键再右键才出环形;或把「复制对话」「回到最新」做成悬浮按钮,不占右键。

Additional context / 补充信息

参照截图的布局:

          文件夹
            ↑
    #   ←   ○   →   地球
            ↓
          终端

相关:#567 讲的是补齐各处缺失的右键菜单(列表形态),与这里的形态改动不冲突。其中第 3、4 条在现在的 main 上已经不成立:transcript 已有 conversationMenuItems,工作面板标签也在 #1904 补了菜单。

Activity

  1. Linuxdazhao commented on Oct 27, 2026

    @Linuxdazhao
    ContributorAuthor

    补一张示意图,A、B 两种四向取法并排放:

    四向菜单示意

    B 里画虚线的两项(引用/插入、终端)是照截图列的,PI 桌面端目前没有对应入口。

  2. Linuxdazhao commented on Oct 27, 2026

    @Linuxdazhao
    ContributorAuthor

    @vastsa 按 CONTRIBUTING 的窗口期规则,这里作为功能请求记录,不提议 feat PR。想请你确认方向本身:

    1. 形态:空白区右键改成环形(纵向列表保留,作为键盘和无障碍的替代入口),还是先不做?
    2. 四向:按 A(复制整段对话 / 全选对话文本 / 回到最新 / 跳到顶部),还是按 B(工作区文件 / 浏览器 / 引用插入 / 终端)?

    如果你们计划做,我可以把实现要点整理成草案贴在这里:ContextMenu 加环形渲染分支、只接空白区、方向键 + Enter、Esc 关闭、补 E2E 场景和 09-interaction-patterns 的说明。需要补丁我也可以给,是否合并按你们的排期走。

  3. vastsa commented on Oct 27, 2026

    @vastsa
    Owner

    您好,欢迎提 PR,这个想法非常 nice,获取可以放在设置里面自定义,由用户决定他们需要什么快捷方式

  4. vastsa commented on Oct 27, 2026

    @vastsa
    Owner

    完成之后直接@我合入即可,感谢您的时间

  5. Linuxdazhao commented on Oct 27, 2026

    @Linuxdazhao
    ContributorAuthor

    @vastsa PR 提好了:#1919

    按你的建议做了设置项:设置 → AI → 环形右键菜单,一个总开关加四个方向选择器,方向可选复制整段对话 / 全选对话文本 / 复制最后一条回复 / 跳到顶部 / 回到最新 / 留空。开关默认关闭,不改变现有纵向菜单;只有空白区右键走环形,消息、链接、文件引用、侧边栏和工作面板的菜单不变。

    规范(09-interaction-patterns §1.11、06-settings-ia)和 E2E 场景已同步,九个语言包都补了文案。

    有个情况说明一下:这个 worktree 里 Electron 二进制没下载下来,所以环形菜单还没在真实窗口里跑过,单元测试和构建都过了,UI 部分需要你在本地看一眼。

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions