Brugerdefinerede kommandoer
Definer brugerdefinerede kommandoer og workspace-layouts ved at tilføje en cmux.json-fil til din projektrod eller ~/.config/cmux/. Kommandoer vises i kommandopaletten.
Filplaceringer
cmux leder efter konfiguration to steder:
- Per projekt:
./cmux.json— befinder sig i din projektmappe, har forrang - Global:
~/.config/cmux/cmux.json— gælder for alle projekter, udfylder kommandoer, der ikke er defineret lokalt
Ændringer hentes automatisk — ingen genstart nødvendig.
Skema
En cmux.json-fil indeholder et commands-array. Hver kommando er enten en simpel shell-kommando eller en fuld workspace-definition:
{
"commands": [
{
"name": "Start Dev",
"keywords": ["dev", "start"],
"workspace": { ... }
},
{
"name": "Run Tests",
"command": "npm test",
"confirm": true
}
]
}Simple kommandoer
En simpel kommando kører en shell-kommando i den aktuelt fokuserede terminal:
{
"commands": [
{
"name": "Run Tests",
"keywords": ["test", "check"],
"command": "npm test",
"confirm": true
}
]
}Felter
name— Vises i kommandopaletten (påkrævet)description— Valgfri beskrivelsekeywords— Ekstra søgetermer til kommandopalettencommand— Shell-kommando der skal køres i den fokuserede terminalconfirm— Vis en bekræftelsesdialog før kørsel
Simple kommandoer køres i den fokuserede terminals aktuelle arbejdsmappe. Hvis din kommando afhænger af projektrelative stier, sæt foran med cd "$(git rev-parse --show-toplevel)" && for at køre fra repo-roden, eller cd /your/path && for enhver specifik mappe.
Workspace-kommandoer
En workspace-kommando opretter et nyt workspace med et brugerdefineret layout af opdelte terminaler og browserpaneler:
{
"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 kommandoens navn)cwd— Arbejdsmappe for workspacetcolor— Farve på workspace-fanenlayout— Layouttræ der definerer opdelinger og paneler
Genstartsadfærd
Styrer hvad der sker, når der allerede eksisterer et workspace med samme navn:
"ignore"— Skift til det eksisterende workspace (standard)"recreate"— Luk og genskab uden at spørge"confirm"— Spørg brugeren inden genskabelse
Layouttræ
Layouttræet definerer, hvordan paneler arrangeres ved hjælp af rekursive opdelingsknuder:
Opdelingsknude
Deler plads i to børn:
direction—"horizontal"eller"vertical"split— Delergitterposition fra 0.1 til 0.9 (standard 0.5)children— Præcis to underknuder (opdeling eller panel)
Panelknude
En bladknude der indeholder én eller flere overflader (faner inden i panelet).
Overfladedefinition
Hver overflade i et panel kan være en terminal eller en browser:
type—"terminal"eller"browser"name— Brugerdefineret fanetitelcommand— Shell-kommando der automatisk køres ved oprettelse (kun terminal)cwd— Arbejdsmappe for denne overfladeenv— Miljøvariabler som nøgle-værdi-parurl— URL der skal åbnes (kun browser)focus— Fokuser på denne overflade efter oprettelse
Opløsning af arbejdsmappe
.eller udeladt — workspace-arbejdsmappe./subdir— relativ til workspace-arbejdsmappe~/path— udvidet til hjemmemappen- Absolut sti — bruges som den er
Fuldt 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
}
]
}