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.jsonligger i prosjektmappen din, har forrang
  • Global: ~/.config/cmux/cmux.jsongjelder alle prosjekter, fyller inn kommandoer som ikke er definert lokalt
Lokale kommandoer overstyrer globale kommandoer med samme navn.

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:

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

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

Felter

  • nameVises i kommandopaletten (påkrevd)
  • descriptionValgfri beskrivelse
  • keywordsEkstra søkeord for kommandopaletten
  • commandShell-kommando som kjøres i den fokuserte terminalen
  • confirmVis 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:

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 kommandonavn)
  • cwdArbeidsmappe for workspacet
  • colorFarge på workspace-fanen
  • layoutOppsettstre 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"
  • splitDelerposisjon fra 0.1 til 0.9 (standard 0.5)
  • childrenNø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"
  • nameEgendefinert fanetittel
  • commandShell-kommando som kjøres automatisk ved opprettelse (kun terminal)
  • cwdArbeidsmappe for denne overflaten
  • envMiljøvariabler som nøkkel-verdi-par
  • urlURL som skal åpnes (kun nettleser)
  • focusFokuser på denne overflaten etter opprettelse

Oppløsning av arbeidsmappe

  • . eller utelattworkspace-arbeidsmappe
  • ./subdirrelativ til workspace-arbeidsmappen
  • ~/pathutvidet til hjemmemappen
  • Absolutt stibrukes som den er

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