Skip to content
overterm
Documentation

Panes and Tab Peek

Splitting a tab, moving a pane between tabs, the header every pane carries, and seeing every tab at once.

A tab can hold several terminals. ⌘D splits the focused pane to the right, ⇧⌘D splits it downwards; ⌘[ and ⌘] move between panes, ⇧⌘↩ zooms one, and ⌃⌘= makes them equal again. These are Ghostty’s own defaults, so they work in the terminal and from the View menu alike.

A few things follow from a tab having panes rather than one terminal. Typing, ⌘F, link clicks and the tab’s title and directory follow the focused pane. ⌘W closes the focused pane when the tab is split — asking only if something is running in it — and closes the whole tab otherwise, which always asks. Zoom occludes the other panes rather than closing them.

Moving a tab onto a pane

Dragging a tab out of the strip and over the panes offers five targets in one rectangle. The four edges — a quarter of the pane each — say which way to split; the middle, the big easy one, adds it to the tab:

Zone What it does
top quarter Split Up
bottom quarter Split Down
left quarter Split Left
right quarter Split Right
the middle Add to this tab

Top and bottom win the corners, because a pane is wider than it is tall and the horizontal bands are the ones you hit by accident.

The pane is moved, not recreated. Its pty, its scrollback, whatever is running in it and its record of what it has run all come with it — which is the only reason to do this rather than press ⌘D and start again.

The pane header

Every pane carries a 38 pt header. A terminal says none of this itself: the title bar used to say it for the whole tab, and a split said nothing at all. The cost is 38 pt a pane, and it buys four panes of a 2×2 split that you can tell apart, plus split, zoom and close that are not keyboard-only.

From left to right it shows:

  • what is running here — the pane’s own title in a split, the tab’s otherwise;
  • its island, as a coloured label;
  • then, in one slot: the link under the pointer with “⌘-click to open” while you hover one; else the last command, if it failed; else the tab’s status — the agent’s notification text, or “Waiting for you”, “Finished”, “Failed”, “Working”;
  • the ports anything in this pane’s process tree is listening on, as pills. A pill opens a popover with the process, its pid, and Open / Copy URL / Kill — the exact pid, never a pattern;
  • Split Right, Split Down, Zoom, Close.

Copy output and Rerun

When the last command in a pane failed, the header says so — the command, its exit code and duration — and pins the two things you then want:

  • Copy output (⇧⌘C) copies what that command printed.
  • Rerun (⌘R) runs it again.

They are in the header rather than hanging off the output because the output scrolls away and the header does not. The failed command’s rows also get a ring drawn over them in the grid, and a gutter down the pane’s right edge maps the commands in the scrollback — visible while you scroll, following the system’s scrollbar setting.

Command blocks are assembled from three things libghostty does report: the title the shell integration sets, the exit code and duration of a finished command, and where the viewport is in the scrollback. A command whose output fits on screen has no rows of its own yet, and nothing row-based is drawn for it.

Tab Peek

⇧⌘E scales every tab’s terminal into a card inside the terminal area — live, still drawing, splits included. It is the tab strip’s shape rather than its state: use ⇧⌘A (Agent Overview) for what the agents are doing.

A card is the tab’s real terminal, not a picture of one. Nothing is re-rendered and no pty is resized; the peek only transforms the layer. Up to 12 panes keep drawing normally; past that the rest are drawn by hand a few times a second, so a card is current rather than whatever was left over from when the tab was hidden.

Arrows and ⇥ move the highlight, ↩ picks, ⎋ closes, and clicking outside closes it too.

The gesture

Three fingers down the trackpad opens it a stage at a time: first a row of previews under the tab strip with the selected terminal pushed down below it, then — if the fingers carry on — the full grid. A fresh swipe down at the grid takes it back out. There is no swipe up, because macOS claims three and four fingers up for Mission Control and the window server recognises it before any app sees a touch.

Settings ▸ General ▸ Peek at every tab with (general.tabPeekGesture) takes Three fingers (the default), Four fingers or Off. ⇧⌘E, ⎋, a click outside and picking a card work whatever it says. Two-finger scrolling is untouched.

The columns beside the terminal

The window is a row of cards: the sidebar, the terminal, the editor, then the browser, the inbox and the right-hand pane.

The right of the window is one slot. The browser column (and the simulator with it) and the right-hand pane — which the changes view, the pull request and usage share — take turns in it. Opening one steps the other aside and remembers it; closing it gives the slot back. Having both open at once left all four columns too narrow to work in. A pane that only stepped aside is not the same as one you closed, so your own ⌥⌘D still reopens the changes pane where you left it.

Divider positions are saved, so the window comes back the width you left it.