Skip to content

Terminal

Velle Sinclair edited this page Aug 17, 2026 · 2 revisions

Terminal

Super+Return opens syntty, the terminal SynapseOS ships and the default one since synui 0.1.0-359. It is what xdg-open reaches for on anything marked Terminal=true, what the start menu opens, and what SYNAPSE Settings ▸ Default Applications offers first.


Why there is one at all

It links no GL. wl_shm, xdg-shell, xkbcommon and libc — no EGL, no OpenGL, no toolkit, no cairo. Cells become pixels on the CPU, in the XRGB8888 a Wayland compositor already wants, so the buffer crosses with no conversion and no library in between.

That is the reason it belongs on the install media whatever your default is: a GL context is the one thing an installer image cannot count on across unfamiliar hardware, and a live session with no way to open a prompt is a rescue disk that cannot rescue anything.

Binary 359 KB (kitty: 65 MiB)
Window on screen 5.8 ms
4K interactive edit 68× less work than a full repaint — same pixels
Parse 2.56 MB 96.1 ms → 44.5 ms

Using it

syntty                        # a shell
syntty -e htop                # run one command — the flag every launcher emits
syntty --hold -e ./build.sh   # keep the output on screen after it exits
syntty --config ~/other.conf  # a different config
syntty --no-config            # ignore the config file entirely

--hold is the one worth knowing: it keeps the tab open with the command's exit status once it finishes, for a window that was opened to run one thing and where the output is the point. Update System and System Status in the start menu both use it.

Tabs

A tab is a whole session — its own grid, its own parser, its own pty and its own child — sharing only the window, the font and the renderer. A second tab therefore costs tens of kilobytes rather than a second process with a second copy of everything in it.

The keys the window keeps

These never reach the program running inside:

Key What it does
Ctrl+Shift+T / W new tab / close this one
Ctrl+Shift+Left / Right the tab before or after
Ctrl+Shift+19 that tab by number (or click it in the bar)
Ctrl+Shift+C / V copy the selection / paste the clipboard
Shift+Insert paste the primary selection, as middle-click does
Shift+PgUp / PgDn / Home / End the scrollback
Ctrl+Shift+Up / Down jump to the previous or next prompt

Plain Ctrl+C stays SIGINT, as it must — that is why the clipboard pair carries Shift.

Selecting, copying, pasting

Drag to select; double-click for a word, triple-click for a line. Shift-drag selects even while a program is reading the mouse. A program inside can read and write the clipboard through OSC 52, which is how a remote editor's yank reaches your local clipboard over SSH.

A paste is the dangerous direction. A terminal that writes the clipboard to the pty unchanged has turned a copy into an execution channel: copy a command off a web page and the page can append a newline, so the shell runs it before you have read it. Bracketed paste (?2004) exists to stop that, by telling the shell the text was pasted and its newlines are not Enter — but it is only as good as its wrapper, and a clipboard containing the end marker closes the bracket early. So syntty strips control bytes from the payload first, which makes the marker unforgeable, and it does that whether or not the program turned bracketed paste on — against an old shell or a plain cat, the stripping is the only protection there is.

The pointer

Selection and mouse reporting, and which one runs is never the terminal's choice: a program that asks for mouse events (vim, htop, less) gets them, and everything else leaves the pointer to you.

Images

syntty speaks the kitty graphics protocol, so icat and anything else that emits it put a real image in the window. Despite the name it has nothing to do with the GPU — it is an escape sequence.

Key encoding

The kitty keyboard protocol is supported, which is what makes Ctrl+I and Tab — the same bytes in the legacy encoding — distinguishable at all. Key repeat is the client's job on Wayland (the compositor hands over the rate and delay once, and never sends a repeated event), and DECCKM is honoured, so full-screen programs get the arrow-key encoding they asked for.


Configuration

$XDG_CONFIG_HOME/syntty/syntty.conf, or ~/.config/syntty/syntty.conf when that is unset — key = value, one per line, no sections. Command-line flags win over the file, and --no-config ignores it entirely.

font         = JetBrains Mono
font_size    = 10.5      # points, the unit the rest of the desktop uses
columns      = 80        # the size the window asks for, when it may choose
rows         = 24
scrollback   = 1000      # lines of history, allocated as output scrolls off
scroll_lines = 3         # lines per wheel notch

The shipped file has every key commented out at its default, so it doubles as the reference. Colours are settable too (foreground, background, and the eight names), but the desktop theme sets them for you — see below.

Text size is a desktop-wide setting: Control panel ▸ Appearance writes font and font_size here in place, alongside every other window in the suite. Editing this file by hand and changing it in the panel are the same change.

It follows the desktop theme

Colours come from the desktop theme rather than a palette of its own, so switching to Windows 95 or macOS 26 moves the terminal with everything else. Two consequences worth knowing:

  • dim text stays legible on a pale theme. A fixed blend toward the background darkens on a dark theme and lightens on a light one, which on the silver themes made dim text nearly invisible.
  • It answers ESC ] 11 ; ? honestly — "what colour are you?" — so a program that picks its own text colours against the background gets the right answer. A terminal that does not reply at all is read as dark by convention, which is how a light theme ends up with unreadable output.

It also honours DECTCEM: a program that hid the cursor gets a window with no cursor drawn in it.


Prompt marks (OSC 133)

syntty and synsh ship both halves of OSC 133, the de-facto semantic-prompt protocol — the shell marks where a prompt, its input and its output begin, and the terminal can then jump between commands and copy exactly one command's output.

They are the standard's marks rather than ours, so any terminal that already speaks OSC 133 gets the same thing out of synsh, and any shell that emits them works here.


What happened to kitty

It is still packaged, still installable, and still works. Nothing in SynapseOS opens it any more — the last three call sites pinned to it (System Status, Update System, and syn-update's Install button) moved across when --hold landed — so synpkg remove kitty succeeds, which it did not before.

A synuirc written between synui 215 and 358 still names terminal = kitty, and that is treated as a real choice rather than overwritten. To move:

# ~/.config/synui/synuirc
terminal = syntty

foot is still on the image too, as the CPU-rendered fallback.


See also: Commands · The Desktop · Keybindings · synsh

Clone this wiki locally