CodeNomad/docs/help/en/shortcuts.md
Pascal André c0d53f13d4
docs(help): multilingual help site with in-app Help menu and palette entry (#859)
## Summary

A complete public CodeNomad help site in the app's ten languages,
published on GitHub Pages (https://neuralnomadsai.github.io/CodeNomad/)
and opened from the app.

- **Content:** 25 pages in 8 sections (Start, Workflows, OpenCode setup,
Remote access, Customize, Extensions, Desktop, Help), written for
OpenCode power users and covering the current version only. It includes
everything user-relevant from `README.md`, `packages/server/README.md`
(server, network, auth, TLS, Remote Control) and the user-facing
dev-docs, with flags, defaults, labels and safety boundaries checked
against source.
- **Languages:** en, fr, de, es, he (RTL), ja, ne, ru, tr, zh-Hans.
Interface labels reuse each locale's own app strings; native desktop
menu names, code, commands, flags, paths and anchors stay unchanged.
- **Site:** `scripts/build-help.mjs` renders
`docs/help/<locale>/<slug>.md` with translated chrome
(`docs/help/i18n/`), stable `{#id}` anchors identical across locales,
same-article language links with hreflang, a root language chooser, and
a first-party offline per-locale search (Ctrl/⌘+K, substring matching
for CJK, Devanagari and Hebrew, hidden without JS). No analytics or
remote resources.
- **Validation:** `npm run test:help` fails on any missing page or
string, heading drift, broken link/anchor/asset or invalid search
target. `.github/workflows/help-pages.yml` validates PRs and deploys
only from `dev`.
- **App entry points:** one `open-help` command for the palette and a
new **CodeNomad Help** item at the top of the Electron and Tauri Help
menus. It opens the help in the invoking window's UI language through
the existing external opener, falls back to the root URL for windows
without the handler, and reports failures without replay.
- Documents the strict boolean environment-variable rule from #959 and
the updater entry points from #960.

## Review

Delivered as a CodeNomad mission with independent review loops, each to
zero findings:
- English content audit (5 passes, 14 fixes) and technical gatekeeper (2
passes) before translation.
- After translation: QA, UX review, and a final multilingual gatekeeper
(35 translation/label findings fixed, then verified), plus a visual fix
for the search focus ring and a verified sync with #960.

## Validation

- `npm run test:help`: 9/9 (25 pages × 10 locales, strict, including
negative tests); `npm run build:help`: 250 pages.
- `node scripts/test-help-browser.mjs`: 44/44; Playwright: 500 page
visits at 390 and 1280 px, all locales, no overflow, no external
requests.
- UI help-command and desktop-updates browser tests 19/19; help URL unit
tests; Electron menu tests; UI and Electron typechecks; Tauri `cargo
test` 272/272.
2026-10-14 22:44:56 +02:00

5.7 KiB
Raw Permalink Blame History

Keyboard shortcuts

Discover commands and open help

  1. Open Command Palette using Ctrl+Shift+P on Windows/Linux or Cmd+Shift+P on macOS, or use its visible button/menu item.
  2. Type an action name. The palette includes application actions and the current Location's custom commands; availability depends on the active view.
  3. Run Open help to open this guide in the current UI language in an external browser context. Native Help → CodeNomad Help opens the same guide.

Help leaves the application view and draft untouched. If opening fails, visit CodeNomad Help directly. A command being discoverable does not mean it has a customizable shortcut: the shortcut manager covers a fixed 49-command renderer catalog, not every palette or native-menu action.

Record, disable and reset

  1. Open Settings → Keyboard shortcuts and use Filter shortcuts to find the action.
  2. Choose Edit, then press the desired combination in Press a key combination. Recording saves that binding.
  3. Use Disable to remove that action's renderer binding, Reset to restore its default, or Reset all for all renderer bindings.
  4. Resolve warnings on every conflicting row; conflicts are reported, not silently disabled.

Bindings are saved in CodeNomad UI configuration and affect clients sharing that configuration. They do not edit OpenCode's CLI/TUI bindings or native menu accelerators. Recording suppresses app renderer shortcuts, but cannot suppress the operating system or native menu. Cancel, focus loss, closing the section or leaving the window ends recording. Bare modifiers and IME composition are ignored; plain Tab/Shift+Tab moves focus.

If saving fails, keep the old shortcut available and retry after checking the displayed binding. Reset is the safe recovery for an accidental assignment.

Renderer defaults

Mod means Ctrl on Windows/Linux and Cmd on macOS. These are defaults, not guarantees that the OS/native host will deliver the key. Scope matters: the same key can serve a different action on the home page, in a composer or in search.

Action Default
Open command palette Mod+Shift+P
New instance / Browse for a folder on the home page Mod+N
Close app tab Mod+W
Previous / next app tab Mod+[ / Mod+]
App tab 1–9 Mod+1 through Mod+9
Rename instance (tab context) F2
New session Mod+Shift+N
Close session Mod+Shift+W
Previous / next session Mod+Shift+[ / Mod+Shift+]
Session tab 1–9 Mod+Shift+1 through Mod+Shift+9
Instance info Mod+Shift+L
Search session history Mod+F
Next / previous search result (search focused) Enter / Shift+Enter
Focus prompt / Clear prompt Mod+P / Mod+K
Open model / agent selector Mod+Shift+M / Mod+Shift+A
Select model variant Mod+Shift+T
Move blocking tools to background (composer) Mod+B
Send prompt Enter
Send with alternate follow-up behavior Mod+Shift+Enter
Insert new line Shift+Enter or Mod+Enter
Previous / next prompt (composer) ArrowUp / ArrowDown
Unfocus prompt / Exit shell mode Escape, according to composer context
Stop session Press Escape twice; the first press displays confirmation
Send side question (/btw window) Mod+Enter
Save file (workspace editor) Mod+S

For a configuration with Enter-to-submit disabled, Send prompt defaults to Mod+Enter and Insert new line to Enter or Shift+Enter. An explicit shortcut override replaces that default. Use the manager to see the effective binding. Previous/next session cycles the session list; it is not the sidebar's browser-like Back/Forward history, which has no shortcut.

Native keys and platform interception

Native keys are fixed and remain active even after you change or disable the corresponding renderer binding. In particular, native New Window uses Mod+Shift+N, the renderer's default for New session. Use a visible New Session control or rebind the renderer action if the native menu intercepts it. Likewise, native Mod+W can close the window rather than just an app tab.

Native action Electron Tauri
New Window Mod+Shift+N Mod+Shift+N
New Instance / Command Palette Mod+N / Mod+Shift+P Mod+N / Mod+Shift+P
Reload / Force Reload Mod+R / Mod+Shift+R Mod+R / Mod+Shift+R
Actual Size Mod+0 Mod+0
Zoom Mod+Plus / Mod+- View-menu controls and platform webview zoom input
Full Screen F11 on Windows/Linux; Ctrl+Cmd+F on macOS Ctrl+Cmd+F menu accelerator on macOS; use the menu on other platforms
Developer Tools Ctrl+Shift+I on Windows/Linux; Alt+Cmd+I on macOS Alt+Mod+I

Plain browser windows also retain their browser shortcuts. If a binding never reaches CodeNomad, choose another combination rather than disabling security or changing OS-wide keys.

Keyboard layouts and text entry

Digit-row and square-bracket shortcuts use physical key positions for recording, execution and conflict checks, including AZERTY/QWERTZ layouts. Other keys use their logical values. Record on the keyboard you intend to use, then check the displayed result.

During IME composition, text entry takes precedence. Prompt history and Escape actions also depend on focus, picker/shell state and the current operation; do not assume every ArrowUp or Escape is an unconditional global action. Hover tooltips and the shortcut manager show the current assignments without adding a permanent keyboard-help strip.