atriumatrium

Editor pane

Monaco code editor with LSP and git awareness.

The editor pane hosts code and text files using Monaco — the same editor engine behind VS Code. Syntax highlighting covers 100+ languages. LSP integration is wired for common web languages (TypeScript, JSON, CSS, HTML) with per-server overrides.

Opening

  • Drag a file from Finder.
  • Click a file in the sidebar file tree.
  • atrium <file-path> from any shell.
Dragging a file onto a pane's header opens the file as a subtab beside any existing editor tabs — letting you collect related files under one pane.

The pane UI

  • Subtab strip at the top when more than one file is open in the same pane. Click a tab to switch; drag a tab onto a split zone to promote it to its own pane; middle-click or click the × to close.
  • Dirty indicator on the tab and in the pane header when there are unsaved changes.
  • Breadcrumbs below the tab strip show the file path and the current symbol (function, class) the cursor is inside — click a segment to navigate.
  • Clickable file-path breadcrumb in the footer — every segment of the path is a button that reveals that file or folder in the workspace sidebar, so you can jump from a deeply nested file back to its directory in one click.
  • Minimap on the right, line numbers and fold gutters on the left.
  • Git gutter decorations — added / changed / deleted lines vs HEAD, inline with the line numbers.
  • Inline git blame — the author, short SHA, and relative time of the most recent commit to touch each line render to the right of the code in muted text. The cursor stops at the end of the line rather than drifting into the blame text. Hover for a rich tooltip with the full commit message and author email; click to open the commit in the source control pane.
  • Word-wrap toggle in the pane header. Wrap state is persisted per pane and restored on reopen.
  • Diagnostic squigglies for LSP warnings and errors, with a hover tooltip. Lint settles in under ~100 ms after the first lint in each workspace — atrium keeps a long-lived ESLint sidecar per workspace and caches results by HEAD and file mtime.

Find, replace, navigate

  • Cmd+F — find widget (overlay in the editor).
  • Cmd+H — find and replace.
  • Cmd+G / Shift+Cmd+G — next / previous match.
  • Cmd+Shift+O — symbol outline for the current file.
  • Cmd+P — file palette, when available in scope.
  • F12 / Cmd+Click — go to definition.
  • Shift+F12 — find references.
  • F2 — rename symbol.
  • Cmd+/ — toggle line comment.
Cmd+Up and Cmd+Down fall through to Monaco rather than being captured by atrium's scroll-to-top / scroll-to-bottom, so native cursor-to-top / cursor-to-bottom still work.

Read-only auto-detection

Files in vendored locations (node_modules/, .d.ts files) open read-only with a banner in the pane. This prevents accidental edits to generated or third-party code.

Saving

  • Cmd+S — save.
  • Auto-save runs after a configurable idle debounce.
  • Format on save runs the language's formatter if one is configured.

Cross-pane jumping

  • Clicking a result in the search pane opens the file here at the match line.
  • Clicking a changed file in the git pane opens either the file or a diff view.
  • Clicking a path:line in terminal output opens the file here at the right line.

LSP configuration

atrium bundles default language server configurations. To override a server's binary, open Settings → Tools → LSP servers and set a custom command per language ID. Power users can hand-edit config.lspServers in config.json:

{
  "lspServers": {
    "typescript": {
      "command": "/opt/homebrew/bin/typescript-language-server"
    }
  }
}

Persistent state

Reopens restore:

  • File path.
  • Cursor position, selection (including the anchor point of backward selections), and scroll.
  • Fold state.
  • Undo history.
  • Read-only flag.
atrium preserves the Monaco model, undo stack, cursor, and active selection across a pane's React Surface remount — the lazy-mount lifecycle used when a pane scrolls off and back into the viewport — so dropping out of view and coming back never loses your place in a buffer.

Constraints

  • The editor pane itself is not a file picker. Use the sidebar file tree or drag from Finder.
  • Very large files (above ~10 MB) may stall Monaco's tokenizer; for dumps or logs use the markdown editor in source mode or less in a terminal pane.
  • No embedded REPL. Open a terminal pane in a split for that.