Egendefinerte kommandoer
Definer egendefinerte kommandoer og workspace-oppsett ved å legge til en cmux.json-fil i prosjektets rotmappe eller ~/.config/cmux/. Kommandoer vises i kommandopaletten.
Filplasseringer
cmux søker etter konfigurasjon to steder:
- Per prosjekt:
./cmux.json— ligger i prosjektmappen din, har forrang - Global:
~/.config/cmux/cmux.json— gjelder alle prosjekter, fyller inn kommandoer som ikke er definert lokalt
Endringer hentes automatisk — ingen omstart nødvendig.
Skjema
En cmux.json-fil inneholder en commands-array. Hver kommando er enten en enkel shell-kommando eller en fullstendig workspace-definisjon:
{
"commands": [
{
"name": "Start Dev",
"keywords": ["dev", "start"],
"workspace": { ... }
},
{
"name": "Run Tests",
"command": "npm test",
"confirm": true
}
]
}Enkle kommandoer
En enkel kommando kjører en shell-kommando i den for øyeblikket fokuserte terminalen:
{
"commands": [
{
"name": "Run Tests",
"keywords": ["test", "check"],
"command": "npm test",
"confirm": true
}
]
}Felter
name— Vises i kommandopaletten (påkrevd)description— Valgfri beskrivelsekeywords— Ekstra søkeord for kommandopalettencommand— Shell-kommando som kjøres i den fokuserte terminalenconfirm— Vis en bekreftelsesdialog før kjøring
Enkle kommandoer kjøres i den fokuserte terminalens gjeldende arbeidskatalog. Hvis kommandoen din avhenger av prosjektrelative stier, legg til prefiks cd "$(git rev-parse --show-toplevel)" && for å kjøre fra repo-roten, eller cd /your/path && for en hvilken som helst spesifikk katalog.
Workspace-kommandoer
En workspace-kommando oppretter et nytt workspace med et egendefinert oppsett av delinger, terminaler og nettleserpaneler:
{
"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-felter
name— Workspace-fanenavn (standard er kommandonavn)cwd— Arbeidsmappe for workspacetcolor— Farge på workspace-fanenlayout— Oppsettstre som definerer delinger og paneler
Omstartsatferd
Styrer hva som skjer når et workspace med samme navn allerede eksisterer:
"ignore"— Bytt til det eksisterende workspacet (standard)"recreate"— Lukk og gjenopprett uten å spørre"confirm"— Spør brukeren før gjenoppretting
Oppsettstre
Oppsettstreet definerer hvordan paneler er arrangert ved hjelp av rekursive delingsknuter:
Delingsknute
Deler plassen i to barn:
direction—"horizontal"eller"vertical"split— Delerposisjon fra 0.1 til 0.9 (standard 0.5)children— Nøyaktig to barneknuter (deling eller panel)
Panelknute
En bladknute som inneholder én eller flere overflater (faner innen panelet).
Overflatedefinisjon
Hver overflate i et panel kan være en terminal eller en nettleser:
type—"terminal"eller"browser"name— Egendefinert fanetittelcommand— Shell-kommando som kjøres automatisk ved opprettelse (kun terminal)cwd— Arbeidsmappe for denne overflatenenv— Miljøvariabler som nøkkel-verdi-parurl— URL som skal åpnes (kun nettleser)focus— Fokuser på denne overflaten etter opprettelse
Oppløsning av arbeidsmappe
.eller utelatt — workspace-arbeidsmappe./subdir— relativ til workspace-arbeidsmappen~/path— utvidet til hjemmemappen- Absolutt sti — brukes som den er
Fullstendig eksempel
{
"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
}
]
}