Özel Komutlar

Proje köküne veya ~/.config/cmux/ dizinine bir cmux.json dosyası ekleyerek özel komutlar ve workspace düzenleri tanımlayın. Komutlar komut paletinde görünür.

Dosya konumları

cmux yapılandırmayı iki yerde arar:

  • Proje başına: ./cmux.jsonproje dizininde bulunur, önceliğe sahiptir
  • Global: ~/.config/cmux/cmux.jsontüm projeler için geçerlidir, yerel olarak tanımlanmayan komutları tamamlar
Yerel komutlar, aynı adlı global komutları geçersiz kılar.

Değişiklikler otomatik olarak algılanır — yeniden başlatma gerekmez.

Şema

Bir cmux.json dosyası bir commands dizisi içerir. Her komut ya basit bir shell komutu ya da tam bir workspace tanımıdır:

cmux.json
{
  "commands": [
    {
      "name": "Start Dev",
      "keywords": ["dev", "start"],
      "workspace": { ... }
    },
    {
      "name": "Run Tests",
      "command": "npm test",
      "confirm": true
    }
  ]
}

Basit komutlar

Basit bir komut, o an odaklanılan terminalde bir shell komutu çalıştırır:

cmux.json
{
  "commands": [
    {
      "name": "Run Tests",
      "keywords": ["test", "check"],
      "command": "npm test",
      "confirm": true
    }
  ]
}

Alanlar

  • nameKomut paletinde gösterilir (zorunlu)
  • descriptionİsteğe bağlı açıklama
  • keywordsKomut paleti için ekstra arama terimleri
  • commandOdaklanılan terminalde çalıştırılacak shell komutu
  • confirmÇalıştırmadan önce onay iletişim kutusu göster

Basit komutlar, odaklanan terminalin mevcut çalışma dizininde çalıştırılır. Komutunuz projeye göreceli yollar gerektiriyorsa, başına cd "$(git rev-parse --show-toplevel)" && ekleyerek repo kökünden çalıştırabilir veya cd /your/path && ile herhangi bir dizini belirtebilirsiniz.

Workspace komutları

Bir workspace komutu, bölünmeler, terminaller ve tarayıcı panellerinin özel düzeniyle yeni bir workspace oluşturur:

cmux.json
{
  "commands": [
    {
      "name": "Dev Environment",
      "keywords": ["dev", "fullstack"],
      "restart": "confirm",
      "workspace": {
        "name": "Dev",
        "cwd": ".",
        "layout": {
          "direction": "horizontal",
          "split": 0.5,
          "children": [
            {
              "pane": {
                "surfaces": [
                  {
                    "type": "terminal",
                    "name": "Frontend",
                    "command": "npm run dev",
                    "focus": true
                  }
                ]
              }
            },
            {
              "pane": {
                "surfaces": [
                  {
                    "type": "terminal",
                    "name": "Backend",
                    "command": "cargo watch -x run",
                    "cwd": "./server",
                    "env": { "RUST_LOG": "debug" }
                  }
                ]
              }
            }
          ]
        }
      }
    }
  ]
}

Workspace alanları

  • nameWorkspace sekme adı (varsayılan komut adıdır)
  • cwdWorkspace için çalışma dizini
  • colorWorkspace sekme rengi
  • layoutBölünmeleri ve panelleri tanımlayan düzen ağacı

Yeniden başlatma davranışı

Aynı adda bir workspace zaten mevcut olduğunda ne olacağını kontrol eder:

  • "ignore"Mevcut workspace'e geç (varsayılan)
  • "recreate"Sormadan kapat ve yeniden oluştur
  • "confirm"Yeniden oluşturmadan önce kullanıcıya sor

Düzen ağacı

Düzen ağacı, özyinelemeli bölünme düğümleri kullanarak panellerin nasıl düzenlendiğini tanımlar:

Bölünme düğümü

Alanı iki alt öğeye böler:

  • direction"horizontal" veya "vertical"
  • split0.1'den 0.9'a bölücü konumu (varsayılan 0.5)
  • childrenTam olarak iki alt düğüm (bölünme veya panel)

Panel düğümü

Bir veya daha fazla yüzey (panel içindeki sekmeler) içeren yaprak düğüm.

Yüzey tanımı

Bir paneldeki her yüzey terminal veya tarayıcı olabilir:

  • type"terminal" veya "browser"
  • nameÖzel sekme başlığı
  • commandOluşturulduğunda otomatik çalıştırılacak shell komutu (yalnızca terminal)
  • cwdBu yüzey için çalışma dizini
  • envAnahtar-değer çiftleri olarak ortam değişkenleri
  • urlAçılacak URL (yalnızca tarayıcı)
  • focusOluşturulduktan sonra bu yüzeye odaklan

Çalışma dizini çözümlemesi

  • . veya atlanmışworkspace çalışma dizini
  • ./subdirworkspace çalışma dizinine göreli
  • ~/pathana dizine genişletilmiş
  • Mutlak yololduğu gibi kullanılır

Tam örnek

cmux.json
{
  "commands": [
    {
      "name": "Web Dev",
      "description": "Docs site with live preview",
      "keywords": ["web", "docs", "next", "frontend"],
      "restart": "confirm",
      "workspace": {
        "name": "Web Dev",
        "cwd": "./web",
        "color": "#3b82f6",
        "layout": {
          "direction": "horizontal",
          "split": 0.5,
          "children": [
            {
              "pane": {
                "surfaces": [
                  {
                    "type": "terminal",
                    "name": "Next.js",
                    "command": "npm run dev",
                    "focus": true
                  }
                ]
              }
            },
            {
              "direction": "vertical",
              "split": 0.6,
              "children": [
                {
                  "pane": {
                    "surfaces": [
                      {
                        "type": "browser",
                        "name": "Preview",
                        "url": "http://localhost:3777"
                      }
                    ]
                  }
                },
                {
                  "pane": {
                    "surfaces": [
                      {
                        "type": "terminal",
                        "name": "Shell",
                        "env": { "NODE_ENV": "development" }
                      }
                    ]
                  }
                }
              ]
            }
          ]
        }
      }
    },
    {
      "name": "Debug Log",
      "description": "Tail the debug event log from the running dev app",
      "keywords": ["log", "debug", "tail", "events"],
      "restart": "ignore",
      "workspace": {
        "name": "Debug Log",
        "layout": {
          "direction": "horizontal",
          "split": 0.5,
          "children": [
            {
              "pane": {
                "surfaces": [
                  {
                    "type": "terminal",
                    "name": "Events",
                    "command": "tail -f /tmp/cmux-debug.log",
                    "focus": true
                  }
                ]
              }
            },
            {
              "pane": {
                "surfaces": [
                  {
                    "type": "terminal",
                    "name": "Shell"
                  }
                ]
              }
            }
          ]
        }
      }
    },
    {
      "name": "Setup",
      "description": "Initialize submodules and build dependencies",
      "keywords": ["setup", "init", "install"],
      "command": "./scripts/setup.sh",
      "confirm": true
    },
    {
      "name": "Reload",
      "description": "Build and launch the debug app tagged to the current branch",
      "keywords": ["reload", "build", "run", "launch"],
      "command": "./scripts/reload.sh --tag $(git branch --show-current)"
    },
    {
      "name": "Run Unit Tests",
      "keywords": ["test", "unit"],
      "command": "./scripts/test-unit.sh",
      "confirm": true
    }
  ]
}