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.jsonbefinder sig i din projektmappe, har forrang
  • Global: ~/.config/cmux/cmux.jsongælder for alle projekter, udfylder kommandoer, der ikke er defineret lokalt
Lokale kommandoer tilsidesætter globale kommandoer med samme navn.

Æ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:

cmux.json
{
  "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:

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

Felter

  • nameVises i kommandopaletten (påkrævet)
  • descriptionValgfri beskrivelse
  • keywordsEkstra søgetermer til kommandopaletten
  • commandShell-kommando der skal køres i den fokuserede terminal
  • confirmVis 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:

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-felter

  • nameWorkspace-fanenavn (standard er kommandoens navn)
  • cwdArbejdsmappe for workspacet
  • colorFarve på workspace-fanen
  • layoutLayouttræ 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"
  • splitDelergitterposition fra 0.1 til 0.9 (standard 0.5)
  • childrenPræ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"
  • nameBrugerdefineret fanetitel
  • commandShell-kommando der automatisk køres ved oprettelse (kun terminal)
  • cwdArbejdsmappe for denne overflade
  • envMiljøvariabler som nøgle-værdi-par
  • urlURL der skal åbnes (kun browser)
  • focusFokuser på denne overflade efter oprettelse

Opløsning af arbejdsmappe

  • . eller udeladtworkspace-arbejdsmappe
  • ./subdirrelativ til workspace-arbejdsmappe
  • ~/pathudvidet til hjemmemappen
  • Absolut stibruges som den er

Fuldt eksempel

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
    }
  ]
}