Концепции

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 APIworkspace
Переменная окружения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
Рабочее пространствоЭлемент боковой панели⌘NCMUX_WORKSPACE_ID
ПанельРазделённая область⌘D / ⌘⇧DID панели (socket API)
ПоверхностьВкладка в панели⌘TCMUX_SURFACE_ID
ПанельТерминал или браузерАвтоматическиID панели (внутренний)