Prilagođene komande
Definirajte prilagođene komande i rasporede radnog prostora dodavanjem datoteke cmux.json u korijenski direktorij vašeg projekta ili ~/.config/cmux/. Komande se pojavljuju u paleti komandi.
Lokacije datoteka
cmux traži konfiguraciju na dva mjesta:
- Po projektu:
./cmux.json— nalazi se u vašem projektnom direktoriju, ima prednost - Globalno:
~/.config/cmux/cmux.json— primjenjuje se na sve projekte, dopunjava komande koje nisu definirane lokalno
Promjene se automatski preuzimaju — nije potrebno ponovno pokretanje.
Shema
Datoteka cmux.json sadrži niz commands. Svaka komanda je ili jednostavna shell komanda ili potpuna definicija radnog prostora:
{
"commands": [
{
"name": "Start Dev",
"keywords": ["dev", "start"],
"workspace": { ... }
},
{
"name": "Run Tests",
"command": "npm test",
"confirm": true
}
]
}Jednostavne komande
Jednostavna komanda pokreće shell komandu u trenutno fokusiranom terminalu:
{
"commands": [
{
"name": "Run Tests",
"keywords": ["test", "check"],
"command": "npm test",
"confirm": true
}
]
}Polja
name— Prikazuje se u paleti komandi (obavezno)description— Neobavezan opiskeywords— Dodatni pojmovi za pretraživanje u paleti komandicommand— Shell komanda za pokretanje u fokusiranom terminaluconfirm— Prikaži dijalog za potvrdu prije pokretanja
Jednostavne komande se pokreću u trenutnom radnom direktoriju fokusiranog terminala. Ako vaša komanda zavisi od putanja relativnih projektu, dodajte prefiks cd "$(git rev-parse --show-toplevel)" && za pokretanje iz korijena repozitorija, ili cd /your/path && za bilo koji specifični direktorij.
Komande radnog prostora
Komanda radnog prostora kreira novi radni prostor s prilagođenim rasporedom podjela, terminala i panela preglednika:
{
"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" }
}
]
}
}
]
}
}
}
]
}Polja radnog prostora
name— Naziv kartice radnog prostora (zadano je naziv komande)cwd— Radni direktorij za radni prostorcolor— Boja kartice radnog prostoralayout— Stablo rasporeda koje definira podjele i panele
Ponašanje pri ponovnom pokretanju
Kontrolira što se dešava kada radni prostor istog naziva već postoji:
"ignore"— Prebaci na postojeći radni prostor (zadano)"recreate"— Zatvori i ponovo kreiraj bez pitanja"confirm"— Pitaj korisnika prije ponovnog kreiranja
Stablo rasporeda
Stablo rasporeda definira kako su paneli raspoređeni koristeći rekurzivne čvorove podjele:
Čvor podjele
Dijeli prostor na dva djeteta:
direction—"horizontal"ili"vertical"split— Pozicija razdjeljnika od 0.1 do 0.9 (zadano 0.5)children— Točno dva dječja čvora (podjela ili panel)
Čvor panela
Listni čvor koji sadrži jednu ili više površina (kartice unutar panela).
Definicija površine
Svaka površina u panelu može biti terminal ili preglednik:
type—"terminal"ili"browser"name— Prilagođeni naslov karticecommand— Shell komanda za automatsko pokretanje pri kreiranju (samo terminal)cwd— Radni direktorij za ovu površinuenv— Varijable okruženja kao parovi ključ-vrijednosturl— URL za otvaranje (samo preglednik)focus— Fokusiraj ovu površinu nakon kreiranja
Razrješavanje radnog direktorija
.ili izostavljeno — radni direktorij radnog prostora./subdir— relativno u odnosu na radni direktorij radnog prostora~/path— prošireno na kućni direktorij- Apsolutna putanja — koristi se kao takvo
Potpuni primjer
{
"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
}
]
}