Editors
uxd <project> <ref> code opens the workspace in the editor configured for that
project, falling back to defaults.editor.
editor = "zed"
Override for one invocation:
uxd my-project 42 code --editor vim
Presets
| Preset | Launches | uxd waits? |
|---|---|---|
zed | zed <path> | no |
code | code --new-window <path> | no |
cursor | cursor --new-window <path> | no |
windsurf | windsurf <path> | no |
idea · webstorm · phpstorm · goland | <name> <path> | no |
vim · nvim · helix · hx | <name> <path> | yes |
terminal | $SHELL, with the workspace as the working directory | yes |
GUI presets are detached, so uxd code returns immediately. Terminal editors
and terminal stay in the foreground until they exit.
uxd doctor checks that the configured editor's binary is on PATH and warns
when it is not — the failure would otherwise only show up the first time you run
code.Custom templates
Anything that is not a preset name is treated as a template and must contain
{path}. It runs through bash -c, with {path} shell-escaped for you:
editor = "emacsclient -n {path}"
All the usual template variables
are available, not just {path}.
Staying in the foreground
Append :wait to a template to keep uxd running until the editor exits —
useful when uxd code is part of a script.
editor = "kak {path}:wait"
Without :wait, a template is launched detached and uxd returns immediately.
Presets carry their own waiting behaviour, shown in the table above.
Checking what would launch
--dry-run prints the exact argv without opening anything:
uxd my-project feat/login code --dry-run
--json is not supported for code — it opens a program rather than producing
data, and asking for both exits 2.