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.jsonnalazi se u vašem projektnom direktoriju, ima prednost
  • Globalno: ~/.config/cmux/cmux.jsonprimjenjuje se na sve projekte, dopunjava komande koje nisu definirane lokalno
Lokalne komande nadjačavaju globalne komande istog naziva.

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:

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

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

Polja

  • namePrikazuje se u paleti komandi (obavezno)
  • descriptionNeobavezan opis
  • keywordsDodatni pojmovi za pretraživanje u paleti komandi
  • commandShell komanda za pokretanje u fokusiranom terminalu
  • confirmPrikaž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:

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

Polja radnog prostora

  • nameNaziv kartice radnog prostora (zadano je naziv komande)
  • cwdRadni direktorij za radni prostor
  • colorBoja kartice radnog prostora
  • layoutStablo 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"
  • splitPozicija razdjeljnika od 0.1 do 0.9 (zadano 0.5)
  • childrenToč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"
  • namePrilagođeni naslov kartice
  • commandShell komanda za automatsko pokretanje pri kreiranju (samo terminal)
  • cwdRadni direktorij za ovu površinu
  • envVarijable okruženja kao parovi ključ-vrijednost
  • urlURL za otvaranje (samo preglednik)
  • focusFokusiraj ovu površinu nakon kreiranja

Razrješavanje radnog direktorija

  • . ili izostavljenoradni direktorij radnog prostora
  • ./subdirrelativno u odnosu na radni direktorij radnog prostora
  • ~/pathprošireno na kućni direktorij
  • Apsolutna putanjakoristi se kao takvo

Potpuni primjer

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