Концепции
cmux организует терминалы в четырёхуровневую иерархию. Понимание этих уровней помогает при работе с socket API, CLI и горячими клавишами.
Иерархия
Window
└── Workspace (sidebar entry)
└── Pane (split region)
└── Surface (tab within pane)
└── Panel (terminal or browser content)Окно
Окно macOS. Открой несколько окон с помощью ⌘⇧N. У каждого окна своя боковая панель с независимыми рабочими пространствами.
Рабочее пространство
Элемент боковой панели. Каждое рабочее пространство содержит одну или более разделённых панелей. Рабочие пространства это то, что ты видишь на левой боковой панели.
В интерфейсе и горячих клавишах рабочие пространства часто называются "вкладками", потому что ведут себя как вкладки на боковой панели. Socket API и переменные окружения используют термин "workspace".
| Контекст | Используемый термин |
|---|---|
| Интерфейс боковой панели | Вкладка |
| Горячие клавиши | Рабочее пространство или вкладка |
| Socket API | workspace |
| Переменная окружения | CMUX_WORKSPACE_ID |
Шорткаты: ⌘N (новый), ⌘1–⌘9 (прыжок), ⌘⇧W (закрыть), ⌃⌘[ / ⌃⌘] (пред./след.)
Панель
Разделённая область внутри рабочего пространства. Создаётся разделением с помощью ⌘D (вправо) или ⌘⇧D (вниз). Навигация между панелями: ⌥⌘ + стрелки.
Каждая панель может содержать несколько поверхностей (вкладок внутри панели).
Поверхность
Вкладка внутри панели. У каждой панели своя полоса вкладок и она может содержать несколько поверхностей. Создаётся через ⌘T, навигация через ⌘[ / ⌘] или ⌃1–⌃9.
Поверхности это отдельные сессии терминала или браузера, с которыми ты взаимодействуешь. У каждой поверхности своя переменная окружения CMUX_SURFACE_ID.
Панель
Содержимое внутри поверхности. Сейчас два типа:
- Терминал: сессия терминала Ghostty
- Браузер: встроенный веб-вид
Панель это в основном внутренняя концепция. В socket API и CLI ты взаимодействуешь с поверхностями, а не напрямую с панелями.
Визуальный пример
┌──────────────────────────────────────────────────────┐
│ ┌──────────┐ ┌─────────────────────────────────────┐ │
│ │ Sidebar │ │ Workspace "dev" │ │
│ │ │ │ │ │
│ │ │ │ ┌───────────────┬─────────────────┐ │ │
│ │ > dev │ │ │ Pane 1 │ Pane 2 │ │ │
│ │ server │ │ │ [S1] [S2] │ [S1] │ │ │
│ │ logs │ │ │ │ │ │ │
│ │ │ │ │ Terminal │ Terminal │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ │ └───────────────┴─────────────────┘ │ │
│ └──────────┘ └─────────────────────────────────────┘ │
└──────────────────────────────────────────────────────┘В этом примере:
- Окно содержит боковую панель с тремя рабочими пространствами (dev, server, logs)
- Рабочее пространство "dev" выбрано, показывает две панели рядом
- Панель 1 имеет две поверхности ([S1] и [S2] на полосе вкладок), с активной S1
- Панель 2 имеет одну поверхность
- Каждая поверхность содержит панель (в данном случае терминал)
Итого
| Уровень | Что это | Создаётся | Идентифицируется |
|---|---|---|---|
| Окно | Окно macOS | ⌘⇧N | — |
| Рабочее пространство | Элемент боковой панели | ⌘N | CMUX_WORKSPACE_ID |
| Панель | Разделённая область | ⌘D / ⌘⇧D | ID панели (socket API) |
| Поверхность | Вкладка в панели | ⌘T | CMUX_SURFACE_ID |
| Панель | Терминал или браузер | Автоматически | ID панели (внутренний) |