Ö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.json— proje dizininde bulunur, önceliğe sahiptir - Global:
~/.config/cmux/cmux.json— tüm projeler için geçerlidir, yerel olarak tanımlanmayan komutları tamamlar
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:
{
"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:
{
"commands": [
{
"name": "Run Tests",
"keywords": ["test", "check"],
"command": "npm test",
"confirm": true
}
]
}Alanlar
name— Komut paletinde gösterilir (zorunlu)description— İsteğe bağlı açıklamakeywords— Komut paleti için ekstra arama terimlericommand— Odaklanılan terminalde çalıştırılacak shell komutuconfirm— Ç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:
{
"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ı
name— Workspace sekme adı (varsayılan komut adıdır)cwd— Workspace için çalışma dizinicolor— Workspace sekme rengilayout— Bö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"split— 0.1'den 0.9'a bölücü konumu (varsayılan 0.5)children— Tam 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ığıcommand— Oluşturulduğunda otomatik çalıştırılacak shell komutu (yalnızca terminal)cwd— Bu yüzey için çalışma dizinienv— Anahtar-değer çiftleri olarak ortam değişkenleriurl— Açılacak URL (yalnızca tarayıcı)focus— Oluşturulduktan sonra bu yüzeye odaklan
Çalışma dizini çözümlemesi
.veya atlanmış — workspace çalışma dizini./subdir— workspace çalışma dizinine göreli~/path— ana dizine genişletilmiş- Mutlak yol — olduğu gibi kullanılır
Tam örnek
{
"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
}
]
}