コンセプト
cmuxはターミナルを4層の階層構造で管理します。これらのレベルを理解することで、socket API、CLI、キーボードショートカットの使用が容易になります。
階層構造
Window
└── Workspace (sidebar entry)
└── Pane (split region)
└── Surface (tab within pane)
└── Panel (terminal or browser content)ウィンドウ
macOSウィンドウです。⌘⇧Nで複数のウィンドウを開けます。各ウィンドウには独立したワークスペースを持つ独自のサイドバーがあります。
ワークスペース
サイドバーの項目です。各ワークスペースには1つ以上の分割ペインが含まれます。ワークスペースは左側のサイドバーに一覧表示されます。
UIやキーボードショートカットでは、ワークスペースはサイドバーのタブのように動作するため「タブ」と呼ばれることがあります。socket APIや環境変数では「ワークスペース」という用語が使われます。
| コンテキスト | 使用される用語 |
|---|---|
| サイドバーUI | タブ |
| キーボードショートカット | ワークスペースまたはタブ |
| Socket API | workspace |
| 環境変数 | CMUX_WORKSPACE_ID |
ショートカット:⌘N(新規)、⌘1–⌘9(ジャンプ)、⌘⇧W(閉じる)、⌘⇧[ / ⌘⇧](前後)
ペイン
ワークスペース内の分割領域です。⌘D(右)または⌘⇧D(下)で分割して作成します。⌥⌘ + 矢印キーでペイン間を移動します。
各ペインは複数のサーフェス(ペイン内のタブ)を持つことができます。
サーフェス
ペイン内のタブです。各ペインには独自のタブバーがあり、複数のサーフェスを持てます。⌘Tで作成、⌘[ / ⌘]または⌃1–⌃9で切り替えます。
サーフェスは操作対象となる個々のターミナルまたはブラウザセッションです。各サーフェスには独自のCMUX_SURFACE_ID環境変数があります。
パネル
サーフェス内のコンテンツです。現在2種類あります:
- ターミナル:Ghosttyターミナルセッション
- ブラウザ:組み込みWebビュー
パネルは主に内部的な概念です。socket APIやCLIでは、パネルではなくサーフェスを直接操作します。
視覚的な例
┌──────────────────────────────────────────────────────┐
│ ┌──────────┐ ┌─────────────────────────────────────┐ │
│ │ Sidebar │ │ Workspace "dev" │ │
│ │ │ │ │ │
│ │ │ │ ┌───────────────┬─────────────────┐ │ │
│ │ > dev │ │ │ Pane 1 │ Pane 2 │ │ │
│ │ server │ │ │ [S1] [S2] │ [S1] │ │ │
│ │ logs │ │ │ │ │ │ │
│ │ │ │ │ Terminal │ Terminal │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ │ └───────────────┴─────────────────┘ │ │
│ └──────────┘ └─────────────────────────────────────┘ │
└──────────────────────────────────────────────────────┘この例では:
- ウィンドウに3つのワークスペース(dev、server、logs)があるサイドバーがあります
- ワークスペース「dev」が選択されており、2つのペインが横に並んでいます
- ペイン1には2つのサーフェス(タブバーの[S1]と[S2])があり、S1がアクティブです
- ペイン2には1つのサーフェスがあります
- 各サーフェスにはパネル(この場合はターミナル)が含まれています
まとめ
| レベル | 内容 | 作成方法 | 識別方法 |
|---|---|---|---|
| ウィンドウ | macOSウィンドウ | ⌘⇧N | — |
| ワークスペース | サイドバーの項目 | ⌘N | CMUX_WORKSPACE_ID |
| ペイン | 分割領域 | ⌘D / ⌘⇧D | ペインID(socket API) |
| サーフェス | ペイン内のタブ | ⌘T | CMUX_SURFACE_ID |
| パネル | ターミナルまたはブラウザ | 自動 | パネルID(内部) |