Skip to content
Download

Panes ​

The life of a pane ​

A pane runs one program: the shell, or the command you give to isc run or isc split.

  • When its program ends, the pane closes. A pane started with isc run --keep stays open and readable, and shows how the program ended (done, or failed with "exited with N"). Press Enter in it to close it. Its header says "Enter closes".
  • Closing a pane always ends its program. The program is sent a hang-up. After 300 ms its terminal closes. After three seconds its process group is killed. There is no confirmation, even if something is running.
  • Close a pane with Ctrl+Shift+W, the close button in its header, or isc close [PANE].
  • When the focused pane closes or leaves the layout, the keyboard goes to the pane that takes its space.
  • A fault inside one pane closes only that pane.

Which shell runs ​

If you don't give a pane a command, it runs the first of these that applies:

  1. the shell setting, if it's set: a program and its arguments, split at spaces, such as "fish" or "/bin/zsh -l". You can't give a path that contains a space;
  2. $SHELL as the daemon sees it;
  3. /bin/sh.
  • The daemon reads the setting each time a pane starts, so a change applies to the next pane without a restart. A pane that's already open keeps the shell it opened with.
  • The setting applies to panes opened from the window, to panes opened by isc, and to panes brought back after the daemon has been stopped.
  • If the shell you named can't start, the login shell starts instead and the top bar says what went wrong.
  • The shell setting changes what new panes run, not $SHELL inside them. Programs in the pane still see the original $SHELL.
  • If your other terminal is set to run fish while your login shell is zsh, you get zsh here, with zsh's prompt and completion messages, until you set shell = "fish".

What is known about a pane ​

  • Program: the name of the foreground process. It's read shortly after output or input, never on a timer. A pane that has printed nothing and been sent nothing has no known program yet and shows the generic terminal icon.

  • Directory: read from the pane's own process (/proc on Linux), so it's correct with any shell and needs no setup. A shell's own report of its directory (OSC 7) only triggers an earlier read. It's the directory of the pane's own program: for a pane started as nvim, it's nvim's directory.

  • Title: what the program set. Some programs put a mark before the words, such as the spinner or star an agent uses to show it's busy. That mark is left out wherever the title is shown, because the pane's state has its own mark. A mark joined to a word, as in *scratch*, is kept. isc ls shows the title exactly as the program set it.

  • Icon: chosen from the program's name. Anything not in this list gets the terminal icon:

    KindPrograms
    Editorsnvim, vim, vi
    Version controlgit, lazygit, tig, gh, jj
    Rustcargo, rustc, rustup
    JavaScriptnode, npm, pnpm, yarn, bun, deno, npx
    Pythonpython, ipython, uv, pip
    Other languagesgo, lua, ruby, irb, rails, bundle, java, gradle, mvn
    Containersdocker, podman, lazydocker, kubectl, k9s, helm
    Databasespsql, mysql, sqlite3, redis-cli, pgcli
    Remotessh, mosh
    Monitorshtop, btop, top, nvtop
    Agentsclaude, codex, gemini, opencode, aider, amp, goose
    Shellssh, bash, zsh, fish, nu, dash

    The list is fixed. You can't add to it in the settings.

The header ​

The header shows, in order: the icon; the title, or the name you gave the pane; the directory, unless the title already contains it; a mute mark; the state as one word, when the pane isn't idle; a percentage, when the program reports progress; what the state is about; and "Enter closes" on a kept pane whose program has ended.

Buttons show on the focused pane and on the pane under the pointer: split right, split down, float (or, on a float, put into the layout, keep on top and show over every tab), minimize, fill the tab, close.

Under the header, a two-pixel line shows the pane's state as a colour. It doesn't move.

The pane-header setting:

ValueHeader
full (default)Everything above
nameThe same, without the buttons
hiddenNo header; the terminal uses the space

A floating pane keeps its name even with hidden, because you drag it by that bar. Changing this setting resizes the terminals.

Splitting and focus ​

  • Split right / down: Ctrl+Shift+O / Ctrl+Shift+E, the header buttons, or isc split right|down [PANE] [-- COMMAND…]. The new pane takes half of the pane it splits. If a floating pane is focused, the tiled layout is split instead.
  • Focus by direction: Ctrl+Alt+arrow, or isc focus left|right|up|down. This moves across tiled panes.
  • Next / previous pane, floats included: Ctrl+Shift+] / Ctrl+Shift+[.
  • Click a pane to focus it. isc focus PANE gives a pane the keyboard.

Resizing ​

With the mouse: drag the divider between panes. Ratios stay between 5% and 95%. The pointer changes over a divider; nothing else marks it.

With the keyboard: Ctrl+Alt+Shift+arrow moves the focused pane's edge that way, by 5% of the space being divided. From the command line: isc resize left|right|up|down [PANE] [--by PERCENT].

  • The arrow says which way the divider goes, not whether the pane grows. The divider that moves is the innermost one on that axis that holds the pane. So "right" widens a pane whose divider is on its right and narrows one whose divider is on its left: the same key grows one pane and shrinks another.
  • A pane as wide as the tab has no divider to move left or right, so the key does nothing.
  • Each press is calculated from the last layout the window received. Holding the key repeats correctly at keyboard speed. Two presses that arrive in the same instant, as from a script or a macro, move the edge once.
  • On a floating pane, the same keys move its right and bottom edges.

Moving and swapping ​

  • "Move this pane left / right / up / down" swaps a tiled pane with its neighbour on that side. The pane keeps the keyboard. If there's no neighbour on that side, nothing happens.
  • On a floating pane, the same commands move it a twentieth of the tab at a time. It stops at the tab's edges.
  • These commands (move-left, move-right, move-up, move-down) have no key in the direct keymap. Use the palette or bind one in [keys]. After the leader they are Ctrl+H, Ctrl+J, Ctrl+K, Ctrl+L, and they repeat.
  • isc swap A B swaps the places of two panes.
  • With the pointer: drag a tiled pane by its header over another tiled pane in the tab.
    • While you hold it there, the two panes are shown in each other's places, and the one you're carrying is washed with the accent colour. If you move it back over its own place, or off the panes, they're shown where they were.
    • If you let go over another pane, the pane moves there. If you let go anywhere else, nothing changes.
    • No terminal is resized until you let go. While you hold the pane, each terminal is drawn at its current size, from the top left of the place it's shown in. It's cut off where that place is smaller, and has empty space where it's larger. The programs get their new sizes once, when you drop the pane.
    • Nothing else moves and no split changes its share. You can't drag a pane into a new split or to another tab, and you can't drag while one pane fills the tab.

Filling the tab (zoom) ​

Use Ctrl+Shift+Enter, the header button, or isc zoom [PANE] [--off]. The pane fills the tab. The other panes keep their size underneath. Only the zoomed pane is resized.

Floating panes ​

A floating pane is an ordinary pane that sits above the layout. Keyboard, mouse, selection, copy and paste work exactly as they do in a tiled pane. Any number of panes can float at once.

ToDo
Open a new floatCtrl+Shift+D, or isc run --float [--rect X,Y,W,H]
Float the focused pane, or put it backCtrl+Shift+G; isc float [PANE] [--rect X,Y,W,H], isc tile [PANE]
MoveDrag the header
ResizeDrag any edge or corner
Keep on top of other floatsCtrl+Shift+K, the header button, isc pin [PANE] [--off]
Put over the left half, right half, middle or whole tabThe palette commands float-left, float-right, float-centre, float-fill. They have no default keys.
Hide or show every float in the tabCtrl+Shift+H, the switch in the top bar, isc floats show|hide
Put one float out of sight, and bring it backisc hide [PANE], isc show PANE
  • A float can't leave the tab's area, and it's at least a tenth of the tab each way.
  • Its position is stored as fractions of the tab, so it survives resizing the window. The rectangle you give to --rect uses the same fractions: --rect 0.5,0,0.5,1 is the right half. Without --rect, isc float and isc run --float use 0.2,0.15,0.6,0.7.
  • Clicking or focusing a float raises it.
  • When you float a tiled pane, the tiled panes beside it take back its space. When you put it back into the layout, it goes beside the focused tiled pane.
  • Hidden floats keep running and keep their places.
  • A float opened with isc run --float -- lazygit closes when its command exits, like every pane. This covers pickers and one-shot tools.

Over every tab. A float belongs to its tab unless you change that with the button beside "keep on top" in its header, "Show this floating pane over every tab" in the palette, leader I, or isc follow [PANE] [--off]. It then shows over whichever tab of the project is in front, in the same place and at the same size.

  • Closing a tab doesn't close it while the project has another tab. Closing the last tab does.
  • When it's minimized, it sits in the dock of the tab it was over, and it comes back the way it was.

The scratch pane ​

Press Ctrl+` to bring up a shell that floats across the lower part of the tab and has the keyboard. Press the same key again to put it out of sight and give the keyboard back to where it was. After the leader the key is `; from the command line, use isc scratch [--project NAME].

  • There's one scratch shell per project, and it's the same over every tab. Whatever was running in it keeps running while it's out of sight.
  • It's called "scratch" in its header and in the sidebar.
  • If the scratch pane is on screen but another pane has the keyboard, the key gives the scratch pane the keyboard instead of putting it away.
  • It's an ordinary pane: you can move, resize, rename, tile, minimize or close it. Once its shell ends, the key starts a fresh one.
  • Out of sight isn't the same as minimized: the pane has no dock chip. The sidebar still lists it, and pressing its row brings it back.
  • Ctrl+` is not available to programs in panes. Bind it to none in [keys] to give it back to them.

Minimizing and the dock ​

Use Ctrl+Shift+M, the header button, or isc minimize [PANE]. The pane leaves the layout and its program keeps running. The pane keeps the size it had, so the program isn't disturbed.

  • It waits in the dock as a chip: icon, title, percentage if reported, state mark, and a border in its state's colour. Chips stay in the order they were minimized.
  • Restore: click the chip; Ctrl+Shift+R restores the pane minimized last; isc restore PANE. A tiled pane returns beside the panes it was beside, with the share of space it had. A float returns to its rectangle.
  • A middle click on a chip closes the pane without asking.
  • "Minimize every pane but this one" (minimize-others) and "Restore every minimized pane" (restore-all) are palette commands with no default keys.
  • A minimized pane costs the window nothing.
  • The dock fits about one chip for every 170 pixels of the tab's width. When there are more chips than fit, the idle minimized panes share one chip, "3 idle", at the end of the dock. Pressing it opens the palette, which lists every pane. Panes that are working, waiting, done or failed always keep their own chip.
  • The dock resizes the terminals when it appears or disappears.
  • Hovering a chip shows no preview of its pane.