README: generate shortcuts table from shortcuts.ts (single source of truth)
The shortcuts table in README was hand-maintained and kept drifting from src/lib/shortcuts.ts (the data the in-app help overlay reads). Replace the table with a marker block (<!-- SHORTCUTS:START --> ... <!-- SHORTCUTS:END -->) populated by scripts/gen-readme-shortcuts.mjs. Includes TIPS too, not just shortcuts. Script is plain Node + fs (no tsx/esbuild dep); reads shortcuts.ts as text, strips TS type syntax, dynamic-imports the resulting .mjs. Adds `pnpm gen:readme` script and a `--check` mode that exits 1 on drift (for future CI wiring). Idempotent.
This commit is contained in:
parent
f51033a142
commit
25aac634ab
4 changed files with 244 additions and 11 deletions
69
README.md
69
README.md
|
|
@ -21,25 +21,72 @@ A Windows desktop app for running and arranging many WSL terminals at once. Buil
|
|||
|
||||
## Using it
|
||||
|
||||
### Keyboard shortcuts
|
||||
### Shortcuts and tips
|
||||
|
||||
<!-- SHORTCUTS:START -->
|
||||
|
||||
#### Keyboard shortcuts
|
||||
|
||||
**Layout**
|
||||
|
||||
| Key | Action |
|
||||
|---|---|
|
||||
| `Ctrl+K` | open the jump-to-pane palette (fuzzy match over label / distro / cwd; `↑`/`↓` to move, `Enter` to focus, `Esc` to close) |
|
||||
| `Ctrl+Shift+E` | split active pane to the right |
|
||||
| `Ctrl+Shift+O` | split active pane downward |
|
||||
| `Ctrl+Shift+W` | close active pane |
|
||||
| `Ctrl+Shift+P` | promote active pane out one level — turns a nested pane into a full row/column (e.g. nested-right `c` becomes a full-width bottom row). Self-inverse. |
|
||||
| `Ctrl+Shift+B` | toggle broadcast on active pane |
|
||||
| `Ctrl+Shift+Alt+B` | toggle broadcast on ALL panes (same as the titlebar 📡 button) |
|
||||
| `Ctrl+Shift+←` / `→` / `↑` / `↓` | focus neighbour pane in that direction |
|
||||
| `Ctrl+=` / `Ctrl+-` / `Ctrl+0` | zoom the active pane in / out / back to default |
|
||||
| `Ctrl+Shift+=` / `Ctrl+Shift+-` / `Ctrl+Shift+0` | same, applied to **every** pane (shift = "to all") |
|
||||
| `Ctrl+Shift+E` | Split active pane to the right |
|
||||
| `Ctrl+Shift+O` | Split active pane downward |
|
||||
| `Ctrl+Shift+W` | Close active pane |
|
||||
| `Ctrl+Shift+P` | Promote active pane out one level (turns a nested pane into a full row/column; self-inverse) |
|
||||
|
||||
**Navigation**
|
||||
|
||||
| Key | Action |
|
||||
|---|---|
|
||||
| `Ctrl+K` | Open jump-to-pane palette |
|
||||
| `Ctrl+Shift+← / → / ↑ / ↓` | Focus neighbour pane in that direction |
|
||||
|
||||
**Broadcast**
|
||||
|
||||
| Key | Action |
|
||||
|---|---|
|
||||
| `Ctrl+Shift+B` | Toggle broadcast on active pane |
|
||||
| `Ctrl+Shift+Alt+B` | Toggle broadcast on ALL panes (same as titlebar 📡) |
|
||||
|
||||
**Font size**
|
||||
|
||||
| Key | Action |
|
||||
|---|---|
|
||||
| `Ctrl+= / Ctrl+- / Ctrl+0` | Zoom active pane in / out / reset |
|
||||
| `Ctrl+Shift+= / Ctrl+Shift+- / Ctrl+Shift+0` | Same, applied to every pane |
|
||||
|
||||
**Terminal**
|
||||
|
||||
| Key | Action |
|
||||
|---|---|
|
||||
| `Ctrl+Shift+C / Ctrl+Shift+V` | Copy selection / paste in terminal |
|
||||
|
||||
**Help**
|
||||
|
||||
| Key | Action |
|
||||
|---|---|
|
||||
| `F1` | Show this help overlay |
|
||||
|
||||
#### Tips
|
||||
|
||||
- **Per-pane shell picker** — Click the distro chip in any pane's toolbar to switch between WSL distros, PowerShell, or a saved SSH host. The pane respawns with the new shell.
|
||||
- **SSH host manager** — Titlebar 🔑 SSH hosts opens the manager. Add hostname / user / port / identity file / jump host / extra ssh args. Saved hosts appear in every pane's dropdown.
|
||||
- **Saved passwords** — Optionally save a host's password — stored in Windows Credential Manager (DPAPI-encrypted), never written to hosts.json. When ssh prompts on connect it's typed automatically. Hosts with a saved password show 🔒 in the list.
|
||||
- **Clickable links** — http and https URLs in terminal output get underlined and open in your default browser on click.
|
||||
- **Drag pane headers to swap** — Grab a pane's title bar and drag it onto another pane to swap their tree positions. Useful for reorganizing without keyboard.
|
||||
- **Workspace persistence** — Layout, labels, distro choices, and SSH hosts auto-save to %APPDATA%/com.megaproxy.tiletopia (debounced 500ms). Closed panes don't come back — only the structure is restored, shells spawn fresh on next launch.
|
||||
- **MCP server (let Claude drive the workspace)** — Titlebar 🤖 opens the MCP control panel — start the server and paste the snippet into your Claude Code .mcp.json. The snippet uses npx mcp-remote as a stdio shim because Claude Code's HTTP-MCP client ignores static bearer auth and tries OAuth instead; the shim proxies the HTTP endpoint with the bearer baked in. URL + token persist across restarts; Regenerate the token in the panel if it leaks. Default-deny per pane: toggle 🤖 on each pane's toolbar to expose it to MCP. Read-only in v1 (no spawn or write yet).
|
||||
|
||||
<!-- SHORTCUTS:END -->
|
||||
|
||||
Shortcuts work while a terminal is focused — we capture the key before xterm.js sees it. They don't fire while you're typing into a label edit or the palette input, so those still work normally. `Ctrl` and `⌘` (Cmd) are interchangeable.
|
||||
|
||||
Font size persists per pane in `workspace.json`, so a zoomed pane stays zoomed across restarts.
|
||||
|
||||
> The shortcut tables and tips above are generated from `src/lib/shortcuts.ts` (the single source of truth shared with the in-app help overlay). To change them, edit that file and run `pnpm gen:readme`.
|
||||
|
||||
### Mouse + toolbar
|
||||
|
||||
- **Split panes** — `⇥` in the pane toolbar splits right, `⇣` splits down. The new pane inherits the parent's distro; the cwd defaults to `~` in the WSL distro.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue