This repository has no description
4.4 kB
Markdown
at main

Using the canvas #

Shortcuts are in keybindings.md; knobs are in configuration.md.

Moving around #

Drag empty space to pan. Scroll over a terminal scrolls the terminal (wheel or trackpad, no modifier); scroll over empty canvas pans (two-finger trackpad) or zooms toward the cursor (mouse wheel). Pinch zooms too. Zoom runs 0.03-4.0× by default; above 1.0 the texture magnifies, so use per-pane ⌘+/- for sharp big text.

⌘0 fits all panes. Two-finger double-tap toggles actual size vs fit-all. ⌘P opens a type-to-filter switcher and glides the camera to the pick. ⌘H/J/K/L focuses the nearest pane in that direction; the camera centers and zooms to fit it (both configurable).

⌘Z focus-zooms a pane into a sharp local fullscreen: the surface reflows and re-renders vector-crisp, never a raster upscale. A ⤢ marker and accent chrome show while zoomed. The toggle restores frame and camera; focus moves, ⌘0, titlebar/resize grabs, and double-tap exit; pan, wheel, and pinch hold.

Panes #

⌘T opens a pane beside the focused one (direction and size configurable), focuses and centers it. It inherits the focused pane's cwd and ⌘+/- zoom. ⌘⇧H/J/K/L opens on a fixed side instead. ⌘W closes, ⌘R renames (the ✻-style names in the titlebar; on a grouped pane it renames the group). Opt-drag on empty space draws a pane of whatever size you drag.

Drag the titlebar to move (the whole band grabs), edges and corners to resize; the PTY reflows live. Click focuses (focus-follows-mouse = true focuses on hover). Click-drag inside a terminal selects text.

Mouse drags never shove anything aside: they slide along collisions and hold when wedged. Only keyboard grow shoves (allow-mouse-drag-to-push = true opts mouse drags in).

Dead keys, accents, and IME composition work: keys route through the text input system, preedit renders inline at the cursor.

Groups #

Groups are a convenience, not a hierarchy. A pane without one is perfectly normal.

Multi-select first: right-drag empty space to stage a selection, ⇧-click a titlebar to toggle one pane, ⌘D toggles the focused pane, ⌘⇧D clears. Drag a selected titlebar to move the block rigidly. ⌘W closes every selected pane. ⌘G groups the selection into a colored box you can drag, rename, and recolor from its right-click menu: Auto (hashed from the name onto your ghostty palette), a 2x8 swatch grid of its ANSI colors, or a custom color. A directional split from a grouped pane joins that group; loose panes in the way are shoved aside along the split axis and foreign groups refuse the join. A group with no members left is deleted.

Right-click anywhere off-pane pops one menu: selection actions when live, group actions on a group background, plus "New pane here".

Floating #

⌘F floats a pane over its scope: a grouped pane over its siblings, an ungrouped one over every other ungrouped pane. It stacks above tiled panes with a ⬆ marker and deeper shadow. Foreign group bounds still block floaters, tiled panes slide under floaters instead of shoving them, and ⌘F again re-tiles it. With allow-window-overlap = true everything already overlaps, so floating only changes stacking and the marker.

Persistence #

The daemon (gctd) persists layout and groups to ~/Library/Application Support/Grand Central Terminal/state.json. On daemon restart it respawns shells in their recorded cwd and rects and restores groups (members pruned to live panes). Scrollback lives with the daemon (8 MiB ring per pane) and replays on attach.

⌘Q quits the canvas; panes keep running. The Dock menu's "Quit Daemon" kills every terminal. A Dock click re-summons a doom-hidden window.

gctd status     # list panes
gctd stop       # kill daemon + panes

Pane environment #

Each pane's shell runs via ptyexec, which takes a fresh session, claims the slave pty as its controlling terminal, and execs the shell. Without the ctty, TIOCSWINSZ never delivers SIGWINCH and tty signals (^C, ^Z, job control) don't work. The environment pins TERM=xterm-256color, COLORTERM=truecolor, and LANG=en_US.UTF-8 (GUI-launched daemons inherit launchd's sparse env, which turns htop monochrome) and strips NO_COLOR, because panes are new terminals and should color.