แนวคิด

cmux จัดระเบียบเทอร์มินัลของคุณเป็นลำดับชั้น 4 ระดับ การเข้าใจระดับเหล่านี้ช่วยเมื่อใช้ socket API, CLI และคีย์ลัด

ลำดับชั้น

Window
  └── Workspace (sidebar entry)
        └── Pane (split region)
              └── Surface (tab within pane)
                    └── Panel (terminal or browser content)

หน้าต่าง

หน้าต่าง macOS เปิดหลายหน้าต่างด้วย ⌘⇧N แต่ละหน้าต่างมีแถบข้างของตัวเองพร้อม workspace อิสระ

Workspace

รายการในแถบข้าง แต่ละ workspace มีพาเนลแยกหน้าจอหนึ่งอันหรือมากกว่า Workspace คือสิ่งที่คุณเห็นในรายการแถบข้างซ้าย

ใน UI และคีย์ลัด workspace มักถูกเรียกว่า "แท็บ" เพราะมันทำหน้าที่เหมือนแท็บในแถบข้าง Socket API และตัวแปรสภาพแวดล้อมใช้คำว่า "workspace"

บริบทคำที่ใช้
UI แถบข้างแท็บ
คีย์ลัดWorkspace หรือแท็บ
Socket APIworkspace
ตัวแปรสภาพแวดล้อมCMUX_WORKSPACE_ID

คีย์ลัด: ⌘N (ใหม่), ⌘1–⌘9 (กระโดด), ⌘⇧W (ปิด), ⌃⌘[ / ⌃⌘] (ก่อนหน้า/ถัดไป)

พาเนล

พื้นที่แยกภายใน workspace สร้างโดยแยกด้วย ⌘D (ขวา) หรือ ⌘⇧D (ล่าง) นำทางระหว่างพาเนลด้วย ⌥⌘ + ปุ่มลูกศร

แต่ละพาเนลสามารถมี surface หลายอัน (แท็บภายในพาเนล)

Surface

แท็บภายในพาเนล แต่ละพาเนลมี tab bar ของตัวเองและสามารถมี surface หลายอัน สร้างด้วย ⌘T, นำทางด้วย ⌘[ / ⌘] หรือ ⌃1–⌃9

Surface คือเซสชันเทอร์มินัลหรือเบราว์เซอร์ที่คุณโต้ตอบด้วย แต่ละ surface มีตัวแปรสภาพแวดล้อม CMUX_SURFACE_ID ของตัวเอง

Panel

เนื้อหาภายใน surface ปัจจุบันมีสองประเภท:

  • Terminal: เซสชันเทอร์มินัล Ghostty
  • Browser: embedded web view

Panel เป็นแนวคิดภายในเป็นหลัก ใน socket API และ CLI คุณโต้ตอบกับ surface มากกว่า panel โดยตรง

ตัวอย่างภาพ

┌──────────────────────────────────────────────────────┐
│ ┌──────────┐ ┌─────────────────────────────────────┐ │
│ │ Sidebar  │ │ Workspace "dev"                     │ │
│ │          │ │                                     │ │
│ │          │ │ ┌───────────────┬─────────────────┐ │ │
│ │ > dev    │ │ │ Pane 1        │ Pane 2          │ │ │
│ │   server │ │ │ [S1] [S2]     │ [S1]            │ │ │
│ │   logs   │ │ │               │                 │ │ │
│ │          │ │ │  Terminal     │  Terminal       │ │ │
│ │          │ │ │               │                 │ │ │
│ │          │ │ └───────────────┴─────────────────┘ │ │
│ └──────────┘ └─────────────────────────────────────┘ │
└──────────────────────────────────────────────────────┘

ในตัวอย่างนี้:

  • หน้าต่างมีแถบข้างที่มีสาม workspace (dev, server, logs)
  • Workspace "dev" ถูกเลือก แสดงสองพาเนลเคียงข้างกัน
  • พาเนล 1 มีสอง surface ([S1] และ [S2] ใน tab bar) โดย S1 เป็นตัวที่ใช้งานอยู่
  • พาเนล 2 มี surface หนึ่งอัน
  • แต่ละ surface มี panel (เทอร์มินัลในกรณีนี้)

สรุป

ระดับคืออะไรสร้างโดยระบุโดย
หน้าต่างหน้าต่าง macOS⌘⇧N
Workspaceรายการในแถบข้าง⌘NCMUX_WORKSPACE_ID
พาเนลพื้นที่แยก⌘D / ⌘⇧DPane ID (socket API)
Surfaceแท็บภายในพาเนล⌘TCMUX_SURFACE_ID
Panelเทอร์มินัลหรือเบราว์เซอร์อัตโนมัติPanel ID (ภายใน)