-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Project site: www.superterm.org
superterm is a GNU/Linux and macOS terminal multiplexer written in Free Pascal.
It provides a Turbo Vision-style window and pane interface while every visible
pane remains a real PTY-backed terminal.
Since 3.0, every session is a client/server pair from the moment it starts: the terminal you see is just the first attached client. The entire workspace -- typing into panes, capturing any amount of scrollback, opening, closing, focusing, renaming, resizing and re-tiling windows -- can be driven from any other shell, script or automation tool, with every command and flag accepted in English and in Spanish. Several clients can stay attached to one session at the same time, each seeing everything live. See CLI.
superterm send prod:2 tail -f /var/log/syslog # type into any pane
superterm capture prod:2 --history | grep ERROR # dump the whole scrollback
superterm nueva prod --comando htop -t Monitor # the same CLI, en espanol
superterm organize prod grid # re-tile every window
Two clients attached to the same session; the Python output was injected
from a third shell with superterm send. One capture per feature on
the Screenshots page.

The screenshot shows one workspace divided into four terminal panes. Each pane has its own process, terminal state, focus, and resize behavior.
The newest release is always at releases/latest, with x86_64 packages for Arch, Debian/Ubuntu, Fedora/RHEL and a portable tarball.
The desktop, and the ground everything is drawn on.
The pictures are drawn for the screen they live on: at 1024x768 with the classic 8x16 cell the desktop is 128x46 characters, and that is the size they are now. Two are converted from real artwork -- the 7kas phoenix from the brand's own vector file, and Goody, the Opera Soft loading screen, which is new.

Every picture is drawn with one glyph and no others -- the full block, in one colour, and the space where there is nothing. Half blocks, quadrants and the shade characters all come apart the moment the terminal font is stretched, which is what a maximised window does to them. Stretching samples whole cells, so a stretched picture is made of whole blocks too.
Pick one from Options > Desktop background, and the desktop follows:

The desktop's colour is a choice. Options > Desktop colour... opens a
picker over the sixteen text-mode colours. Black stays the default, and the
colour fills the desktop and the empty cells of a picture alike:

A picture keeps its colours in every palette, monochrome included: what shows between the windows is the picture you chose.

Menus and dialogs cast a real shadow. FreeVision casts one by keeping the character underneath and changing its attribute, which used to drop the cell to its CP437 fallback: the shadow of a menu over a picture came out as the picture's own block characters in dark grey. It is a shadow now, over a picture and over a pane's own truecolor output alike.

The ground is ours to paint. A cell whose background is the palette's
black used to go out as "colour 0", which a themed terminal paints as whatever
it calls black, and a pane cell whose background was the terminal default
went out with no background at all -- a hole straight through superterm on a
terminal with a transparent background. Every background is explicit now; only
black is forced, so a themed terminal keeps its own blue and cyan, and the
text colour is never touched. Options > Solid background turns it off for
anyone who wants that transparency.
Also repaired: menu labels longer than the 31 characters a FreeVision menu item holds were cut in silence, and the generated pictures were losing their first column to a missing space after the row marker.
Opening a window never touches the ones already open. It appears centred,
at the size its class asks for -- classes gain cols and rows -- on top of
whatever is there. F2/F3 included. Tiling is on demand: Windows -> Tile,
or prefix + t.
The history is reachable. Every window carries a scrollbar in its right
frame column, costing the pane no column; the mouse wheel scrolls three lines
a notch, and on the alternate screen it sends arrow keys instead, which is
what makes it work in less, man and vim. Alt-PgUp/PgDn/Home/End,
with Ctrl- and Shift- aliases, and plain PgUp/PgDn where nothing else
wants them. The view stays where you are reading while output keeps arriving.
The arrow keys work in top and htop. Every curses program puts the
terminal in application cursor keys mode and expects ESC O A; superterm was
sending the other form, so the arrows did nothing.
superterm inside a superterm pane. Nesting is refused by identity rather
than by presence: only the sessions this pane already lives inside are
rejected, at any depth. A new session, or a different one, is as safe from a
pane as from any terminal. The mouse reaches the application inside a pane --
clicks, drags and the wheel, at pane coordinates -- while the frame, title
bar, menu and status line stay superterm's, so a nested superterm's own
window manager works. Ctrl-Q F5 sends a bare F5 inward, which is how you
un-maximise the inner one.
Also repaired: superterm could hang at startup before its first line ran, on
a terminal the runtime does not recognise; the console had no mouse at all;
a client could lose visible content when another client resized a pane; and
Restore all left the restored windows behind.
See the release notes for the full list.
A picture on the desktop, behind the windows. The desktop can show ASCII art instead of the plain pattern, in real RGB colour rather than the 16-colour grid.

Pictures are plain text files read at run time, not compiled in: drop one
into ~/.superterm/backgrounds/ and it shows up in the Options menu without
rebuilding. A file is a palette plus a row of glyphs and a row of colour
indexes per line of the picture. (Since 3.4.2 the only glyphs used are the
full block and the space -- see above.)
Nine ship with it. Six are pictures:
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
and three are seamless patterns made for the tiled layout, which repeat across the desktop with no visible join:
![]() |
![]() |
![]() |
The layout can be centred, tiled, stretched or fitted, and a picture may name
the layout it was designed for. With background=none the whole thing
short-circuits and costs exactly what it did before the feature existed.
See the 3.3 release notes.
Upgrading an existing checkout: run ./configure again before make install,
or just make -- the Makefile regenerates itself now.
Every pane now renders in full fidelity, not just the maximized one. 3.1 gave a maximized pane the whole terminal so a rich TUI could render untouched; 3.2 does the same for panes that are tiled or windowed. Truecolor, 256-colour palette indexes, real UTF-8 glyphs, emoji at their true two-column width, faint and concealed text all reach the terminal from a normal window. A pane is no longer flattened to one CP437 byte and 16 colours per cell. The vendored FreeVision is not modified: its grid is still drawn and decides what is visible.
Alongside it: attributes no longer leak out of a full-screen application,
reset clears the screen again, the alternate screen stays out of the
scrollback, and window drags stopped resending the whole screen -- 13926 to
1810 bytes per drag step, with frames coalesced when input is already waiting.
Two new per-profile display options in the Options menu:
- Show contents while dragging (default on). With it off you get a wireframe drag: only the window outline moves and everything behind it stays visible, so each step sends just the strip the outline vacates plus the one it takes.
-
Zoom transition (default off). A short expanding and contracting outline
when
F5maximizes or restores a pane.
Below, four windows share the desktop -- a log tailer, a watch on disk usage,
top in the centre, and a fourth minimized to a title bar at the bottom. F5
maximizes the focused pane and hands it the whole terminal, so top reflows
into the full screen; F5 again brings the desktop back with every window
where it was. The expanding outline is the optional transition.

See the 3.2 release notes for every change. Upgrading: the session protocol moves to version 3, so a 3.2 client refuses to attach to a daemon from an older release -- close any live session before installing.
- Vertical and horizontal pane splits with focus navigation and mouse support.
- Resize, maximize, minimize, restore, and close operations; up to 16 panes in one visible layout.
- Window classes (
[class.*]): reusable named pane definitions for local commands and structured SSH connections (host, user, port, key, optionalsshpasspassword), or a freeconnectcommand, with optionalcmd,postconnect,shell,cwd,scrollback, and a default windowtitle. - Profiles (
[profile.*]): named workspaces of windows and pane layouts whose panes reference window classes. - Always-server sessions (3.0): every launch starts a session server and the
visible terminal attaches as its first client, so the control CLI works
from the very first second.
[session] server=detachrestores the classic detach-only flow. - A bilingual control CLI (3.0):
list/listar,send/enviar,capture/capturar,kill/matarplus full window management (new/nueva,close/cerrar,focus/foco,rename/renombrar,resize/tamano,minimize/minimizar,restore/restaurar,zoom/ampliar,organize/organizar). See CLI. - True multi-user sessions (3.0): up to 8 clients attached at once with output broadcast, live window events, smallest-size negotiation and flow control so a slow client never stalls the session.
- Named detachable sessions: each detach creates a background session under
~/.superterm/sessions/, kept alive by a per-user session server. Reattach withsuperterm --attach, theCtrl-Q spicker, or the startup picker;superterm --list-sessionsprints them. - A configurable tmux-style prefix key (
[keymap] prefix, defaultCtrl-Q) so a remote tmux keepsCtrl-Buntouched. - A custom keyboard driver: a lone
Escreaches the pane (timeout-based, not held as an Alt prefix), with CSI/SS3 decoding and X10/SGR mouse support. - Editable, persistent window titles, saved in sessions and profiles.
- A color palette selector (color, black-and-white, monochrome) for the window manager itself, and, since 3.2, full-fidelity pane rendering: 256-color and truecolor sequences, UTF-8 glyphs and emoji are passed through to the terminal exactly as the application sent them, in any pane.
- English and Spanish application interfaces, switchable at runtime.
- A quick session wizard for one to four ad-hoc panes.
- Installation: prebuilt packages, dependencies, configure, build, and tests.
- Usage: learn the controls, wizard, profiles, and session lifecycle.
- Screenshots: view the English workspace, menu, and wizard captures.
- Configuration: define window classes, profiles, and detachable sessions.
- Architecture: understand the PTY, screen, layout, and FreeVision layers.
- Development: work on the source tree and run the regression suite.
- Troubleshooting: diagnose build, configuration, SSH, and terminal issues.
The supported native platforms are GNU/Linux and macOS (Apple Silicon and
Intel), both POSIX systems built from the same source tree. The program uses
POSIX PTYs, fork/exec, select, and the bundled FreeVision text UI. The
only platform-conditional unit is the PTY/process layer (src/st_pty.pas,
selected with {$IFDEF DARWIN}): GNU/Linux reads process titles from /proc,
while macOS uses libproc/sysctl. Windows would require a ConPTY backend and
Windows-specific process and resize code; WSL is the practical way to run the
GNU/Linux build on Windows.
Detached sessions are owned by a per-user session server, so leaving the FreeVision client does not close local shells or remote SSH connections.
- Prefer SSH keys or an SSH agent over passwords.
- The application creates
~/.supertermmode700and writes its files mode600, because they may contain credentials. - Do not put passwords in command lines or debug logs.
- Treat
postconnectand local command fields as shell commands under the configured login shell.
Built for GNU/Linux and macOS with Free Pascal and FreeVision.







