From 020ffc0c6c067bde5b530c1afa7508fe02d9b31d Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Tue, 10 Nov 2026 11:27:57 -0500 Subject: [PATCH] docs(workmux): ctrl+shift+a opens the workmux palette --- docs/shell/scripts.md | 4 ++-- docs/terminal/ghostty.md | 2 +- docs/terminal/tmux.md | 6 +++--- docs/tools/workmux.md | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/shell/scripts.md b/docs/shell/scripts.md index 56dcf77..4f9153d 100644 --- a/docs/shell/scripts.md +++ b/docs/shell/scripts.md @@ -441,7 +441,7 @@ The project root is the git toplevel, else the pane's directory. **Background.** Long-running items, marked `· background`, are ` run dev`, `docker compose up`, and pj tasks named `dev`/`start`/`serve`/`watch`/`preview` or with one of those as a `:` segment (`dev:web`, `api:dev`). They run through `--bg` in a detached session named `:` (`leetcode:bun-run-dev`, `leetcode:docker-compose-up`), shown in a rounded 90%×80% popup attached to it. q detaches the popup and leaves the task running: the session's `key-table` is `pj-task`, which binds only `q` and ctrl-c, so other keys reach the task instead of root-table bindings (prefix bindings still work). ctrl-c runs `confirm-before` (`Stop ? (y/n)`); y sends ctrl-c to the task, which stops it and ends the session, closing the popup, and any other key cancels. If the task exits on its own, the `[exit N]` prompt keeps its output until enter. Picking the item again, or its **Running** entry, reopens the popup instead of starting a second copy. The session has `status off`, `detach-on-destroy on`, and `@pj_task` set to the task's root, which is how the Running group finds it. Session names contain `:`, so the script targets them by id (`$N`). -**omp.** tmux `prefix a` (Ghostty ctrl+shift+a) runs `pj-palette --bg :omp omp`, so omp gets the same kind of background session and Running entry. Its popup docks in the bottom-right corner of the client, 35% wide and 60% tall. omp runs directly (no `[exit N]` prompt) and needs q, so its session uses the `pj-app` key table instead: ctrl-c hides the popup, ctrl-q kills the session (quits omp). `prefix a` inside any session with `@pj_task` also hides, which makes ctrl+shift+a a toggle. The popup border shows only the session name. +**omp.** tmux `prefix a` runs `pj-palette --bg :omp omp`, so omp gets the same kind of background session and Running entry. Its popup docks in the bottom-right corner of the client, 35% wide and 60% tall. omp runs directly (no `[exit N]` prompt) and needs q, so its session uses the `pj-app` key table instead: ctrl-c hides the popup, ctrl-q kills the session (quits omp). `prefix a` inside any session with `@pj_task` also hides, which makes `prefix a` a toggle. The popup border shows only the session name. (Ghostty ctrl+shift+a opens the [Workmux palette](#workmux-palette) instead.) **omp palette.** `--omp` feeds `palettes/omp.json`, opened by the main palette's **omp** item. It lists every running `:omp` across tmux sessions, with a green icon and `open`/`hidden` state: **This session** first (or a grey `not running · start in ` item that starts it), then **Running** for the other tmux sessions' agents, then a **Quit** item per session (`kill-session`). @@ -486,7 +486,7 @@ workmux-palette --popup DIR CMD… workmux-palette --do DIR CMD… ``` -The source of the **Workmux** [tmux command palette](../terminal/tmux.md#command-palette) (`palettes/workmux.json`) for [workmux](../tools/workmux.md). Open it with tmux `prefix w` or the "Workmux" item in the main palette. +The source of the **Workmux** [tmux command palette](../terminal/tmux.md#command-palette) (`palettes/workmux.json`) for [workmux](../tools/workmux.md). Open it with tmux `prefix w`, Ghostty ctrl+shift+a, or the "Workmux" item in the main palette. With no arguments it prints palette items as JSON, grouped by category: diff --git a/docs/terminal/ghostty.md b/docs/terminal/ghostty.md index 9bf46d6..81bcd99 100644 --- a/docs/terminal/ghostty.md +++ b/docs/terminal/ghostty.md @@ -66,10 +66,10 @@ Closing a window only detaches its session; the shells keep running in the tmux | --- | --- | --- | | `ctrl+shift+t` | `prefix c` | New window (tab) in pane cwd | | `ctrl+shift+p` / `ctrl+shift+space` | `prefix t` | Project Tasks palette (pj: install, dev, sync, make, every project task) | +| `ctrl+shift+a` | `prefix w` | [Workmux palette](../shell/scripts.md#workmux-palette): agents by status, worktrees, new worktree from a prompt | | `ctrl+shift+f` | `prefix y` | Yazi in a new window, pane cwd | | `ctrl+shift+e` | `prefix e` | Neovim in a new window, pane cwd | | `ctrl+shift+g` | `prefix g` | Lazygit in a 90% popup, pane cwd | -| `ctrl+shift+a` | `prefix a` | Toggle omp in a background-session popup (`:omp`), pane cwd | | `ctrl+shift+w` | `prefix k` | Kill window (close tab) | | `ctrl+shift+r` | `prefix r` | Rename window | | `ctrl+tab` / `ctrl+page_down` / `ctrl+shift+right` / `ctrl+shift+k` | `prefix n` | Next window | diff --git a/docs/terminal/tmux.md b/docs/terminal/tmux.md index 1a6598f..6800442 100644 --- a/docs/terminal/tmux.md +++ b/docs/terminal/tmux.md @@ -43,10 +43,10 @@ These settings are what [yazi](../tools/yazi.md) needs inside tmux. `allow-passt | `prefix /` | Copy mode, then search upward | | `prefix o` | Sessions palette ([`tmux-sessions`](../shell/scripts.md#tmux-sessions)): fuzzy-find the other sessions, every window of every session, zoxide's and `~/.config`'s directories, and Rename/Kill items per session. Typed text that is not a session starts one by that name in its zoxide match | | `prefix t` | Project Tasks palette ([`pj-palette`](../shell/scripts.md#pj-palette)): install/dev/sync/make/compose quick actions plus every `pj` task. One-off tasks run in a full-width bottom split (25% of the window); dev servers and `docker compose up` run in a background `:` session shown in a popup (`q` hides, `ctrl-c` asks `y/n` then stops), listed under Running to reopen | -| `prefix w` | Workmux palette ([`workmux-palette`](../shell/scripts.md#workmux-palette)): tracked agents by status, the repo's worktrees with Close/Merge/Remove, new worktree from the typed branch or a prompt, dashboard, sidebar, last-done. Replaces tmux's `choose-tree`, which the Sessions palette covers. See [workmux](../tools/workmux.md) | +| `prefix w` | Workmux palette ([`workmux-palette`](../shell/scripts.md#workmux-palette)), Ghostty `ctrl+shift+a`: tracked agents by status, the repo's worktrees with Close/Merge/Remove, new worktree from the typed branch or a prompt, dashboard, sidebar, last-done. Replaces tmux's `choose-tree`, which the Sessions palette covers. See [workmux](../tools/workmux.md) | | `prefix y` / `prefix e` | Yazi / Neovim in a new window in the pane cwd (Ghostty `ctrl+shift+f` / `ctrl+shift+e`) | | `prefix g` | Lazygit in a 90% popup in the pane cwd (Ghostty `ctrl+shift+g`) | -| `prefix a` | omp in a background session `:omp` (pane cwd), shown in a popup docked bottom-right (35% × 60%) and listed in the [omp palette](../shell/scripts.md#pj-palette) and under Running in the tasks palette. In the popup, `ctrl-c` hides it and `ctrl-q` quits omp. Inside any background-task popup, `prefix a` hides it too, so Ghostty `ctrl+shift+a` toggles omp | +| `prefix a` | omp in a background session `:omp` (pane cwd), shown in a popup docked bottom-right (35% × 60%) and listed in the [omp palette](../shell/scripts.md#pj-palette) and under Running in the tasks palette. In the popup, `ctrl-c` hides it and `ctrl-q` quits omp. Inside any background-task popup, `prefix a` hides it too, so `prefix a` toggles omp (no Ghostty chord; `ctrl+shift+a` is the Workmux palette) | | `prefix h` / `prefix v` | Split below / right, pane cwd | | `prefix x` | Kill pane | | `S-Enter` (no prefix) | Sends `ESC[13;2u` to the pane unchanged. With `extended-keys on`, tmux would otherwise turn Shift+Enter into plain Enter for apps that never requested extended keys, and coding agents (omp, Claude Code) would submit instead of inserting a newline | @@ -105,7 +105,7 @@ A window whose agent workmux tracks shows its status icon after the label (`#{@w | `commands.json` | The kitty launchers ported as palette items: **Lazygit** (90% popup in the pane's cwd; kitty `ctrl+shift+g`), **Yazi** (new window; kitty `ctrl+shift+f`), **Neovim Split** (nvim in a split to the left, 60% of the pane; alias `nv`; kitty `ctrl+shift+e`), **Shell History (atuin)** (`atuin-pick` in a 25% split below; kitty `ctrl+shift+p`). Also **btop** (80% popup; aliases `top`, `htop`), **Lazydocker** (90% popup in the pane's cwd; alias `dd`), **mandible** (80% popup running [`mandible-pick`](../shell/scripts.md#mandible-pick); alias `man`), **television** (`tv channels`, the [channel picker](../tools/television.md), in a new window in the pane's cwd; alias `tv`), **gitframe** (git diff viewer in a new window in the pane's cwd; alias `gf`), **omp** (opens the omp palette; aliases `agent`, `ai`), **Workmux** (opens the workmux palette; aliases `wm`, `worktree`), **Project Tasks** (opens the tasks palette), **Sessions** (opens the sessions palette; aliases `sx`, `ss`), **Save Sessions**, and **Restore Sessions** (resurrect). Programs are started with `exec`, so the tab icon is the program's, not the shell's | | `palettes/tasks.json` | The **Project Tasks** palette (`prefix t`, Ghostty `ctrl+shift+p` / `ctrl+shift+space`), fed by [`pj-palette`](../shell/scripts.md#pj-palette): running background tasks under Running, then `bun install`, `bun run dev`, `uv sync`, `uv run python`, `make`, `go run .`, `cargo run`, `docker compose up` as Quick items when the project has them, then every task `pj` finds, grouped by tool. One-off tasks run in a full-width split along the bottom (25% of the window) in their directory; `ctrl-c` stops a running task, and once it has exited, `enter` or `ctrl-c` closes the pane. Dev servers (`dev`/`start`/`serve`/`watch`/`preview` tasks) and `docker compose up` run in a background session `:` shown in a popup: `q` hides it with the task still running, `ctrl-c` asks `Stop ? (y/n)` and on `y` stops the task and closes it | | `palettes/omp.json` | The **omp** palette, fed by [`pj-palette --omp`](../shell/scripts.md#pj-palette): this tmux session's `:omp` (open it, or start it when not running), every other tmux session's running omp, and a Quit item per session. Running agents have a green icon and show `open` or `hidden` | -| `palettes/workmux.json` | The **Workmux** palette (`prefix w`), fed by [`workmux-palette`](../shell/scripts.md#workmux-palette): Agents (by status), Worktrees of the pane's repo, New, Workmux tools, Close, Merge, Remove. Its `query` item lists the typed text last; `enter` on it runs `workmux-palette --add ` (new worktree and session for that branch) | +| `palettes/workmux.json` | The **Workmux** palette (`prefix w`, Ghostty `ctrl+shift+a`), fed by [`workmux-palette`](../shell/scripts.md#workmux-palette): Agents (by status), Worktrees of the pane's repo, New, Workmux tools, Close, Merge, Remove. Its `query` item lists the typed text last; `enter` on it runs `workmux-palette --add ` (new worktree and session for that branch) | | `palettes/sessions.json` | The **Sessions** palette (`prefix o`, Ghostty `ctrl+shift+o`), fed by [`tmux-sessions`](../shell/scripts.md#tmux-sessions): Sessions (the last one first, attached ones green), Windows, Zoxide, Config, Rename, Kill. Its `query` item lists the typed text last; `enter` on it runs `tmux-sessions --new ` | | `hidden.json` | Hides the built-in **Switch Theme...** item, and with it the Appearance section: the palette stays on the fixed cyberdream `theme.json` | | `shortcuts.json` | Ghostty `ctrl+shift` chords shown next to the built-in items they trigger (New Window → `Ctrl+Shift+T`, …) | diff --git a/docs/tools/workmux.md b/docs/tools/workmux.md index 04dca12..3fcede4 100644 --- a/docs/tools/workmux.md +++ b/docs/tools/workmux.md @@ -2,7 +2,7 @@ workmux global config: one git worktree and one tmux session per agent, driven from the Workmux palette. -[workmux](https://workmux.dev) pairs each git worktree with a tmux target and starts an agent in it. Here every worktree gets its own tmux session (an omp window and an nvim window), and the [Workmux palette](../shell/scripts.md#workmux-palette) (tmux `prefix w`, or `ctrl+space` → Workmux) covers the lifecycle: open, new, close, merge, remove, and jumping to agents by status. +[workmux](https://workmux.dev) pairs each git worktree with a tmux target and starts an agent in it. Here every worktree gets its own tmux session (an omp window and an nvim window), and the [Workmux palette](../shell/scripts.md#workmux-palette) (Ghostty `ctrl+shift+a`, tmux `prefix w`, or `ctrl+space` → Workmux) covers the lifecycle: open, new, close, merge, remove, and jumping to agents by status. | | | | --- | --- |