Settings

The Settings window

Ctrl+, (Cmd+, on macOS) opens it, as does File → Settings… or Settings… on the right-click menu, which is the way in when the menu bar is hidden. There is one Settings window, shared by every terminal window.

  • A sidebar of pages in two groups: General (Appearance, Terminal, Profiles, Keyboard) and System (Sync, Advanced). The arrow keys move between pages and skip the group headings.
  • Search settings at the top narrows both the rows and the pages to what matches. A match in a row’s title beats one in its description, and that row’s page opens. Rows also answer to other words: “transparency” finds Window opacity.
  • There is no OK button. Every control applies the moment it changes, to every window, and the file is written at once. Choosing a font or a theme is a judgement about how it looks, and a dialog that holds the result back makes you guess.
  • It follows changes made elsewhere. A theme picked from the palette, the menu bar hidden by its chord or a zoom step shows in the window while it is open.
  • Esc closes it.

What does not apply live

Two settings cannot, and each says so on its own row:

  • Scrollback lines sizes a buffer that already exists, so it applies to new tabs.
  • Shell is a process that is already running, so it applies to new tabs.

A few others apply at a later point, and say when: the interface language after a restart, Put the menu bar in the title bar to windows opened afterwards, and the profile for new tabs on the next tab.

The pages

Appearance (details):

  • Theme: the color theme, and Import… for a scheme another terminal wrote (iTerm2, Terminal, Windows Terminal, Ghostty, kitty, Alacritty). Remove deletes an imported one.
  • Font: family and size.
  • Tabs: hide the tab bar with a single tab.
  • Window: show the menu bar, put it in the title bar, show a scrollbar, window opacity.
  • Language: the interface language.
  • Preview: a sample drawn with the real palette and font.

Terminal:

  • Display: cursor shape, Padding (4 pixels by default, up to 32), visual bell, and Desktop notifications (on by default), which lets a program’s notification (OSC 9, OSC 777) reach the desktop. Its tab is marked either way.
  • Session: Ask before closing a running tab (on by default; asks only when the shell has something running in it), Scrollback lines (5,000 by default, 0 to 200,000, held in memory), and Shell (empty uses $SHELL, started as a login shell). The shell field says “Not found” or “Not executable” as you type.
  • Links: Open files with, a command for opening a clicked file path, such as editora {file}:{line}. Empty uses the desktop’s own opener. See Links.
  • Input: Use Alt as Meta (on by default; see Keyboard), Ask before pasting several lines (on by default), Copy on select (off by default), Let programs copy to the clipboard (OSC 52, on by default), and Predict typing over slow SSH (on by default).

Profiles: the profile new tabs open with, and the list of profiles: the ones found on the machine, which you can hide, and your own, which you can add, edit and remove. Any profile, the system shell included, can have its own font, size and theme; Default follows the global one. See Shell profiles.

Keyboard: every command under the menu it lives in, with its shortcut. Click one and press the new chord; Reset and Reset All Shortcuts put them back. The command palette’s chord, which had a row on the Terminal page, is the Command Palette… row here. See Changing a shortcut.

Sync (details):

  • Repository: the URL of a private Git repository you own, the branch (main by default), and Connect / Disconnect. With the GitHub CLI signed in, Create on GitHub… makes the repository and connects to it.
  • Syncing: how the last sync went, with Sync Now; Sync automatically (on by default); and the interval, 15 minutes by default.
  • What is synced: the key bindings, and nothing else.

Advanced:

  • Files: where the settings file is. If a save fails, the reason shows here in red.
  • Updates: Check for updates at startup (below).
  • Diagnostics: Show Debug Log… (below).

Reset to Defaults

The button at the bottom of the window asks first, then puts appearance, terminal, window and update settings back to how they shipped, and every shortcut back on its default. Your profiles, their fonts and themes, the default profile and the hidden profiles are kept, and settings sync stays connected; the shortcuts the reset puts back are synced like any other change.

The settings file

Every setting is in one plain properties file, settings.properties, in ~/.termina on every platform (C:\Users\<you>\.termina on Windows). To use another folder, start Termina with --config-dir DIR or set the TERMINA_CONFIG_DIR environment variable; --config-dir wins when both are given. The debug log’s file is written to the same folder, and settings sync keeps its copy of the repository and its backups in sync/ there.

  • Hand-editing is fine while Termina is closed. Termina reads the file at startup and writes the whole file on every change, so an edit made while it runs can be overwritten.
  • A bad line costs only that key. A value that does not parse falls back to its default, and the rest of the file is read as usual. A file that cannot be read at all opens on defaults, and is first copied aside as settings.properties.bad-<time> so nothing in it is lost.
  • Backslashes are literal, and the file is UTF-8. terminal.shell=C:\Windows\System32\wsl.exe means what it says. \\ is one backslash and \uXXXX a character, so files written by earlier versions read the same.
  • Two Termina processes share the file safely. Each writes only the settings it changed, merged into what is on disk under a lock, so one never undoes the other’s changes.
  • Values are clamped on read as well as on write, so a hand-edited two-million-line scrollback becomes 200,000 rather than exhausting memory at the next launch.
  • Writes are atomic. Termina writes a temporary file beside it and moves it into place, so a crash or a power cut mid-write leaves either the old file or the new one, never an empty one.

The keys most worth knowing:

KeyValuesDefault
themeeditora-dark, editora-light, clear-dark, clear-light, or user-<name> for an imported themeeditora-dark
font.familyA font family name; empty picks the best availableempty (JetBrains Mono)
font.size7 to 4013
font.zoom0.3 to 3.0, multiplies the size1.0
terminal.cursorShapeBLOCK, UNDERLINE, BARBLOCK
terminal.padding0 to 32 pixels4
terminal.belltrue, falsetrue
terminal.notificationstrue, falsetrue
terminal.scrollback0 to 2000005000
terminal.shellA shell’s path; empty uses $SHELLempty
input.altIsMetatrue, falsetrue
input.confirmPastetrue, falsetrue
input.copyOnSelecttrue, falsefalse
terminal.clipboardWritetrue, falsetrue
terminal.typeAheadtrue, falsetrue
keys.<command>A chord such as Ctrl+Shift+Y or Shortcut+Shift+P, or noneno line (the default)
ui.hideTabBarWhenSingletrue, falsetrue
ui.showMenuBartrue, falsetrue
window.menuBarInTitleBartrue, falsefalse
ui.showScrollBartrue, falsetrue
ui.confirmClosetrue, falsetrue
window.opacity0.6 to 1.01.0
ui.languageen, it, es, fr, pt, de; empty follows the systemempty
links.openCommandA command with {file}, {line}, {column}; empty uses the desktopempty
updates.checktrue, falsetrue
sync.repositoryA Git repository’s URL, without a password or tokenempty
sync.branchA branch namemain
sync.autotrue, falsetrue
sync.intervalMinutes5 to 144015

The keys.* lines are described under In the settings file on the Keyboard page; the palette’s is keys.commandPalette, as it was in 0.10.0. The sync.* keys are set by the Sync page, which refuses a URL with a password or token in it. The profiles are the profile.* keys with profiles.default and profiles.hidden, and a profile’s own font, size and theme the profileStyle.<id>.* keys; their format is on Shell profiles. The window.* size and position keys and the updates.* timestamps are bookkeeping that Termina maintains itself.

The debug log

Settings → Advanced → Diagnostics → Show Debug Log… shows every warning and error logged in this session, and anything that crashed, with Refresh, Copy and Clear. A packaged application has no console, so without it the one line saying why something failed would go nowhere.

The same lines are written to termina-session.log in the settings folder, started afresh at each launch. A second Termina running at the same time writes termina-session-<pid>.log instead, so it does not wipe the first one’s log. The log stays on your machine. See Troubleshooting.

Updates

Settings → Advanced → Updates → Check for updates at startup (on by default): at most once a day, Termina asks the GitHub releases API for the newest version. Nothing is sent beyond the request itself. When a newer release exists, the Help menu says so (Version X is available…) and opens the release page. Help → Check for Updates… asks at any time, and Help → About says when the last check ran. Turn the switch off, or set updates.check=false, to stop the startup check.