核心概念
cmux 以四层层级结构组织你的终端。理解这些层级有助于使用 socket API、CLI 和快捷键。
层级结构
Window
└── Workspace (sidebar entry)
└── Pane (split region)
└── Surface (tab within pane)
└── Panel (terminal or browser content)窗口(Window)
一个 macOS 窗口。使用 ⌘⇧N 打开多个窗口。每个窗口有独立的侧边栏和独立的工作区。
工作区(Workspace)
侧边栏中的一个条目。每个工作区包含一个或多个分屏面板。工作区就是你在左侧侧边栏中看到的条目。
在 UI 和快捷键中,工作区通常被称为「标签页」,因为它们的行为类似侧边栏中的标签页。Socket API 和环境变量使用「workspace」这个术语。
| 上下文 | 使用的术语 |
|---|---|
| 侧边栏 UI | 标签页 |
| 快捷键 | 工作区或标签页 |
| Socket API | workspace |
| 环境变量 | CMUX_WORKSPACE_ID |
快捷键:⌘N(新建)、⌘1–⌘9(跳转)、⌘⇧W(关闭)、⌃⌘[ / ⌃⌘](上一个/下一个)
面板(Pane)
工作区内的一个分屏区域。通过 ⌘D(向右)或 ⌘⇧D(向下)创建分屏。使用 ⌥⌘ + 方向键在面板间导航。
每个面板可以包含多个 surface(面板内的标签页)。
Surface
面板内的一个标签页。每个面板有自己的标签栏,可以包含多个 surface。使用 ⌘T 创建,使用 ⌘[ / ⌘] 或 ⌃1–⌃9 导航。
Surface 是你直接交互的终端或浏览器会话。每个 surface 有自己的 CMUX_SURFACE_ID 环境变量。
Panel
Surface 内部的内容。目前有两种类型:
- 终端:一个 Ghostty 终端会话
- 浏览器:一个内嵌的 web 视图
Panel 主要是内部概念。在 socket API 和 CLI 中,你与 surface 交互,而不是直接与 panel 交互。
示例图解
┌──────────────────────────────────────────────────────┐
│ ┌──────────┐ ┌─────────────────────────────────────┐ │
│ │ Sidebar │ │ Workspace "dev" │ │
│ │ │ │ │ │
│ │ │ │ ┌───────────────┬─────────────────┐ │ │
│ │ > dev │ │ │ Pane 1 │ Pane 2 │ │ │
│ │ server │ │ │ [S1] [S2] │ [S1] │ │ │
│ │ logs │ │ │ │ │ │ │
│ │ │ │ │ Terminal │ Terminal │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ │ └───────────────┴─────────────────┘ │ │
│ └──────────┘ └─────────────────────────────────────┘ │
└──────────────────────────────────────────────────────┘在这个示例中:
- 窗口包含一个带有三个工作区(dev、server、logs)的侧边栏
- 工作区「dev」被选中,显示两个并排的面板
- 面板 1 有两个 surface(标签栏中的 [S1] 和 [S2]),S1 处于激活状态
- 面板 2 有一个 surface
- 每个 surface 包含一个 panel(在本例中是终端)
总结
| 层级 | 描述 | 创建方式 | 标识方式 |
|---|---|---|---|
| 窗口(Window) | macOS 窗口 | ⌘⇧N | — |
| 工作区(Workspace) | 侧边栏条目 | ⌘N | CMUX_WORKSPACE_ID |
| 面板(Pane) | 分屏区域 | ⌘D / ⌘⇧D | Pane ID(socket API) |
| Surface | 面板内的标签页 | ⌘T | CMUX_SURFACE_ID |
| Panel | 终端或浏览器 | 自动 | Panel ID(内部) |