Tabs & splits
Oxide draws its own tab bar and its own split layout, rather than leaning on macOS window tabbing — so both behave identically under a tiling window manager like AeroSpace or yabai.
Tabs
| cmd-t | new tab |
| cmd-1 … cmd-9 | jump straight to a tab |
| ⌃tab / ⌃⇧tab | next / previous tab |
| ⇧⌘] / ⇧⌘[ | next / previous tab |
| ctrl-w q / cmd-w | close the focused pane, and the tab with its last pane |
| cmd-shift-t | reopen the last closed tab — its splits, directories, name, and startup commands, with fresh shells; the last ten are kept |
| ctrl-w , / double-click | rename the tab |
| drag a tab | reorder — drop it on the tab whose place it should take |
A tab is titled after what its active pane is doing: the program in
the foreground when one is running (vim,
cargo, ssh prod-web), else the directory
— ~ for home, the basename otherwise. A name you set
wins over both, and is saved with a pinned workspace; rename to an
empty string to go back to the automatic title. Click a tab to
select it, the × to close it, or the
+ at the end of the bar for a new one.
New tabs start in the current pane's directory. Set
window.new_tab_directory = "home" to always start at
~/ instead.
Splits
| ctrl-w v / cmd-d | split right |
| ctrl-w s / cmd-shift-d | split down |
| ctrl-w V / ctrl-w S | split left / up (insert before the current pane) |
| ctrl-w q | close the focused pane and reclaim its space |
Splits nest freely, but not gratuitously: splitting a pane whose parent already runs along that axis inserts a sibling instead of nesting, so three ctrl-w vs give you three even columns rather than halves of halves — the way tmux behaves.
A new pane starts in the same directory as the one you split.
Typing exit closes a pane exactly like
ctrl-w q; if the shell exits with a non-zero status, the
pane stays open so you can read the failure.
Moving between panes
| ctrl-w h j k l | move by what's on screen — h from the leftmost pane focuses the file tree |
| cmd-opt-←↓↑→ | the same, for hands already on the arrow keys |
| ctrl-w w | toggle between the drawer and the terminal |
Focus is geometric, not tree-order: Oxide moves to whichever pane actually sits in that direction. The file tree re-roots to follow the newly focused pane's directory, and so does the status bar.
Resizing
Drag the divider between two panes, or use the keyboard: steps are in cells, so they feel the same at any font size. Sizes are saved with pinned workspaces.
| ctrl-w < / ctrl-w > | narrower / wider by 4 columns |
| ctrl-w - / ctrl-w + | shorter / taller by 2 rows |
| ctrl-w = | make every split in the tab even again |
A pane never shrinks below 20 columns by 3 rows — smaller than that and full-screen programs stop making sense. Resizing applies to the nearest split around the focused pane that runs in that direction, so ctrl-w > in a pane stacked inside a column widens the whole column.
Narrowing a pane below the width of a multi-line bash prompt can scroll the prompt's first line off the top until the next prompt is drawn. See known limitations.
Zoom
ctrl-w z shows the focused pane at the full size of the
tab and hides its siblings; press it again to put the layout back.
The hidden panes keep running at their old size — a background
htop doesn't reflow because you zoomed something else
— and only the zoomed one is resized. ctrl-w h j k l
still move between panes while zoomed, in tree order, staying
zoomed on the new one, as tmux does. Splitting unzooms; closing the
zoomed pane restores the rest. The status bar shows
⤢ zoom · 3 panes so a zoomed pane can't be mistaken
for a one-pane tab. Zoom is never saved with a workspace.
Broadcast input
ctrl-w b sends everything you type — and paste — to every pane in the tab at once, for the "run the same thing on four boxes" case. Mouse events stay local, and it never crosses tabs or workspaces. It's meant to be impossible to forget: every pane's border goes red and the status bar shows a ⇶ BROADCAST pill until you press ctrl-w b again. It switches itself off when the tab is down to one pane.
Only, and swap
ctrl-w o closes every other pane in the tab, asking first when more than one would go (y or ⏎ confirms). ctrl-w x exchanges the focused pane with its neighbour in the enclosing split — the next sibling, or the previous one when it's last — so a pane that landed on the wrong side can be put right without rebuilding the layout. Both keep every pane's share of the space.
Dimming inactive panes
window.inactive_pane_opacity (1.0 by default; 0.7 or
so is typical) fades every pane except the active one, so the
focused split is obvious at a glance. It's a translucent overlay,
not a recolour: clicking a dimmed pane still focuses it, and a tab
with a single pane is never dimmed.
window.inactive_window_opacity does the same for the
whole window when another app is frontmost.
Windows
| cmd-n | new window, starting in the focused pane's directory |
| cmd-w | close the pane; the window goes with the last one |
| cmd-m / ctrl-cmd-f | minimize / toggle full screen |
| cmd-q | quit Oxide |
Closing the last window leaves Oxide running, the way most macOS apps
do; clicking the Dock icon brings a fresh window back.
Window size and position are remembered between launches. With the
default window.titlebar = "hidden" the tab bar doubles as
the drag strip, and double-clicking it zooms the window as usual.