コンセプト

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 APIworkspace
環境変数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
ワークスペースサイドバーの項目⌘NCMUX_WORKSPACE_ID
ペイン分割領域⌘D / ⌘⇧DペインID(socket API)
サーフェスペイン内のタブ⌘TCMUX_SURFACE_ID
パネルターミナルまたはブラウザ自動パネルID(内部)