Skip to content

Releases

0.7.1 (unreleased)

  • Adds history.hard_limit, which makes the scrollback evict a whole command at a time. Anything above history.limit is headroom the buffer may grow into; when it fills, entire (prompt, output) blocks are dropped from the top instead of a slice taken wherever the limit happened to fall, so the oldest line kept is a prompt with its command's output intact rather than an orphaned tail. Boundaries come from the shell's OSC 133 marks, so with no shell integration — or for a single command whose output is larger than the whole headroom — the buffer simply bounds at hard_limit and evicts line by line as before. Defaults to history.limit, which is exactly today's behaviour (#836)
  • Fixes the scrollback being scrambled whenever the history limit changed, which happens on every profile apply and config reload. Growing it blanked the top of the scrollback and slid the real rows out of reach; shrinking it dropped the newest lines and kept the oldest
  • Fixes desktop notifications never appearing in the Flatpak build. Contour asked org.freedesktop.Notifications for them directly, which a sandbox does not permit and which Flathub declines to grant a permission for; a sandboxed Contour now speaks the org.freedesktop.portal.Notification portal instead, which needs no permission at all. Outside a sandbox nothing changes — the session bus is still used, and still reports a dismissal exactly as before
  • Adds notification_close_timeout, for the one thing the notification portal cannot do: tell an application that its notification was dismissed. Where a close cannot be observed, Contour now assumes one after this long (10 seconds by default) and reports it back over OSC 99 marked untracked, so an application that asked for close events with c=1 is answered instead of waiting forever, and can still tell a guess from an observation. A notification that states its own lifetime with w= is answered on that instead, and 0 disables the assumption entirely
  • Adds output folding: collapse a finished command's output down to its prompt line and expand it again. Driven by the shell's OSC 133 marks, so any shell with shell integration works (#88)
  • Adds a fold column in a one-column gutter left of the grid, marking each foldable block and highlighting under the pointer; clicking it, or the new context-menu entry, toggles that fold
  • Reserves U+10F000..U+10F0FF for Contour's own glyphs and assigns the fold column's two heads, which no Unicode character describes; see docs/vt-extensions/private-use-glyphs.md
  • Adds the global folding config section and the actions CollapseAllFolds, CollapseLastFold, ExpandAllFolds, ToggleFold and ToggleLastFold
  • Vi normal mode moves in visible lines, stepping over collapsed blocks; folding.on_jump_into_fold picks whether a search hit inside one expands it or is skipped
  • Removes the deprecated SETMARK sequence (CSI > M); use OSC 133 ; A instead
  • Adds support for OSC 3008, systemd's hierarchical context signalling (UAPI.15): the nested stack of contexts a shell, run0, ssh or a container runtime opens around whatever runs inside it. systemd 258 and later emit these around every interactive command with no configuration at all, so on such a system Contour learns command boundaries, exit statuses and working directories for free (#2078)
  • On a system where OSC 3008 arrives and no shell integration is installed, prompts now get fold controls, mark-jump stops and "copy last command output" without any setup. A shell integration, if one is installed, keeps full ownership of the markers and nothing changes
  • Reports how a command really ended: OSC 3008 distinguishes a crash from an interruption from a plain non-zero exit, and names the signal — which OSC 133's numeric exit code cannot express
  • Adds the {Context} indicator status-line placeholder: a breadcrumb of the contexts above the one you are typing in. It shows only privilege and machine boundaries by default and draws nothing at all when there are none, so an ordinary shell session is unchanged
  • Adds an optional tint map to color schemes, giving the page background a different shade under an elevated, containerised, virtualised or remote context. No shipped scheme sets one, deliberately: every field OSC 3008 carries is a display hint any program on the terminal can write, so the colour is something you opt into rather than something that appears
  • The tab tooltip and "Open Current Folder" now follow the working directory OSC 3008 reports. A directory belonging to a container, a VM or another machine is never opened locally — the menu entry greys out rather than opening the host's directory of the same name. Set osc_context.enabled to false to opt out of all of it
  • A contour attach pane gets the same context tracking, tinting and breadcrumb a local one does
  • Fixes stale fold ranges after a command finished: OSC 133's ;B and ;D wrote their line flag without invalidating the ranges derived from it, so anything reading them between the end of a command and the next prompt saw the state from before
  • Draws U+25BC and U+25B6 with the built-in box-drawing renderer, so they no longer depend on the font
  • Fixes a daemon with more than one scrollback-heavy pane becoming permanently unattachable — contour client was refused before any screen content arrived, and every reconnect failed the same way. Attach snapshots are now paced against the connection's send queue and split across frames, so attaching succeeds whatever the scrollback depth; a window resize could drop an already-attached client for the same reason and no longer does
  • Fixes the window freezing for up to 25 seconds when a hyperlink, folder or configuration file is opened while the desktop's xdg-desktop-portal is not answering. Qt reaches the portal with a blocking call on the GUI thread, and since Qt 6.10 it takes that path whether or not Contour is sandboxed; Contour now speaks the portal itself, asynchronously, and falls back to xdg-open if the portal refuses. Where opening still fails, the log now says why instead of only that it did (#2075)
  • An SSH profile that cannot connect now says so on the terminal, naming the host, the port and the reason. Every such failure — a name that does not resolve, a refused connection, an agent that is not there — used to be written only to the error log, which is off by default, so what appeared was the generic "Shell terminated too quickly." with nothing in it to act on (#2075)
  • Under Flatpak, an SSH profile that fails because the sandbox permits no network now says that, rather than reporting the host as unresolvable. Contour's SSH runs in-process rather than spawning ssh, so it is subject to the sandbox's own network permission; the message is chosen from what the sandbox reports it was granted, not guessed from how the call failed (#2075)
  • Fixes contour client never finding the daemon under Flatpak. A sandboxed daemon bound its socket under the sandbox's own $XDG_RUNTIME_DIR — a directory on a private mount the host cannot reach at any path — so a shell that escaped the sandbox had nothing to attach to. It now binds under $XDG_RUNTIME_DIR/app/, which flatpak shares with the host at the same path, and exports $CONTOUR_MUX into the shells it hosts (#2075)
  • Fixes an SSH connection attempt skipping every other address a host name resolved to, so a host reachable only at its second address appeared to be down
  • Fixes Contour hanging when an SSH handshake failed: the failure path took a lock the calling thread already held
  • Fixes Contour spinning when the SSH agent could not be reached — the normal case inside a Flatpak, where $SSH_AUTH_SOCK names a host path the sandbox does not mount — instead of falling through to the next authentication method

0.7.0 (2026-08-17)

Contour 0.7.0 makes the window a workspace: native GUI tabs in the title bar, split panes, saved layouts, and an optional terminal-styled UI that draws the application's own chrome on the character grid. It adds an experimental daemon mode for sessions that outlive the window showing them, accessibility support across the terminal and its chrome, the kitty graphics, text-sizing and clipboard protocols, ReGIS vector graphics, and a large round of VT conformance work.

Tabs, splits and layouts

  • Adds first-class GUI tabs presented in a custom window title bar, replacing the status-line tab list (the {Tabs} status-line directive remains supported for existing configs)
  • Adds split panes — split the active pane vertically (Ctrl+Shift+E) or horizontally (Ctrl+Shift+O), close a pane (Ctrl+Shift+X), and move pane focus with Alt+Shift+Arrow
  • Adds pane management actions: swap the active pane with a neighbor (Ctrl+Alt+Arrow), resize it (Ctrl+Shift+Alt+Arrow), flip a split's orientation (Ctrl+Shift+Backslash), and move a pane to a new position in the split tree (unbound by default)
  • Adds pane zoom (TogglePaneZoom, Ctrl+Shift+Z): gives the active pane the whole tab area, hiding its siblings, and toggles back to the tiled layout. Moving pane focus while zoomed keeps the zoom and shows the newly focused pane; splitting, closing or rearranging panes returns to the tiled view. A zoomed tab is titled after the pane on screen and wears a Z badge
  • Adds dragging tabs: reorder a tab within its strip, drag it into another window, or tear it out into a new window, with a live drop-position indicator showing where it will land; the running terminal survives the move (within the same process)
  • Adds renaming a tab by double-clicking it, and a color-swatch picker in its context menu. The picker is keyboard-driven — the cursor keys and the vim motions h/j/k/l walk the swatches, Enter or Space picks the highlighted one, Escape dismisses — and opens on the color the tab already wears
  • Adds the actions SetTabColor and ResetTabColor, so coloring a tab is no longer mouse-only: both appear in the command palette, and either can be bound in input_mapping. SetTabColor opens the tab's color picker, or applies a color outright when given one (for example { mods: [Shift,Control], key: 'R', action: SetTabColor, color: '#ff0000' })
  • Adds configurable layouts: named sets of tabs with per-tab command, working directory, name, color, profile, and split panes; open at startup via default_layout, via --layout NAME, or the LaunchLayout action. SaveLayout writes the current window's tabs back into layouts.yml, prompting for a name when none was given — and is reachable from the command palette, so saving a layout needs no keybinding
  • Adds the dim_unfocused profile option: dims a pane while it is not the focused one (an inactive pane of a split, or any pane of an unfocused window) by blending it toward its background color; 0.0 (default) disables dimming
  • Adds the top-level options tab_bar_position (Top/Bottom) and tab_bar_visibility (Always/Never/Multiple), to place the GUI tab bar at the top or bottom of the window and to hide it entirely or show it only when more than one tab is open
  • BREAKING: tab_bar_position and tab_bar_visibility belong to the top level of contour.yml, not to a profile — a window shows one tab bar whichever profiles its tabs run. If you tried them in a 0.7.0 prerelease, move these two keys out of your profiles: block; a profile-scoped copy is no longer read
  • Adds Ctrl+Tab / Ctrl+Shift+Tab and Ctrl+PageDown / Ctrl+PageUp as tab-switching shortcuts. They reach existing configurations too, and binding them yourself still wins. Note that Ctrl+Tab is now taken from applications that request it through the Kitty keyboard protocol
  • Adds switching tabs with a horizontal mouse wheel tilt or a two-finger trackpad swipe, over the tab strip or the terminal, configurable via the new global tab_switch_on_horizontal_wheel option (default on); an application that requested mouse reporting keeps the horizontal wheel, and the bypass modifier (Shift) switches tabs even then. Also fixes a sideways swipe over the tab bar doing nothing at all on a trackpad
  • Fixes the tab bar placement and visibility settings appearing to do nothing until Contour was restarted

Window and desktop integration

  • Changes the window to use a custom client-side-decorated title bar (tab strip plus window controls) by default on all platforms; set show_title_bar: true to use the native server-side window decoration instead, in which case the tab strip is kept but its window controls defer to the OS frame
  • Adds window_control_style, deciding how the window's minimize/maximize/close buttons are drawn and which side of the tab bar they sit on — until now always Windows-shaped and always on the right, which on macOS is the wrong corner. The default auto follows the host: macOS gets real traffic lights on the left, KDE Plasma gets Breeze's circular hover fills, everything else keeps today's buttons. Set windows, macos or plasma to pin one. Changing it from the settings page applies to every open window at once, without a restart
  • Fixes the window losing its drop shadow on KDE Plasma. Contour's window is frameless by default so its own tab bar can be the title bar, and a frameless window gets no decoration from the system — which is what draws the shadow. The window now publishes a shadow of its own to KWin, on both X11 and Wayland, sized and shaped like Breeze's so it matches the rest of the desktop; window_shadow sets it to None, Small, Medium, Large or VeryLarge. Only KWin can act on this, so on other compositors and window managers it has no effect
  • Fixes the same loss on Windows and macOS, where it also cost the window its rounded corners. Neither goes frameless any more: on Windows the frame is kept and made invisible, so the system draws the shadow and the rounded corners while the tab bar still covers the whole window; on macOS the window stays a normal one whose content simply extends into the title bar, so the shadow, the rounded corners, full-screen, window tabbing and double-click-to-zoom all keep working. On macOS the system's own traffic lights are now used instead of Contour's drawn copies
  • Fixes background blur never turning off again on X11 once it had been switched on, and fixes the window border being drawn dark on Windows regardless of the theme setting
  • Fixes multi-monitor handling: the window no longer re-pins itself to the widest screen on every frame, refresh-rate/DPI tracking follows the window's actual screen after a monitor move, and new windows open on the spawning window's screen
  • Changes a display-scale change (moving to a monitor with a different scale, a late Wayland fractional-scale arrival) to preserve the terminal's columns and lines with a single corrective window resize
  • Changes font zoom to keep the window and pane size fixed and adjust the terminal's columns and lines (and the child PTY size) instead of resizing the window
  • Fixes window resize oscillation/flicker: the terminal no longer fights the window manager by resizing its own window from resize events; the grid floors to the given size (sub-cell remainder renders as padding) while X11/macOS keep WM-side cell snapping via size hints
  • Fixes window spawn flicker: the window is sized from the real font metrics before it is first shown and opens directly in the profile's window state, instead of appearing at a default size and jumping
  • Fixes window sizing on tiling Wayland compositors: a freshly-spawned terminal was mis-sized until a manual resize (#1955), and the window snapped back to the configured terminal_size after a screen or scale change (#1941)
  • Fixes programmatic window resizes (CSI 8 t) shrinking the window by the title-bar height on every call, and CSI 4 t resizing the grid without the window; in split windows both now solve the pane layout so the requesting pane receives its exact grid
  • Fixes the KDE forced-font-DPI override being read from the X11 key in Wayland sessions (now honors forceFontDPIWayland) and no longer re-reads the setting file on every frame
  • Fixes the window padding being computed against the wrong scale when a forced font DPI is configured (KDE's "Force font DPI"), which fitted the grid to a width the window did not have and left the terminal's own idea of where the grid starts disagreeing with where it was drawn

Command palette, settings and menus

  • Adds a command palette (Ctrl+Shift+P): a searchable popup listing every command with its documentation and key binding, making actions that have no binding reachable at all. Recently used commands are pinned on top and remembered across restarts; command_palette_recent_count sets how many (0 disables)
  • Adds a GUI settings page for changing the configuration. Settings are grouped into collapsible sections with a search box over them, and the indicator status line is built visually — a preview of the finished line, one chip per placeholder, and a style sheet exposing every attribute a template can carry, with the raw template still editable as text
  • Adds a right-click context menu to the terminal: copy, paste, select all, the hyperlink under the cursor, opening the current folder, splitting and closing panes, switching profile, and a soft or hard terminal reset. It opens exactly when a selection drag would have worked, so an application that asked for the mouse (vim, tmux) still receives its right-click; hold Shift to open the menu anyway. Bind OpenContextMenu in input_mapping to move it to another button
  • Adds a window menu on right-clicking the empty part of the title bar or tab bar: open a tab (optionally under a named profile), close the current tab or all of them, and switch the tab bar between always visible, auto-hide and hidden
  • Adds ui_style: terminal, which draws the application's own chrome — the tab bar and title bar, and the controls within menus, popups and the settings page — as fixed-size character cells in the terminal font, with square corners and box-drawing separators, so the window reads as one continuous TUI. Tabs keep every affordance they have today: drag to reorder, tear off into a new window, rename, close, context menu and color picker. It is the recommended way to get the terminal look now that a window can hold split panes, where the indicator status line's {Tabs} item draws one tab list per pane instead of one per window. Colors keep following the OS palette and the theme setting; optionally set ui_font_family and ui_font_size, or leave them unset to inherit the default profile's font. Takes effect on the next start
  • Adds a drop shadow to menus, context menus and popups, so they read as floating above the terminal rather than pasted onto it. Under ui_style: terminal it is a hard-edged offset shadow that stays on the character grid
  • Adds a tooltip naming an OSC 8 hyperlink's target when it is hovered, so it can be read before it is followed. A local file:// target is shown as a plain path. Turn it off with hyperlink_hover_tooltip: false
  • Adds Ctrl-click support for opening detected local filesystem paths under the mouse cursor (#1947)
  • Fixes an OSC 8 file:// hyperlink failing to open when the application spelled the host name in full: programs build such a link from gethostname(2), which reports the fully-qualified name on some machines and the short one on others, and Contour accepted only the short form — every other spelling was taken for another machine's file and handed to the desktop as a network location. The short name, the fully-qualified name, localhost and no host at all are now all recognized as this machine, whatever their case, and the host is stripped before the file is opened. A link to a file that carries no host now opens in your $EDITOR like any other, instead of being sent to the desktop
  • Adds a scope parameter to the HintMode action: scope: Scrollback scans the scrollback history as well as the visible page, capped by the new hint_scrollback_lines profile option (default 1000). Its labels are assigned once and stay put, so you can activate hint mode, scroll to older output, and then type the label you see; scope: Visible remains the default
  • Fixes hint mode missing any URL or path that the terminal broke across two rows because the window was too narrow: patterns are now matched against the whole logical line, so such a match is one hint whose highlight follows it across the line break and which yields the complete text rather than the fragment on one row

Accessibility

  • Adds accessibility support: the terminal caret is reported to the operating system, so screen magnifiers (Windows Magnifier, KDE Plasma zoom) and screen readers can follow it; with OSC 133 shell integration the live shell prompt is additionally exposed as its own focusable region
  • Adds a description of the window chrome for screen readers: the tab bar reads as a tab list whose tabs announce themselves as they are switched, the window and tab buttons say what they do instead of naming their glyph, and every settings field carries its own label
  • Adds screen-reader announcements for the bell, desktop notifications and read-only mode, which have no other way to be noticed. Turn them off with accessibility_announcements: false
  • Adds reading the selected text aloud through the operating system's speech synthesizer, from the context menu or with Ctrl+Shift+S. Needs Qt's TextToSpeech module and an installed voice; where either is missing the feature is simply not offered

Daemon mode and remote sessions

  • EXPERIMENTAL: Contour gains a daemon mode. contour daemon hosts shell sessions in a background process so they survive the window showing them, and contour client connects to it as a full Contour window whose tabs mirror the daemon's sessions live — images, hyperlinks and sized text included — starting a daemon on demand if none is running. The daemon speaks tmux's control-mode protocol in both directions, so tmux-aware tooling and the stock tmux binary can attach to it, and contour client --tmux attaches Contour to a real tmux server. A daemon can also be reached over the network with --listen-tcp HOST:PORT, always TLS-encrypted and requiring a preshared token. Works on Linux, macOS and Windows (10 1803+). Built in by default, but experimental: its command-line flags and wire protocol may still change between releases

Keyboard and mouse input

  • Adds Win32 Input Mode (DEC private mode 9001) for native ConPTY keyboard input encoding, fixing keyboard input for applications that request this mode on Windows
  • Adds WheelLeft and WheelRight as bindable mouse buttons in input_mapping
  • Smooths mouse-wheel scrolling: a wheel notch now glides to rest with inertia instead of jumping whole lines, giving the mouse wheel the same smooth feel as a touchpad. Active whenever smooth_scrolling is enabled
  • Fixes mouse-wheel scrolling in alternate-screen pagers such as less, most and man: a wheel notch now scrolls them out of the box (via alternate-scroll, emitting cursor-key presses) even when the pager has not enabled a mouse protocol, matching the behavior of other terminals; DECSET ?1007 works accordingly (#1951)
  • Fixes input_mapping rejecting Ctrl as a modifier name — the very spelling Contour shows in its own menus and command palette — so a binding written with it was silently discarded; Control and Ctrl are now interchangeable, Hyper is bindable at last, and the same names work in bypass_mouse_protocol_modifier and mouse_block_selection_modifier
  • Fixes a single-character key binding only firing when its letter was written in the same case the keyboard happened to report, which left key: 'q' parsing cleanly and then never firing; on macOS this also revived five built-in Ctrl+Alt shortcuts that were dead unless CapsLock was on
  • Fixes an input_mapping entry that fails to parse vanishing without a word — Contour now reports which entry was dropped and which of its fields was at fault
  • Fixes cursor, navigation and function keys sending a bogus modifier parameter while CapsLock or NumLock is active (for example UpArrow emitting ESC[1;65A instead of ESC[A), which broke arrow keys and F-keys in most applications, and fixes XTerm modifyOtherKeys mode 2 reporting plain keys as modified in the same situation, so applications enabling that mode (such as vim) received ESC[27;65;97~ instead of a plain a (#1954)
  • Fixes Vi mode being unusable while CapsLock or NumLock is active: arrows, Home, End, PageUp and PageDown now move the cursor, the search prompt accepts typed characters again, Escape leaves visual mode, and a [count] prefix is parsed. Also fixes DECUDK user-defined keys being suppressed, hint-mode label characters leaking into the running application, and numpad digits never working as a Vi [count] prefix (#1954)
  • Fixes macOS reporting where a key sits on the keyboard where the Kitty keyboard protocol asks which character that key types, so fifteen keys reached the application as an entirely different key — in any program speaking that protocol, fish among them. Ctrl+U arrived as Ctrl+Space, which fish does not bind, so it inserted a space instead of clearing the line; Ctrl+I, Ctrl+P, Ctrl+L, Ctrl+J, Ctrl+K, Ctrl+N, Ctrl+M and the bracket, semicolon, backslash, comma, period, slash and backtick keys were mistranslated the same way. The character is now taken from the keyboard layout that is actually active, so it is also right on a layout other than US ANSI
  • Fixes xterm's CSI > Pp ; Pv m (XTMODKEYS) being read with its resource number in place of its value, so an application asking for modifyOtherKeys level 2 selected level 4 and got nothing. Adds the matching CSI > Ps n for turning a resource back off
  • Fixes the Vi search prompt treating a Meta-modified key as if it were unmodified, so that for example Meta+Backspace deleted a character instead of being ignored
  • Fixes leaving Vi visual mode with Escape also sending that Escape on to the running application
  • Fixes the input-method (IME) candidate window opening at the wrong position: the reported cursor rectangle now honors the configured window margin and the pane's position inside a split, and widens over double-width (CJK) characters

Rendering, fonts and Unicode

  • Improves Unicode width measurement: a grapheme cluster is measured as a whole, so ZWJ sequences, skin-tone modifiers and Indic conjuncts occupy the columns they actually need instead of being sized from their first codepoint. Following terminal-unicode-core, VS16 promotes a cluster to the emoji presentation and may widen it to two columns, while VS15 selects the text presentation without changing the width — a cluster already on screen is never narrowed. Cluster measurement is on by default and can be turned off with DEC mode 2027, which returns width measurement to the classic per-codepoint wcwidth() model
  • Improves font fallback: a character no font in the chain covers is now resolved by asking which installed font actually covers it, rather than giving up at the end of the chain
  • Prefers a monospaced font when falling back, rather than taking whichever font in the chain happens to come first; a proportional font is still used where no monospaced one has the character, so nothing that renders today stops rendering. The strict_spacing setting now genuinely refuses non-monospaced fallbacks, which it previously did not (#1939)
  • Fixes text falling back to the wrong font, and being drawn a cell too far to the left, whenever a run contained a single character the primary font was missing. A prompt such as Claude Code's, where an ornament and a non-breaking space precede the first word, had that whole first word re-shaped in a fallback font. Only the characters the primary font genuinely lacks now fall back, and a glyph can no longer advance the cursor by zero cells (#1939)
  • Fixes a font's weight: and slant: being silently ignored unless spelled exactly one way. The names are now matched without regard to case or separator, so bold, Bold, extra_bold, extra bold and ExtraBold all work — including the CamelCase spellings that contour generate config itself writes, which previously did not load back. The alternate names each weight is also known by (regular, ultralight, semilight, semibold, ultrabold, ultrablack) are accepted too, and a value that still cannot be read is now reported instead of quietly leaving the default in place
  • Deprecates slant: thin. It never named a slant — it reached the table as a copy of the weight list — and continues to mean normal, now with a warning
  • Fixes the terminal reporting a bold-italic font to the application (OSC 50) as merely italic, dropping the weight from the pattern
  • Fixes curly underlines being drawn almost as tall as a lowercase letter and running into the text above them on fonts that declare line spacing, such as the default "monospace" on many Linux systems (#1754), and fixes the other underline styles sitting one row too high, on the baseline itself — the upper stroke of a double underline could be drawn inside the letters, a dotted underline came out as dashes or vanished entirely, and a double underline's strokes were a pixel too thin at even thicknesses
  • Fixes combining marks vanishing from uniformly styled lines: a character written in decomposed form, such as a Greek or Cyrillic letter followed by a combining accent, was drawn as its base letter alone, because the batched rendering path those lines take can only carry one codepoint per column
  • Fixes selecting text changing how wide a glyph is drawn, so that emoji and other multi-codepoint characters no longer gain padding and push the rest of the line to the right when highlighted (#1752)
  • Fixes a tall glyph — a Nerd Font icon, a powerline separator — overwriting a neighbouring glyph in the texture atlas, and no longer shifts such a glyph sideways off its own bearing
  • Fixes characters rendering as other characters, or shrunken and unreadable, on a pane whose size has changed a lot: the glyph cache was built once for the original size, so a window maximized from small, or a pane given most of the tab, could need more slots than it held and glyphs began overwriting each other mid-frame. The cache is now resized along with the page, and splitting no longer builds each pane's cache at the wrong size only to rebuild it immediately (#2040)
  • Fixes a pane rendering blank or partially after a font, font-size or DPI change that reached it while it was not on screen — minimized, occluded, or on another tab. The pane kept shaping text with fonts it had already discarded, and the frame was dropped instead of drawn
  • Fixes the status line and non-displayed pages being drawn against whichever screen was current rather than the one being rendered, which took the cursor row and the cursor colour from the wrong page
  • Fixes searching for text outside Latin-1: a needle such as "Привет" or an emoji drove the case handling through functions that are undefined for those codepoints, which could silently mismatch or abort the terminal. Case is now folded per the Unicode character database, so "smart case" and case-insensitive search work for non-Latin scripts as well
  • Fixes Unicode characters sometimes being wrongly decoded during high-bandwidth output

Images and graphics

  • Adds the kitty graphics protocol (APC G): transmitting, displaying, placing and deleting images, in PNG or raw RGB/RGBA, including chunked transmission
  • Adds the iTerm2 OSC 1337 extensions: the capabilities report and inline images
  • Adds ReGIS vector graphics (DCS p), DEC's VT330/VT340 graphics language: lines, circles, arcs, interpolated curves, filled polygons, shading, text, colour registers with HLS/RGB specs, position reports, the interactive locator, and macrographs. ReGIS is now advertised in the primary Device Attributes (feature 3) and answered by XTSMGRAPHICS
  • EXPERIMENTAL: Adds the Good Image Protocol (GIP) — a DCS-based protocol for displaying raster images with named image pools, LRU eviction, three compositing layers (below/replace/above), configurable resize and alignment policies, Auto/PNG/RGB/RGBA format support with automatic format detection, and DA1 capability advertisement via code 90. The new contour cat command displays an image file through it from the shell (#100)
  • Fixes Contour crashing on a sixel image whose raster attribute declares an extreme pixel aspect ratio — a 30-byte escape sequence in any file, log or command output was enough to take the terminal down, because the ratio was taken straight off the wire and made the guard against writing outside the image wrap around (#2049)
  • Fixes a crash in the sixel parser caused by aspect ratio miscalculation (#1945)
  • Fixes sixel images being squashed vertically on displays taller than about 1530 pixels, which is every 4K panel: an aspect ratio the screen could show perfectly well was capped to a fixed limit. The limit now follows the image canvas, so a larger screen makes full use of the range it can display, and a stated image height can no longer overshoot that canvas

Shell integration

  • Adds OSC 133 prompt marks (A, C and D) to the bundled shell integration, so Contour can tell a prompt apart from a command's output. This is what makes "copy last command output" work; previously those marks were only recorded while the opt-in semantic-block protocol (DEC mode 2034) was enabled, which no shell turns on
  • Adds the actions SelectAll, SoftReset (DECSTR), CopyHyperlink, and CopyLastCommandPrompt, CopyLastCommandOutput and CopyLastCommandBlock for copying the most recently finished command straight from the scrollback
  • Fixes the tcsh shell integration emitting its escape sequences as literal text (tcsh's echo does not understand \e), so working-directory reporting and prompt marks never reached the terminal at all
  • Fixes prompt marks being duplicated when the window is widened and dropped when it is narrowed: a marked line long enough to wrap had its mark copied onto every line the wrap produced, so jump-to-previous-mark and CopyPreviousMarkRange landed on the wrong line after a resize

New VT sequences and protocols

  • Adds the kitty text sizing protocol (OSC 66): text drawn several cells tall and wide, with fractional scales and alignment within the block
  • Adds the kitty pointer shape protocol (OSC 22), so an application can set, push and pop the mouse cursor shape
  • Adds the kitty clipboard protocol (OSC 5522)
  • Adds the ConEmu-style progress indicator (OSC 9;4), already emitted by package managers, build tools and installers and supported by Windows Terminal, iTerm2 and Ghostty. A long-running command's progress now shows as a bar along the bottom of its tab, as the {Progress} status-line placeholder, and on the OS taskbar where there is one; error, paused and indeterminate states are distinguished. It works in daemon mode too, so a client attaching mid-operation adopts the bar already in flight. The indicator persists until the application clears it, as the sequence specifies; set progress_timeout to a number of milliseconds to have Contour withdraw one that stops being updated. Also fixes a bare OSC 9;4 raising a desktop notification whose text was the literal "4"
  • Adds in-band window resize notifications (DEC mode 2048)
  • Adds TERM_PROGRAM and TERM_PROGRAM_VERSION to the environment, so applications can identify the terminal without querying it
  • Adds OSC 52 clipboard read, gated by an opt-in policy
  • Adds the special colors (OSC 5 and OSC 105), makes the highlight colors settable, answers every color query, and parses the whole X11 colour specification grammar
  • Adds the VT525 color-assignment sequences DECAC (Assign Color), DECATC (Alternate Text Color) and DECSTGLT (Select Color Look-Up Table): applications can color the GUI tab from the shell (DECAC item 2, as Windows Terminal does), set the default text colors (DECAC item 1), and — in DECSTGLT alternate-color mode — assign colors to text-attribute combinations such as bold or underline (DECATC) (#1975)
  • Adds xterm's title modes (XTSMTITLE/XTRMTITLE), an icon title, a title stack, and the remaining XTWINOPS window operations
  • Adds 8-bit C1 control support: S7C1T/S8C1T, 8-bit replies under S8C1T, the GR invocation register, and the GL/GR locking shifts
  • Adds KAM, LNM, SRM, VPR, DECBI, DECID, DECTST, DECREQTPARM, XTCHECKSUM, and DECSET 41 (MoreFix), which makes a tab honour a pending wrap
  • Adds DECSCL (Set Conformance Level, CSI Ps1;Ps2"p) — applications can change the terminal's conformance level at runtime, with C1 transmission mode (7-bit/8-bit) support
  • Adds text macros (DECDMAC/DECINVM) — define macros via DCS and invoke them via CSI, with hex encoding support, delete-all, recursion guard, and deferred execution
  • Adds User-Defined Keys (DECUDK) — reprogram function keys F6-F20 with custom strings via DCS, with clear/keep semantics and lock mechanism
  • Adds DRCS (DECDLD) — dynamically redefinable character sets with sixel-like bitmap glyph definitions (backend storage; frontend rendering is pending)
  • Adds the User-Preferred Supplemental Set: DECAUPSS assigns it, DECRQUPSS reports it back, and the SCS designator "<" designates it into a G-set
  • Wires up all NRCS (National Replacement Character Sets) in SCS dispatch: British, Dutch, Finnish, French, FrenchCanadian, German, NorwegianDanish, Spanish, Swedish, Swiss across G0-G3
  • Adds DEC Technical Character Set with full 94-position Unicode mapping (Greek letters, math symbols, bracket pieces, arrows)
  • Adds DEC Locator mouse protocol (DECELR/DECLRP/DECSLE/DECRQLP) — the DEC alternative to xterm mouse tracking, with one-shot mode and configurable event filtering
  • Closes VT level 5 conformance gap (#100): DA1 now honestly reports all implemented extensions

VT conformance and correctness fixes

  • Fixes a numeric parameter of an escape sequence overflowing when the connected program sent more digits than the value could hold; such a parameter is now rejected rather than wrapping to an unrelated number
  • Fixes the left and right margins (DECSLRM) being ignored by carriage return, NEL, CNL, CPL, backspace, autowrap, REP, CBT and vertical scrolling; and fixes scroll-down inside a left/right margin dropping the lines in the middle of the region
  • Fixes the six rectangular-area sequences (DECCRA, DECFRA, DECERA, DECSERA, DECRQCRA, DECSACE) disagreeing on how to read their coordinates: an omitted one-based parameter was stored as zero and then decremented, addressing outside the grid
  • Fixes DECRQCRA (CSI Ps * y) answering the wrong final byte and the wrong checksum, and ignoring origin mode (DECOM)
  • Fixes DECCRA dropping a copy entirely when the request ended in a trailing semicolon, and running past the target page's edge
  • Fixes DECALN (ESC # 8) writing outside the grid once the screen had scrolled
  • Fixes a line feed below the scrolling region walking the cursor off the page, and DECSNLS (CSI Ps * |) resizing the columns instead of the lines
  • Fixes REP (CSI Ps b) dropping a request that omitted its parameter
  • Fixes the cursor not carrying across the alternate-screen switches DECSET 47 and 1047, and maps the 1047 alternate buffer
  • Fixes a 132-column DECCOLM switch surviving a hard reset (RIS), and DECSTR (soft reset) leaving left/right margin mode (DECLRMM) set
  • Fixes VT and FF not honouring linefeed mode (LNM) as LF does, DCH honouring the top/bottom margin, and ED 2 honouring the scroll region
  • Fixes passive mouse tracking (DEC mode 2029) surviving a terminal reset: after RIS the mode read as off while mouse reports still carried its extra parameter, which applications cannot parse, and wheel scrolling on the alternate screen emitted nothing
  • Fixes scrollback preservation for top anchored full width scroll regions
  • Fixes a DCS sequence carrying intermediate bytes after its parameters being misparsed, because the parser dropped those bytes on the way out of the parameter state
  • Fixes numeric capability reporting by XTGETTCAP
  • Improves DECRQM, which now answers for the modes it knows but cannot change, and DECRQSS, which now reports the scroll-region margins one-based, reports DECSACE, and omits default colours from its SGR report
  • Changes DECSCL to erase the screen as a real terminal does, and gates DECRQM and DECSLRM by the conformance level it selects

Stability, performance and startup

  • Fixes Contour taking minutes to open on a desktop whose notification daemon is installed but not running — the case when dunst is disabled, for instance. Each terminal session asked the desktop about notifications synchronously as it was created, and with nothing there to answer, every one of them waited out D-Bus's 25-second reply timeout before any window could appear; a window with several tabs paid it once per tab. Desktop notifications are now sent without ever waiting for a reply, so an absent or wedged notification daemon costs nothing at startup, and can no longer freeze the terminal for the same 25 seconds when a program raises a notification or rings the bell. A notification daemon that starts after Contour did is now picked up too
  • Fixes multi-second shell startup stall when the shell (e.g. fish) queries terminal capabilities before the display is attached — queued replies are now flushed on display attach instead of waiting for the next focus/input event
  • Fixes a hang and a crash on startup when probing the audio device, for profiles that cannot ring an audible bell
  • Improves PTY throughput performance determinism by rewriting the internal grid cell storage
  • Fixes crashes and heap corruption when rapidly changing the font or window size, caused by data races between the UI thread and the Qt Scene Graph render thread; geometry/font changes are now deferred and applied on the render thread (#1922, probably #1712, #408)
  • Fixes Contour aborting when a pane was closed or a tab switched while a frame was being drawn: closing a split pane could take the whole window down, because the drawing thread was reading the session the closing pane had just given up. A tab switch could likewise draw one frame out of two different terminals
  • Fixes a crash when closing a tab, window or split pane, in the moment between the shell exiting and the session being destroyed: the thread watching for that exit was asked to stop but never waited for, and destroying it while it still ran aborted the application
  • Fixes a crash on Windows when opening a new tab, window or split pane while the shell could not be started there — most visibly from a WSL or SSH session, or with a shell such as nushell. Such a spawn now retries in Contour's own directory before falling back to the login shell, and if it still cannot start, the reason is shown in the pane and the pane closes on a key press, rather than taking the whole application down
  • Fixes a crash on Windows when opening a new tab or split from a pane that had reported its working directory over OSC 7 — a remote directory from an SSH session that does not exist locally, or the raw file:// URL handed to CreateProcess() instead of the extracted path. A working directory is now only inherited when it exists on the local machine
  • Fixes a crash, and a possible window freeze, under heavy output on Wayland: the input method's cursor-position queries were answered from the render thread without locking the grid, racing a concurrent resize or reflow
  • Fixes a crash when entering Vi normal mode (Ctrl+Shift+Space) while an application was producing output, most reliably a remote tmux session over SSH. Showing the indicator status line resizes the page, and that reflowed the grid without locking it against the thread writing into it. The same lock was missing from the scroll, selection, search and paste actions
  • Fixes Contour aborting when an application's font request (OSC 50) was approved after the pane it came from had gone away, or after the window had briefly lost its drawing surface — leaving the dialog open across a pane close, a tab switch or a screen change was enough. The approved font is now remembered as that session's own, so it also survives a configuration reload or a tab rebind instead of silently reverting to the profile's font
  • Fixes the built-in SSH client corrupting its own connection when a key was pressed or the window resized during heavy output, which ended the session with "Decrypt failed" or "Out of boundary" and then filled the log with write errors. The connection is no longer driven from two threads at once, and a failed write ends the session instead of being retried forever. Opening two SSH sessions at the same moment also no longer races the SSH library's one-time initialization
  • Fixes an error being logged on every normal shell exit: a pseudo-terminal master reports its last slave closing as EIO, which is end-of-file rather than a failure

Configuration, packaging and build

  • Fixes profile settings that only took effect after a restart: changing background_image, its blur or opacity, the background color, or the scrollbar position now applies as soon as the config is reloaded or the profile is switched
  • Fixes loading of optional fields in the config file (#1940)
  • Fixes CMAKE_BUILD_TYPE=None builds no longer having NDEBUG force-defined, so distribution packagers get a neutral build that keeps assertions and debug symbols intact; the expensive internal terminal-state invariant checks are now gated behind the new CONTOUR_VERIFY_STATE option instead of NDEBUG (#1956)
  • Fixes the statically linked Linux binary failing to build since the RHI-rendered display landed: the static Qt image now ships Qt 6.11.1, as the Qt6GuiPrivate CMake package needed for the RHI headers only exists since Qt 6.9 (#1983)
  • Fixes std::simd feature test for GCC 16 compiler

0.6.3 (2026-04-09)

  • Adds hint mode for keyboard-driven selection of URLs, file paths, git hashes, and IP addresses with configurable actions (Copy, Open, Paste, Select), activatable via key binding or Vi normal mode (gh/gH)
  • Adds auto-scroll when dragging selection past window edges, and Shift+Click to extend existing selections (#1911)
  • Adds pixel-based smooth scrolling via smooth_scrolling profile setting, supporting trackpad pixel deltas, mouse wheel, and keyboard scroll actions
  • Adds natural momentum scrolling for touchpad gestures with configurable falloff via momentum_scrolling profile setting
  • Adds kitty's unscroll extension (CSI n + T) to restore scrolled-off content from scrollback history
  • Adds snap-to-grid window resizing via WM size-increment hints (X11/macOS) and client-side snapping (Wayland, where xdg-shell has no size-increment hint)
  • Adds environment variable expansion (${VAR_NAME} syntax) in configuration file paths for cross-platform config reuse (#1278)
  • Adds configurable font fallback limit (max_fallback_count) with on-demand loading and persistent locate cache for faster font resolution
  • Adds animated cursor movement between grid cells with ease-out interpolation via cursor_motion_animation_duration profile setting
  • Adds configurable crossfade transition between primary and alternate screens via screen_transition and screen_transition_duration profile settings
  • Replaces abrupt cell blink toggle with configurable smooth pulse animation via blink_style profile setting (classic/smooth/linger)
  • Adds configurable text outline rendering to improve glyph readability on transparent or low-opacity backgrounds (#1895)
  • Adds pixel-perfect builtin rendering for mathematical bracket and symbol characters (U+239B–U+23B3), including parenthesis pieces, curly bracket pieces, integral extensions, horizontal line extension, bracket sections, and summation symbols
  • Adds pixel-perfect builtin rendering for shade characters (U+2591–U+2593): light shade, medium shade, and dark shade
  • Adds Kitty OSC 99 desktop notification protocol with D-Bus backend on Linux, supporting structured metadata, chunked payloads, base64 encoding, urgency levels, display occasion filtering, bidirectional close/activation events, and query/alive responses
  • Adds DEC VT420 multi-page support with 16 pages, navigable via NP (CSI Pn U), PP (CSI Pn V), PPA (CSI Pn SP P), PPR (CSI Pn SP Q), and PPB (CSI Pn SP R) sequences
  • Adds DECPCCM (DEC mode 64) page cursor coupling mode to control whether the displayed page follows the cursor page
  • Adds DECRQDE (CSI " v) display extent report for querying page dimensions and current page number
  • Adds cross-page DECCRA (Copy Rectangular Area) support for copying cell content and attributes between pages
  • Adds complete DECCIR (Cursor Information Report) response including character set designations, GL/GR mappings, and wrap-pending state (#97)
  • Adds DECNKM (DEC mode 66, VT320) to toggle numeric keypad between application and numeric mode via CSI ? 66 h / CSI ? 66 l
  • Adds DECARM (DEC mode 8, VT100) to enable/disable keyboard auto-repeat via CSI ? 8 h / CSI ? 8 l
  • Adds DECBKM (DEC mode 67, VT340) to toggle Backspace key between BS (0x08) and DEL (0x7F) via CSI ? 67 h / CSI ? 67 l
  • Fixes crash when rendering oversized non-RGBA glyphs (e.g. Nerd Font icons in JetBrainsMono) by extending glyph scaling to all bitmap formats (#1893)
  • Fixes keyboard input being swallowed in programs like less and bat due to empty-string terminfo capabilities (#1861)
  • Fixes ESC key not being sent to the application when CancelSelection input mapping has no mode restriction (#1839)
  • Fixes F3 key not reaching PTY applications when a keybinding matches but its action does not execute, by falling through to the terminal instead of silently consuming the key event
  • Fixes F3/Shift+F3 search navigation keybindings firing in any mode instead of only when Search mode is active
  • Fixes numpad keys not producing digits when NumLock is ON, especially on Wayland where native modifier detection is unreliable (#1901)
  • Fixes modifier-only key presses (Shift, Ctrl, Alt, etc.) incorrectly scrolling the viewport to the bottom when Kitty keyboard protocol ReportAllKeysAsEscapeCodes is enabled
  • Fixes Home/End key encoding in Kitty keyboard protocol (extended keyboard input generator)
  • Fixes Kitty keyboard protocol: F1-F4 CSI u key codes, legacy F1-F4 modifier encoding, CSI u gating for ReportEventTypes and ReportAllKeys flags, lock modifier handling, and Press event type suppression
  • Fixes Kitty keyboard protocol: proper CapsLock/NumLock modifier reporting, correct modifier encoding per spec, and Unicode case folding for non-ASCII characters
  • Fixes tab characters (HT) intermittently lost in terminal output due to bulk text parser skipping trailing C0 controls and tab cursor movement not filling intermediate cells with spaces (#1876)
  • Fixes text rendering artifacts and corruption when rapidly outputting content
  • Fixes garbled or missing characters when displaying Unicode text
  • Fixes REP (repeat character) VT sequence being silently discarded when preceded by text processed via the parser's bulk text fast path, causing visual gaps in ncurses applications like htop
  • Fixes glyph scaling and vertical centering of colored emoji
  • Fixes Sixel images not rendering on non-first tabs
  • Fixes selective erase (DECSED/DECSEL) incorrectly erasing the cursor line instead of the target line when erasing lines without protected characters (#28)
  • Fixes Insert Replace Mode (IRM, CSI 4 h) not shifting text right on character insertion (#1877)
  • Fixes DECXCPR (Extended Cursor Position Report) to report the correct page number instead of hardcoded page 1
  • Fixes terminal shrinking/growing on tab switch when status line is displayed
  • Fixes WINDOWMANIP cell-based resize (CSI 8;rows;cols t) gaining columns at non-integer content scale
  • Fixes initial terminal window size being wrong at fractional DPR (e.g. 127×29 instead of configured 130×30 at 150% scaling on Wayland, #1858)
  • Fixes initial font sizing at fractional DPR on Wayland by preferring screen DPR over window DPR
  • Fixes ~2s startup delay caused by synchronous Qt multimedia driver probing by deferring audio initialization to a background thread
  • Fixes build failure on Alpine Linux (musl libc) due to missing close_range() function (#1879)
  • Fixes third-party dependency files (headers, libraries) leaking into install tree (#1788)
  • Fixes size of the window when using tiling WM (#1908)
  • Fixes missing kitty keyboard protocol release events (#1924)
  • Fixes terminfo colors capability (32767 → 256) so Midnight Commander and other S-Lang applications correctly detect 256-color support

0.6.2 (2026-01-07)

  • Security: Fixed Out-of-Bounds Write in SequenceParameterBuilder (CWE-787)
  • Security: Fixed SSH Trust-On-First-Use (TOFU) vulnerability (CWE-295) with interactive host key verification
  • Security: Fixed potential Integer Overflow in parameter parsing (CWE-190)
  • Security: Fixed sensitive data exposure in debug logs (CWE-532)
  • Fixes insert mode / default status line colorscheme loading (#1737)
  • Fixes CancelSelection default binding with escape (#1710)
  • Fixes CreateTab to sometimes spawn more than one tab (#1695)
  • Fixes crash using Chinese IME (#1707)
  • Fixes NumLock key handling (#1713)
  • Fixes handling of multiple windows and tabs (#1725)
  • Fixes crash on scaling down some symbols during font size change
  • Fixes mouse scrolling speed being too slow
  • Fixes crash in vi normal mode when using y0 (#1801)
  • Fixes empty history jump (#1781)
  • Fixes double line box drawing characters
  • Fixes DECRQM (DEC Request Mode) response (#1797)
  • Fixes Precondition failure when rendering vertically overflowing glyphs (#1805)
  • Fixes fish-shell keyboard input protocol behavior; acting as if it would be broken on e.g. control keys (weird handling of CSIu input protocol)
  • Fixes ssh.known_hosts configuration loading incorrectly mapping to ssh.public_key_file
  • Fixes option_as_alt configuration option not working (#1812)
  • Fixes assertion when displaying Sixel images
  • Fixes Sixel image scaling to respect the grid cell size (including font resize related glitches)
  • Fixes Blur support on Windows 11
  • Fixes Sixel image regression
  • Enables customizing predefined color palette (#1763)
  • Enables Sixel support on Windows
  • Ensure inserting new tabs happens right next to the currently active tab (#1695)
  • Allow glyphs to underflow if they are not bigger than the cell size (#1603)
  • Adds contour.exe to system search path on Windows during installation
  • Adds MoveTabToLeft and MoveTabToRight actions to move tabs around (#1695)
  • Adds MoveTabTo action to move tabs to a specific position (#1695)
  • Adds handling of control codes for Ctrl+5|6|7|8 (#1701)
  • Adds CenterCursor (zz) vi motion
  • Adds ability to name tabs (#1690)
  • Adds dynamic loading of conpty.dll to allow mouse mode on Windows 10
  • Adds git graph drawing glyphs
  • Adds new arc style for box drawing characters
  • Adds multiple rendering options for braille characters
  • Adds configuration action ToggleInputMethodHandling to allow toggling IME (Input Method Editor) handling (#1813)
  • Adds configuration option input_method_editor to profile settings to opt-out of IME (Input Method Editor) support (#1817)
  • Adds background blur support for KDE Plasma on Wayland (for Qt 6.5.0 and newer)
  • Adds VT sequences for double width / double height lines, DECDHL, DECDWL, DECSWL (#137)
  • Adds VT sequence extension OSC 133 shell integration (#793)
  • Adds support for rendering COLRv1 fonts (e.g. new Google Noto Color Emoji)
  • Drop Qt5 support

0.6.1 (2024-12-31)

  • Do not abort when failing to create XDG_STATE_HOME/contour/crash directory
  • Fixes DECRQSS for SGR (#1696)
  • Fixes tab switch crash after resize
  • Fixes tab shrinking after tab creation/switches when a non-zero horizontal window margin is configured
  • Fixes startup crash when window is not yet fully initialized
  • Fixes backtab (Shift+Tab) handling (#1685)
  • Fixes various spelling typos across the codebase (#1688)
  • Improve tab close handling to better select previously focused tab
  • Change colors terminfo entry from 256 up to 32767 colors
  • Add action SwitchToPreviousTab to switch to the previously focused tab

0.6.0 (2024-12-26)

  • Fixes search editor preservation bug on exit from search mode
  • Expose current profile's name through env var CONTOUR_PROFILE (#1637)
  • Add terminal tabs (#90)
  • Add SaveScreenshot and CopyScreenshot action (#210)
  • Protect user from accidentally pasting too large input (#1198)
  • Add binding to exit normal mode with Esc (#1604)
  • Add config option to switch into insert mode after yank (#1604)
  • Add vi-like normal mode Jumps. '', C-O and C-I motions (#1101)
  • Improves window size/resize handling on HiDPI monitor settings (#1628)
  • Improves macOS key handling for Option+Left|Right keys to jump between words in the shell
  • Fixes cropping of underscore character for some fonts (#1603)
  • Fixes DECFRA limits (#1664)
  • Fixes underline styles not being reset on switching to a new style (#1365)

0.5.1 (2024-09-30)

  • Fixes vi-mode motions like viW, yiW, oiW as well as B and W
  • Fixes rendered backend loading from config
  • Fixes mouse wheel scrolling on High-DPI screens feeling too slow
  • Enable support for Unicode version 16.0.0 (#1606)
  • Port to C++20's std::format() (#1598)
  • Drop support for Ubuntu 23.10 and older. In order to have less burdain of maintencne, we only support the latest LTS of Ubuntu, which currently is 24.04 (#1607)

0.5.0 (2024-09-18)

  • macOS package is now Apple Silicon native
  • Add CoreText font fallback implementation for macOS (#1533)
  • Add Ubuntu-24.04 in github actions (#1460)
  • Add 'early_exit_threshold' config option (#1460)
  • Add AppImage package with Qt6 support (#586)
  • Add ability to customize the indicator statusline through configuration (#687)
  • Add generation of config file from internal state (#1282)
  • Add SGRSAVE and SGRRESTORE VT sequences to save and restore SGR state (They intentionally conflict with XTPUSHSGR and XTPOPSGR)
  • Add extended word selection feature (#1023)
  • Add some more missing vi input motions, such as y$, o$, and many others as initiated by y and o (#1441)
  • Add CPM fallback for the dependencies
  • Add static build
  • Add shell integration for bash shell.
  • Add better bell sound (#1378)
  • Add config entry to configure behavior on exit from search mode
  • Add config entry to configure font fallback (#225)
  • Add handling of different input commands (#629)
  • Add key bindings disabled indicator for status line (#783)
  • Add support for highlighting matches of the currently selected text area (beyond double click)
  • When switching to normal mode screen will stay in same position (#808)
  • Add customizable per-input-mode default text/background coloring for indicator statusline (#1528)
  • Add option PasteSelection to paste text as a shell input (#1549)
  • Add case-insensitive smart search (#1410)
  • Add OpenBSD support
  • Add new CLI command: contour info config to list missing entries from config file (#1125).
  • Add xdg-terminal-exec support (#1570).
  • Add predefined color palettes (monokai, gruvbox-light/dark, solarized-light/dark, papercolor-light/dark, one-light, one-dark) (#1285).
  • Update of contour.desktop file (#1423)
  • Changed configuration entry values for font_locator down to native and mock only (#1538).
  • Do not export the TERM environment variable on Windows OS (when using ConPTY).
  • Fixes line corruption after resize (#883)
  • Fixes resize of trivial line (#916)
  • Fixes copying of wrapped line
  • Fixes deletion of spaces on resize
  • Fixes forwarding of input while in normal mode (#1468)
  • Fixes OSC-8 link id collision (#1499)
  • Fixed overlap of glyphs for long codepoints (#1349)
  • Fixed too verbose info during ssh session login (#1447)
  • Fixes corruption of sixel image on high resolution (#1049)
  • Fixes bad wording of OS/X to macOS (#1462)
  • Fixes key bindings and search prompt collision (#1472)
  • Fixes CSI 8 ; (COLS) ; (ROWS) t to resize the terminal with respect to High-DPI
  • Fixes screen sampling with multiple monitors (#940)
  • Fixes bell sound in spawned window in same process (#1515)
  • Fixes status line crush (#1511)
  • Fixes application window icon on (KDE) Wayland
  • Fixes missing keymapping for numpad (#1325)
  • Improves handling of constant bell sound spawning
  • Fixes yW (yank WORD) not working properly in normal mode (#1448)
  • Fixes key mapping Shift+Tab (#1578)

0.4.3 (2024-02-04)

  • Fixes dead lock bug on mouse selection.

0.4.2 (2024-02-03)

  • Fixes Windows alt/control key modifiers (#1408).
  • Fixes Windows built accidentally not including builtin-SSH support (#1427).
  • Fixes some text run segmentation problems, e.g., not making use of some programming ligatures (#395).
  • Fixes mouse scroll wheel events going into the wrong direction if Alt modifier was pressed at the same time (#394).
  • Fixes scripts/install-deps.sh for openSuSE (Tumbleweed) to install the correct dependencies.
  • Fixes missing dependencies for release .deb packages (#1397).
  • Fixes legacy keyboard input protocol not reporting non-Alt modifier (#1411).
  • Fixes thread safety issue on mouse move event handling (#1444).
  • Digitally sign MacOS release binaries using a valid Apple ID.
  • Add support for authenticating to SSH servers with a private key without a password and without requesting for one - also allow password retry (#1425).
  • Default history limit is now 1000 lines rather than 0 lines.

0.4.1 (2023-12-31)

  • Fixes fast scrolling when using trackpad (#1360)
  • Fixes variable fonts loading
  • Fixes Command modifier for input mappings, such as Command+C or Command+V on on MacOS (#1379).
  • Fixes CSIu encoding of shift modifier produced characters (#1373).
  • Fixes screen destruction on sibling cells when overwriting wide characters, such as Emoji, Kanji, etc.
  • Changes VT sequence DECSCUSR (CSI ? 0 SP q and CSI ? SP q) to reset to user-configured cursor style (#1377).
  • Remove contour-latest terminfo file. Please use contour terminfo instead.
  • Adds Command as modifier to input mappings on MacOS to work along with Meta for convenience reasons (#1379).
  • Adds config option profiles.*.margins to allow customizing the horizontal / vertical margins (#1384).
  • Adds config option for colorscheme default.bright_foreground and default.dimmed_foreground to configure bright and dimmed default foreground text respectively (#1383).

0.4.0 (2023-12-19)

  • Fixes GUI terminating on idle input in some conditions.
  • Fixes search term rendering highlighting for search terms containing whitespaces (#966).
  • Fixes rendering in cases of glyphs with inverted orientation (#1115).
  • Fixes Emoji rendering being too small on macOS (#1215)
  • Fixes config option show_title_bar (#1153)
  • Fixes VT sequence DECSTBM and DECSLRM defaulting parameters (#1164).
  • Fixes VT sequence DECFRA (#1189).
  • Fixes VT sequence DECSCPP and DECCOLM (#1205).
  • Fixes VT sequence DECALN to properly reset margins when statusline is shown
  • Fixes VT sequence ED (CSI J) when statusline is shown.
  • Fixes VT sequence SM ?1003 (Any Event mouse tracking) not reporting mouse move events.
  • Fixes VT sequence XTWINOPS (CSI 22 t and CSI 23 t) to not assert and terminate the terminal but default to missing parameter 0 instead (#1369).
  • Fixes VT sequences CUU/CUD/CUF/CUB to better respect margins (#1201)
  • Fixes printing over 2nd cell of a wide character should delete wide character (#1268)
  • Fixes URI re-encoding of local files in OSC 8 (#1199)
  • Fixes LCD subpixel rendering for overly wide US-ASCII glyphs (#1022)
  • Fixes alive process when GUI is closed
  • Fixes vi mode f action freeze on last line
  • Fixes AltGr handling on Windows (#150)
  • Fixes rarely happening bad access to GPU texture atlas (#1309)
  • Fixes terminal session not being terminated when the process terminated, but the PTY handle was still open (e.g. by other processes).
  • Fixes setting window class (app_id) on Wayland (#1336)
  • Fixes screen margins not being shared across primary and alt screen, as it should be.
  • Do not clear search term when entering search editor again.
  • Clear search term when switch to insert vi mode (#1135)
  • Delete dpi_scale entry in configuration (#1137)
  • Removes the ability to inline colorschemes within a configuration profile. Colorschemes must now always be referenced by their name.
  • Moves the vi-like cursor with the viewport when scrolling up/down.
  • Adds normal mode motion Ctrl+e and Ctrl+y to vertically move the viewport.
  • Adds the ability to chose a color scheme based on the operating systems's dark/light mode setting. This will change live whenever the OS's dark/light mode setting changes as well (#604).
  • Adds VT sequence DECSSCLS (change scroll speed) and properly handle DECSCLM (enable slow scrolling mode) (#1204)
  • Adds VT sequence parameter ?996 to DSR to request a report of current color scheme dark/light mode hint.
  • Adds VT sequence SM ?2031 and RM ?2031 to enable/disable unsolicited DSR for color scheme updates by the user or OS.
  • Adds support the extended CSIu keyboard protocol to better report key modifiers.
  • Adds extended keyboard protocol support (CSI u) to better report key modifiers.
  • Adds support for horizontal mouse scrolling event reporting sequences.
  • Adds percentage value to Indicator Statusline to indicate scroll offset in scrollback buffer.
  • Adds inheritance of profiles in configuration file based on default profile (#1063).
  • Adds config option profiles.*.bell to adjust BEL behavior (#1348) and fixes (#1162) and (#1163).
  • Adds config option profiles.*.frozen_dec_modes to permanently enable/disable certain DEC modes.
  • Adds config option profiles.*.option_as_meta to allow remapping Option key to Alt on MacOS.
  • Adds config option profiles.*.ssh to allow connecting to an SSH server directly from Contour.
  • Adds capital A and I keys to switch from normal mode back to insert mode, too.
  • Adds size indicator window on resize (#1203).
  • Adds config entry profile.*.size_indicator_on_resize to control size indicator on resize and makes resize indicator small.
  • Adds OpenSelection action, and honor case in the configuration bindings
  • Adds open resource (URL, local file) feature also to vi mode.
  • Adds configurable window alerts on terminal bells.

0.3.12 (2023-05-29)

  • Fixes terminfo tsl to how todays apps are using it (e.g. zsh) to simply set the window title.
  • Fixes selecting a single character not working easily (#1066).
  • Fixes cycling between different selection modes (by speed-clicking) not properly working.
  • Fixes tcsh shell integration not working (#1074).
  • Fixes [count]w ignoring the [count] parameter in modal mode.
  • Fixes statusline being misplaced after resize when being in alt screen (#1091).
  • Fixes hyperlinks with IDs (#1088)
  • Fixes hyperlink highlight when screen has been scrolled (#1084)
  • Fixes cursor shape changes when entering vi-like normal mode or visual mode.
  • Improves mouse selection to be more natural extending into new grid cells.
  • Modal mode: Improves how [m jumps from the current prompt to the next prompt above it.
  • Adds profiles.*.permissions.display_host_writable_statusline to allow the user to intervene in DECSSDT 2 VT sequence to show the host writable statusline.
  • Adds config entry input_method_editor colorscheme key to allow customization of the IME (input method editor) region (#1058).
  • Adds gui.shader log option for the output of shader configuration procedure (#715).
  • Adds config entry profiles.*.status_line.position to change statusline position to be either bottom (default) or top.
  • Adds config entry profiles.*.status_line.sync_to_window_title to synchronize the window title with the host writable statusline (if it was denied to be shown).
  • Linux: Adds support for writing to utmp/wtmp.
  • Extends ViNormalMode to toggle between insert and normal mode rather than just entering normal mode.
  • Modal mode: Adds Return key to also move the cursor down (like vim).
  • Model mode: Adds text object im and am to select the range between two line marks.
  • Model mode: Adds handling of Home and End keys (#1098).

0.3.11 (2023-03-01)

  • Fixes normal mode motion J and K that got accidentally unimplemented and make it also available to visual mode.
  • Fixes use of config bypass_mouse_protocol_modifier that was ignored.
  • Fixes abnormal termination on incomplete foreground/background color-pair specification.
  • Fixes SendChars input acion to actually send the chars as-is to the standard input of the connected application.
  • Fixes mouse selection to only be initiated if actually meant to, i.e. in alt screen mode only if bypass-modifier was pressed (#1017).
  • Fixes mouse selection within scrolloff setting to not cause the viewport to jump anymore (#1019).
  • Fixes rendering sixel image when status line is active (#1050).
  • Adds normal mode motion [[, ]], [], ][ mimicking exactly what vim does.
  • Adds normal mode motion [m and ]m to jump line marks up/down.
  • Adds normal mode motion mm to toggle the line mark at the current active cursor position.
  • Adds normal mode motion t{char}, T{char}, f{char}, F{char}, ;, , to move cursor in line till before/after or to given {char}.
  • Adds config entry vi_mode_highlight to color palette to highlight current cursor's line when not in insert mode (aka. in Vi-mode).
  • Adds shell integration for fish shell.
  • Adds shell integration for tcsh shell.
  • Improve performance of parsing UTF-8 text on ARM64 platforms through the use SIMD instructions.
  • Contour can now run on platforms not supporting hardware crypto extension for ARM64 nor AES-NI for x86-64. Hardware acceleration support can be configured to be included at compile time.
  • Fixes scroll up when infinite history limit is set

0.3.10 (2023-01-22)

  • Fixes initial_working_directory setting being ignored (#946).
  • Fixes background image being accidentally inverted (Bug introduced in 0.3.3.204).
  • Fixes crash in some corner cases of too small fonts (#949).
  • Fixes linefeed not inheriting graphics attributes when scrolling up to create a new line (#945).
  • Fixes normal mode's motion [count]| that was off by one.
  • Fixes switching to normal mode sometimes placing the vi cursor wrong.
  • Fixes vi-like normal mode's word motions w, e, and b to better emulate vim's behavior.
  • Fixes copying text to clipboard stripping TAB-character generated spaces (#982).
  • Fixes BEL's audio feedback not working on some platform by streamlineing the behavior with a custom bell sound.
  • Adds new config option word_highlight_current and word_highlight_other to better distinguish between double-click initiated word highlights and actual searches / selections.
  • Adds trace mode to single-step through each VT sequence. New actions: TraceEnter, TraceLeave, TraceStep, TraceBreakAtEmptyQueue and new mode flag Trace.
  • Adds implementation for SO and SI control codes.
  • Adds ability to explicitly disable a font feature by prefixing the feature with a -, such as -calt, explicitly enabling via + prefix was added as well.
  • Adds terminal capability hs and es to improve status-line feature detection via terminfo.
  • Adds normal mode motion: B, B, E.
  • Adds support for mouse in normal mode for selection and normal-mode's cursor placement.
  • Changes terminfo entries tsl, fsl and dsl to make use of the host-writable statusline.
  • Improvements to text objects in vi-like normal mode (i), a), i>, a>, i], a], i}, a}).
  • Improvements to vi-like normal mode: yank-motions (yw, y$, etc).
  • Improvements to vi-like normal mode: support nested matching pairs, such as {, ( etc in text objects.
  • Improvements to vi-like normal mode: Add % motion to jump to matching symbol pairs.
  • Improvements to vi-like normal mode: Add M motion to jump to middle screen line (same column).
  • Improvements to vi-like normal mode: Add P to paste the clipboard with newlines stripped.
  • Improvements to vi-like normal mode: Add SP and BS to move left/right.

0.3.9 (2022-12-24)

  • Fixes statusline clock to show the correct local time.
  • Fixes running within OpenGL/ES context.
  • Fixes failing startup due to background_image.path pointing to a non-existing file (#928).
  • Fixes terminfo entries Se, and adds missing entries Rmol, Sync (#936).
  • Fixes rendering glitches (reverting PR #918 until a better solution has been found).
  • Fixes loading TTC (TrueType Collection) font files not honor which face to load within the collection (#939).
  • Adds config entry mouse.hide_while_typing to specify mouse behavior while typing whether hide it or not.
  • Adds config entry indicator_statusline_inactive colorscheme key to colorize the status line differently when the terminal is currently not in focus.

0.3.8 (2022-12-18)

  • Fixes restoring the cursor visibility after leaving alternate screen when application wasn't restoring mode switches in reverse order.
  • Fixes country flags rendering due to misleading grapheme cluster segmentation in corner cases.
  • Fixes mouse reporting in primary screen when viewport has been scrolled into the scrollback area.
  • Fixes VT sequence DECSTR (soft reset) to not move the cursor to home position.
  • Fixes cursor movements for the vi-like cursor (normal mode).
  • Fixes Alt+Backspace on macOS.
  • Fixes default config entry profiles.*.draw_bold_text_with_bright_colors (it was renamed from profiles.*.bold_is_bright). Please rename this in your existing configuration if not done yet.
  • Fixes sometimes rendering two cursors when statusline is shown.
  • Fixes normal mode's page top (S-H)/ page bottom (S-L) cursor movements to respect scroll offset.
  • Fixes VT sequences RIS and action ClearHistoryAndReset when statusline is shown.
  • Fixes cursor going beyond the terminal screen in vim mode, move right motion (#917).
  • Fixes selection while statusline is shown. (#910)
  • Improves hard-reset (RIS) to restore initial statusline state.
  • Improves $ motion in vi-like normal mode to point to the last non-empty grid cell in the current line instead of the right page margin.
  • Vi Mode search can handle line wrapping and searchText larger than line length (#869) (#870).
  • Adds ability to highlight same words on double click via profile.*.highlight_word_and_matches_on_double_click.
  • Adds color scheme key indicator_statusline.foreground and indicator_statusline.background to customize indicator statusline colors.
  • Adds clock to indicator status line.
  • Adds current viewport position in scrollback buffer to indicator status line.
  • Adds optional parameter strip to PasteClipboard configuration action to allow stripping newlines and normalizing whitespaces.
  • EXPERIMENTAL: Adds VT extension to enable passive mouse tracking via CSI ? 2029 h / CSI ? 2029 l. Passive mouse tracking enables the application to get notified on mouse events while still allowing mouse selection.
  • EXPERIMENTAL: Adds VT extension to enable text selection tracking via CSI ? 2030 h / CSI ? 2030 l.

0.3.7 (2022-11-01)

  • Fixes display of non-insert mode (vi-like) cursor on monochrome lines.
  • Fixes cursor movements on wide characters for the vi-like cursor.
  • Fixes TERM value resolving in Flatpak environment when not escaping the sandbox.

0.3.6 (2022-10-30)

  • Fixes ground-state infinite loop in corner case + refactor and tiny optimization.
  • Fixes assertion in optimized bulk text processing.
  • Fixes rare displacement of characters following a wide character (e.g. Emoji) in some cases.
  • Fixes IME (input method editor) background rendering for wide characters (e.g. Kanji).
  • Fixes escape_sandbox config option that wasn't set to true by default as documented.
  • Improve throughput performance for scroll-up when custom vertical margins are in effect.
  • Improve rendering performance slightly for so called trivial lines.
  • Adds menu entry to Dolphin file manager to open Contour at current working directory.

0.3.5 (2022-10-21)

  • Fixes a problem with oversized glyphs being wrongly cut off (#821).
  • Fixes Sixel handling of non-standard aspect ratio (#827).
  • Fixes Sixel mode, when updating the color palette with a new color, that color must also be used for subsequent paints.
  • Fixes vertical cursor movement for Sixel graphics with only newlines (#822).
  • Fixes Sixel rendering for images with aspect ratios other than 1:1.
  • Fixes Sixel rendering for images that show below but should be rendered above text (#831).
  • Fixes cursor highlight in VI mode
  • Removes images.sixel_cursor_conformance config option.
  • Adds VT sequence DECSCA, DECSEL, DECSED and DECSERA to support protected grid areas during erase operations (#29, #30, #31).
  • Improve Input Method (IME) handling, visualizing preedit-text.
  • Improve throughput performance of arbitrary complex Unicode.
  • Update Unicode data to version 15.0.0 (release). See Announcing The Unicode® Standard, Version 15.0.0.

0.3.4 (2022-09-13)

  • Fixes selection magically deselecting when indicator status line was shown and the top page line was selected.
  • Fixes interpretation of VT sequence DECSDM to disable Sixel auto-scrolling, if enabled.
  • Fixes visibility of the cursor in some situation when blending too much into the background color.
  • Fixes dim/faint coloring to not affect background and default text coloring when feint SGR attribute is set (#786).
  • Fixes SGR 9 (crossed out) and 53 (overline) to both look like underline.
  • Fixes size of drawn sixel image if no size is given beforehand (#809).
  • Fixes glyph rendering for some unexpectedly oversized glyphs (#423).
  • Adds line#24 to terminfo file for backwards compatibility.
  • Adds configuration key live_config to determine whether or not to reload running terminal instances on every config file change.
  • Adds DEC-mode 2027 for enabling/discovering Unicode support as per draft specification (Terminal Unicode Core).
  • Adds CreateDebugDump action to dump terminal state for debugging purposes.
  • [Flatpak] Adds configuration key profiles.*.escape_sandbox to decide whether or not to escape the sandbox.
  • [Packaging] Adding AppImage files to Github release page and CI artifacts and bump Ubuntu packages using Ubuntu 22.04 LTS
  • [Linux] Changes context menu icon for "Run in Contour" action to be the Contour logo.
  • Improve startup-time by not pre-rasterizing all printable US-ASCII codepoints at once.

0.3.3.204 (2022-08-30)

  • Fixes a screen buffer manipulation bug that may happen on non-stylyzed but interactive command prompts (#787).
  • Fixes viewport misalignment when in scrollback area white new lines are being added to the main page area.
  • Fixes logging file toggle.
  • Adds VT sequence CSI 5m (blink) and CSI 6m (rapid blink).
  • Adds vim-like scrolloff feature to normal mode cursor movements to ensure a line padding when scrolling up/down.
  • Adds vim-like incremental search functionality with realtime highlighting and cycling through the matches.
  • Adds ability to initiate search via configuration action SearchReverse in input mappings.
  • Adds ability to cancel highlighted search terms via configuration action NoSearchHighlight in input mappings.
  • Adds input mapping mode Search to conditionally enable input mapping when a search term is present.
  • Adds support for HSL colorspace in Sixel images.
  • Adds configuration key colorscheme.*.search_highlight for coloring search matches.
  • Adds configuration key colorscheme.*.search_highlight_focused for coloring the active search match, containing the cursor.
  • Adds alpha value to colorscheme.*.vi_mode_highlight color configuration.
  • Adds VT sequence for ANSI mode NLM (NewLine Mode).
  • Always show indicator status line when ANSI mode KAM is enabled (which can be toggled via action ToggleInputProtection).
  • Always show indicator status line when in non-insert mode.
  • [Linux] Changes the .desktop file name and icon file name to conform to the flatpak recommendations.
  • [Linux] Provide an AppStream XML file.
  • [Linux] Drop KDE/KWin dependency on the binary by implementing enabling blur-behind background manually.
  • [Linux] Adds support for blur-behind window on GNOME shell.
  • [Flatpak] Also pass stdout-fastpipe (3) to shell.
  • [Flatpak] Do not set controlling terminal in order to allow TTY abilities like Ctrl+C. This seems to be a known bug in flatpak.
  • [Flatpak] Exposes TERMINFO environment variable pointing to a valid path containing the contour terminfo file.
  • Changes behavior of PTY (and shell process) creation until only when a PTY is required by the terminal emulator during instantiation, possibly avoiding problems with xdotool running too early.
  • Internal: Y-axis inverted to match GUI coordinate systems where (0, 0) is top left rather than bottom left.

0.3.2.202 (2022-07-07)

  • Fixes writing to a non-empty line sometimes destroying the contents of that line (#702).
  • Fixes underline decoration for wide character cells.
  • Fixes SGR 8 (Conceal/Hidden) attribute doesn't work as expected (#699).
  • Fixes Synchronized Updates (SM/RM ? 2026) sometimes lagging behind in rendering.
  • Fixes SGR and text breakage when altering charsets via ESC ( 0 VT sequence (#661).
  • Fixes SEGV when closing the terminal via GUI close button.
  • Fixes scrolling in alt-screen.
  • Fixes VT sequence for setting indexed color from palette.
  • Fixes some config false positives error messages.
  • Fixes command line arguments parser handling of -- for switching to verbatim mode (#670).
  • Fixes rendering of U+E0B2  in pixel-perfect box drawing mode (#707).
  • Fixes rendering of cursor sometimes being almost invisible when foreground and background colors are similar/equal (#691).
  • Fixes line based selection sometimes not selecting the full line when wrapped over multiple lines.
  • Fixes warning message on terminal's console output when enabling blurred background images.
  • Fixes Win32 command output: Attaches to parent console if present, so typing contour help in a terminal actually shows something.
  • Changes XTSMGRAPHICS to match implementation of xterm exactly when querying sixel image limits, to be capped at terminal viewport dimensions (#656).
  • Changes CLI syntax for contour parser-table to contour generate parser-table.
  • Implements UTF-8 encoded mouse transport (CSI ? 1005 h)
  • Modal mode: Improved vi-like input modes.
  • Modal mode: Fixed the text cursor not being visible during selection.
  • Modal mode: Don't leak but actually support cursor keys up/down/left/right/page-up/page-down.
  • Modal mode: Added vip, vap (and yip / yap) motions.
  • Modal mode: Adds ^ motion.
  • Modal mode: When being in normal mode, pressing a also puts you back to insert mode.
  • Modal mode: Properly show cursor if it was hidden in insert mode and restore visibility & shape when going back to insert mode.
  • Modal mode: Shift+K and Shift+J don't just move the cursor up/down but also move the terminal's viewport respectively (inspired by tmux).
  • Modal mode: Shift+H and Shift+L to move cursor to the current viewport's page top/bottom (inspired by tmux).
  • Modal mode: and more...
  • Adds new config option profile.*.vi_mode_highlight_timeout and colorscheme.*.vi_mode_highlight and adds cell highlighting on yank (#669).
  • Adds support for running on ARMv8 platform with crypto extensions (#611).
  • Adds back support OpenGL ES (3.1).
  • Adds E3 capability, so clear now defaults to clearing screen and scrollback (#693).
  • Adds specialized PTY implementation for Linux operating system utilizing OS-specific kernel APIs.
  • Adds basic support for Indicator status line and their VT sequences DECSASD and DECSSDT, and DECRQSS has been adapted (#687).
  • Adds configuration option profiles.*.status_line.display to be either none or indicator to reflect the initial state of the status line (more customizability of the Indicator status-line will come in future releases).
  • Adds new action ToggleInputProtection to protect terminal application against accidental input (#697).
  • Adds configuration options logging.enabled as well as logging.file.
  • Adds VT sequences XTPUSHCOLORS, XTPOPCOLORS, XTREPORTCOLORS (#714).
  • Adds CLI syntax contour info vt to print list of supported VT sequences (#730).
  • Adds VT sequence DECPS (#237).
  • Adds new config option colorscheme.selection.foreground_alpha and colorscheme.selection.background_alpha to enable somewhat more eye-candy visual looks on text selection.
  • Extends config option colorscheme.selection.foreground and colorscheme.selection.background to also accept CellForeground and CellBackground as value.

0.3.1.200 (2022-05-01)

  • Adds Vi-like input modes for improved selection and copy'n'paste experience.
  • Adds contour executable to search path for spawned shell process on macOS and Windows.
  • Adds customizability to dim colors (#664).
  • Adds the profile configuration option: draw_bold_text_with_bright_colors.
  • Fixes CSI K accidentally removing line flags, e.g. line marks (#658).
  • Fixes wrong-spacing rendering bug on some lines.
  • Fixes assertion on font resize when a (Sixel) image is currently being rendered (#642).
  • Fixes assertion on too quick shell terminations (#647).
  • Fixes fallback shell execution on UNIX-like systems when the requested shell cannot be spawned (#647).
  • Fixes selection being wrongly rendered when viewport is scrolled (#641).
  • Fixes full-line selection not properly injecting linefeeds between the lines.
  • Changes behavior of full-line selection to include a trailing linefeed for the last line (#641).
  • Changes behavior of bold text to by rendered using normal colors by default (was forced to bright before, and is now configurable via draw_bold_text_with_bright_colors).

0.3.0.198 (2022-04-18)

TLDR; Many thanks to all for the great support and feedback. This release marks a huge milestone for me especially with regards to VT backend performance(!), improved rendering architecture, and a more complete list of pixel perfect box drawings.

  • Fixes installation from .deb (missing terminfo dependency)
  • Fixes PTY write race condition.
  • Fixes VT sequence DECFI.
  • Fixes VT sequence ICH (#559).
  • Fixes VT sequence OSC 4's response.
  • Fixes VT sequence OESC 4 to also support setting color via #RRGGBB.
  • Fixes VT sequence extension: capture buffer (#493).
  • Fixes DECRC with respect to DECSTBM enabled and DECOM being inverted interpreted.
  • Fixes XTGETTCAP (#582).
  • Fixes SU in combination with DECLRM (#593).
  • Fixes an assertion in text renderer.
  • Fixes wrongly advertising DEC locator mode (it is not supported).
  • Improved VT backend performance (#342).
  • Improved text selection behavior.
  • Improved detection of runtime DPI changes for KDE (Plasma) desktop environment.
  • Improves Window manipulation VT sequence for saving/restoring window title (CSI 22 ; Ps t, CSI 23 ; Ps t)
  • Adds pixel-perfect box-drawing for U+EE00 .. U+EE05 for progress bar glyphs as first introduced by Fira Code (#521).
  • Adds pixel-perfect box-drawing for U+E0B0, U+E0B2, U+E0BA (Triangle Powerline glyphs).
  • Adds preliminary implementation of DA3 VT sequence.
  • Adds new configuration option mouse_block_selection_modifier.
  • Adds new configuration option profiles.*.copy_last_mark_range_offset (default 0) to adjust where to start looking upwards for the CopyPreviousMarkRange action. This is useful for multi-line prompts.
  • Adds new configuration option platform_plugin.
  • Adds new configuration option renderer.backend for explicitly setting renderer to one of: OpenGL, software, default.
  • Adds new configuration option renderer.tile_hashtable_slots to configure texture atlas hashtable capacity.
  • Adds new configuration option renderer.tile_cache_count to configure texture atlas cache capacity.
  • Adds new configuration option renderer.tile_direct_mapping to enable/disalbe texture atlas direct mapping.
  • Adds new colorscheme setting background_image.path and background_image.opacity to optionally render a terminal background image.
  • Adds stdout-fastpipe support on new shell file descriptor 3 and exposing availability via environment variable STDOUT_FASTPIPE (with value 3). When writing to this file descriptor rather than to stdout (file descriptor 1), the full performance of Contour can be explored.
  • Adds new configuration option pty_buffer_size for tweaking the new size in bytes for the PTY buffer objects.
  • Adds mock font locator (mostly interesting for advanced use for CI testing).
  • Adds VT sequence SM ? 8452 h / RM ? 8452 l for enabling/disabling sixel cursor placement conformance (xterm extension).
  • Adds SGR-Pixels support, VT sequence SM ? 1016 h / RM ? 1016 l (#574).
  • Adds VT sequence DECCARA, Change Attributes in Rectangular Area, with the extension that it applies to all SGR attributes. (#15).

0.2.3.183 (2022-01-09)

Important: It is recommended to also use the latest contour termcap file if you are already using one from a previous release.

  • Fixes Sixel image rendering when scrolling is needed and ANSI cursor is not on left margin.
  • Fixes Qt-related CLI options that that were largely ignored.
  • Fixes crash caused by VT sequence PM and SOS (#513).
  • Fixes parsing VT sequence RGB color parsing for cell decoratioins (e.g. underline).
  • Fixes double-underline to not look like a very thick line on small font sizes.
  • Applies antialiasing to curly underline.
  • Changes contour exit code to reflect the shell's exit code of the last closed window.
  • Improves text cursor rendering and extends cursor configuration accordingly (#526).
  • Improves visual appearance of dotted underline SGR.
  • Adds CLI option terminal early-exit-threshold SECS (defaulting to 6) to only report and wait if the process did exit below this threshold seconds.
  • Adds CLI option terminal dump-state-at-exit to auto-dump internal state at exit.
  • Adds support for CoreText for matching font descriptions and font fallback (#479).
  • Adds support for font feature settings. This is currently only implemented for openshaper, not yet for dwrite (#520).
  • Adds pixel-perfect box-drawing for U+E0B4, U+E0B6, U+E0BC, U+E0BE (some Powerline extended codepoints).

0.2.2.175 (2021-11-19)

  • Fixes input mapping containing Control modifier.
  • Fixes input mapping mode Select being ignored.
  • Fixes Modifier+Enter input mapping not being caught.
  • Fixes slant detection for DirectWrite.
  • Changes DECCOLM to only switch back to 80 when it was 132 before.
  • Adds new config option spawn_new_process to define new terminal window behavior.
  • Adds action CancelSelection to allow actively canceling selection via input mappings.
  • Adds key bindings to default configuration to allow simply pressing Ctrl+C/Ctrl+V (without Shift modifier) when an active selection is present.
  • Adds process current working directory on macOS.
  • Adds contour license CLI command to show project license but also an overview of all dependencies.
  • Adds a proper CLI to bench-headless. Building the headless benchmark tool is not shipped by default.

0.2.1.174 (2021-11-14)

  • Reverts change from 0.2.0: "Changes behavior when receiving U+FE0E (VS15) to not enforce the width of 1 but leave it as is (usually 2). This seems to match what the web browser is doing, too."
  • Adds support for loading terminal color schemes from an external file, such as ~/.config/contour/colorschemes/onedark.yml for the scheme onedark (file file format is simply a sub-tree of how colors can be specified inline).
  • Adds some more tmux-extension entries to the terminfo database that are supported by contour (Ss, Se, Cs, Smol, Smulx, Setulc).
  • Adds Sync capability entry to terminfo file.
  • Adds many more pixel-perfect graphical characters: 23A1..23A6, 2580..2590, 2594..259F, 1FB00..1FB3B, 1FB3C..1FBAF, 1FBF0..1FBF9.
  • Adds support for building with embedded FreeType and HarfBuzz (experimental, disabled by default).
  • Adds a shell early-exit-guard to not instantly close the terminal window but print a message instead and wait for any key press in order to close.
  • Adds missing config option read_buffer_size to default contour.yml.
  • Adds new config option reflow_on_resize to mandate whether or not text reflow is enabled on primary screen. If this option is false, it cannot be enabled programmatically either.
  • Adds new config option on_mouse_select to decide what action to pick when text has been selected (copy to clipboard or copy to selection-clipboard, or do nothing)
  • Unicode data updated to version 14.0 (release). See Announcing The Unicode® Standard, Version 14.0.
  • Do not force OpenGL ES on Linux anymore.
  • Changes default (Sixel) image size limits to the primary screen's pixel dimensions (#408).
  • Changes font locator engine default on Windows to DirectWrite (#452).
  • Changes tcap-query feature from experimental to always enabled (not configurable anymore).
  • Automatically detect if contour or contour-latest terminfo entries are present use that as default.
  • Fixes VT sequences that cause a cursor restore to sometimes crash.
  • Fixes terminfo installation path on macOS and tries to auto-set TERMINFO_DIRS to it on startup (#443).
  • Fixes terminfo entry pairs.
  • Fixes SGR 24 to remove any kind of underline (#451).
  • Fixes font fallback for open_shaper where in rare cases the text was not rendered at all.
  • Fixes CPU load going up on mouse move inside terminal window (#407).
  • Fixes terminfo entries accidentally double-escaping \E to \\E (#399).
  • Fixes RGB color parsing via ':2::Pr:Pg:Pb' syntax and also adapt setrgbf & setrgbb accordingly.
  • Fixes SEGV with overflowing (Sixel) images (#409).
  • Fixes XTSMGRAPHICS for invalid SetValue actions and setting Sixel image size limits (#422).
  • Fixes internal pixel width/height tracking in VT screen, which did affect sizes of rendered Sixel images (#408).
  • Fixes configuring a custom shell on macOS (#425).
  • Fixes off-by-one bug in builtin box drawing (#424).
  • Fixes assertion in text renderer with regards to colored glyphs.
  • Fixes Sixel background select to support transparency (#450).
  • Fixes session resuming on KDE desktop environment which is respawing all Contour instances upon re-login but failed due to invalid command line parameters (#461).
  • Fixes Meta+Key keyboard inputs being ignored.
  • Changes DECSDM such that it works like a real VT340; also xterm, as of version 369, changed that recently (#287).
  • Adds context menu support for KDE.

0.2.0.173 (2021-08-17)

  • Improved performance (optimized render loop, optimized grapheme cluster segmentation algorithm)
  • Improves selection to better automatically deselect on selected area corruption.
  • Fixes ioctl(..., TIOCGWINSZ, ...) pixel values that were only set during resize but not initially.
  • Fixes mouse in VIM+Vimspector to also change the document position when moving the mouse.
  • Fixes SGR decorations to use designated underline thickness and underline position.
  • Fixes font glyph render in some corner cases where the rendered glyph did result in rectangle garbage on the screen.
  • Fixes copying the selection containing trailing whitespaces.
  • Fixes hard-reset with regards to default tab width.
  • Fixes VT sequence DECRQPSR for DECTABSR.
  • Fixes keyboard keys for F1..F4 when pressed with and without modifiers.
  • Fixes OSC 8 hyperlink rendering when scrolled.
  • Fixes SGR 1 (bold) wrongly applied on indexed background colors.
  • Fixes text shaping sometimes showing missing glyphs instead of the actual glyphs (by changing the last-resort font fallback mechanism to chape each cluster individually with its own font fallback).
  • Preserve active profile when reloading config, and forces redraw after config reload.
  • Changes config entry profile.*.font_size to profile.*.font.size.
  • Changes config entries scrollbar.* to profile.*.scrollbar.*.
  • Changes behavior of live configuration reload, which is not default anymore and must be explicitly enabled via CLI parameter --live-config.
  • Changes behavior when receiving U+FE0E (VS15) to not enforce the width of 1 but leave it as is (usually 2). This seems to match what the web browser is doing, too.
  • Changes the CLI command line interface syntax.
  • Removes tab_width configuration. Tab width cannot be configured anymore but remaints by default at 8.
  • Adds basic automatically created archive for Arch Linux to the CI build artifacts page and release page.
  • Adds support for bypassing the mouse protocol via Shift-click (configurable via bypass_mouse_protocol_modifier)
  • Adds improved debug logging. via CLI flag -d (--enable-debug) to accept a comma separated list of tags to enable logging for. Appending a * at the end of a debug tag will enable all debug tags that match prefix its prefix. The list of available debuglog tags can be found via CLI flag -D (--list-debug-tags).
  • Adds support for different font render modes: lcd, light, gray, monochrome in profiles.NAME.font.render_mode (default: lcd).
  • Adds support for different text render engines: OpenShaper, DirectWrite and CoreText for upcoming native platform support on Windows (and later macOS).
  • Adds support for different font location engines: fontconfig (others will follow).
  • Adds experimental text reflow.
  • Adds OpenFileManager action to configuration.
  • Adds terminal identification environment variables TERMINAL_NAME, TERMINAL_VERSION_TRIPLE and TERMINAL_VERSION_STRING.
  • Adds config option mode to input modifiers for additionally filtering based on modes (alt screen, app cursor/keypad, text selection modes, ...).
  • Adds config option profile.*.terminal_id: STR to set the terminal identification to one of VT100, VT220, VT340, etc.
  • Adds config option profile.*.maximized: BOOL to indicate maximized state during profile activation.
  • Adds config option profile.*.fullscreen: BOOL to indicate fullscreen state during profile activation.
  • Adds config option profile.*.font.strict_spacing: BOOL to indicate that only monospace fonts may be used.
  • Adds config option profile.*.font.TYPE.weight: WEIGHT and profile.*.fonts.TYPE.slant: SLANT options (optional) along with profile.*.fonts.TYPE.family: STRING.
  • Adds config option profile.*.font.dpi_scale: FLOAT to apply some additional DPI scaling on fonts.
  • Adds config option profile.*.font.builtin_box_drawing: BOOL to use pixel-perfect builtin box drawing instead of font provided box drawing characters.
  • Adds config option profile.*.refresh_rate: FLOAT to configure how often the terminal screen will be rendered at most when currently under heavy screen changes. A value of "auto" will use the currently connected monitor's refresh rate.
  • Adds configuration's action ToggleAllKeyMaps to enable/disable intercepting and interpreting keybinds. The one that did toggle it will not be disabled.
  • Adds configuration's action ClearHistoryAndReset to clear the history, and resetting the terminal.
  • Adds VT sequence for enabling/disabling debug logging. CSI ? 46 h and CSI ? 46 l and CLI option -d.
  • Adds VT sequence for querying/setting current font OSC 50 ; ? ST and OSC 50 ; Font ST (and OSC 60 Ps Ps Ps Ps Ps ST for a more fine grained font query/setting control).
  • Adds VT sequence CSI 18 t and CSI 19 t for getting screen character size. Responds with CSI 8 ; $columns ; $rows t and CSI 9 ; $columns ; $rows t respectively.
  • Adds VT sequence to capture the current screen buffer CSI > LineMode ; StartLine ; LineCount t giving the response back on stdin via OSC 314 ; $screen_buffer ST, and feature detection via DA1 number 314.
  • Adds VT sequence DECSNLS for setting number of lines to display.
  • Adds VT sequence CSI Ps b (REP) for repeating the last graphical character Ps times.
  • Adds VT sequence OSC 4 ; INDEX ; COLOR ST for setting or querying color palette (if COLOR is ? instead of a color spec).
  • Adds VT sequence OSC 104 ; INDEX ST for resetting color palette entry or complete palette (if no (index is given).
  • Adds VT sequence DECCRA to copy a rectangular area.
  • Adds VT sequence DECERA to erase a rectangular area.
  • Adds VT sequence DECFRA to fill a rectangular area.
  • Adds VT sequence CSI > q (XTVERSION) to query terminal identification (name and version). Response comes as DCS >| Contour ContourVersion ST.
  • Adds VT sequence DECRQM to request ANSI/DEC modes states (set / unset / not recognized).
  • Adds new CLI command: contour capture ... to capture the screen buffer.
  • Adds new CLI command: contour set profile to NAME to change the profile on the fly.
  • Adds new CLI command: contour generate terminfo output OUTPUT_FILE to create a Contour terminfo file.
  • Adds new CLI command: contour generate config output OUTPUT_FILE to create a new default config.
  • Adds new CLI command: contour generate integration shell SHELL output OUTPUT_FILE to create the shell integration file for the given shell (only zsh supported for now). Also adds a pre-generated shell integration file for Linux (and macOS) to /usr/share/contour/shell-integration.zsh.
  • Unicode data updated to version 14.0 beta.
  • Adds support for building with Qt 6 (disabled by default).
  • Adds support for building with mimalloc (experimental, disabled by default).

0.1.1 (2020-12-31)

  • Fixes race condition when displaying image animations (e.g. gifs via sixel).
  • Fixes NewTerminal action to also inherit the active configuration file.
  • Fixes restoring cursor position in RM ?1049.
  • Fixes DECSTR resetting saved-cursor state and active cursor-position.
  • Fixes selecting text not being pushed into the selection-clipboard.
  • Adds VT sequence OSC 7 (set current working directory).
  • Adds VT sequence DCS $ p $Name ST to change config profile name to $Name.

0.1.0 (2020-12-24)

  • Available on all 3 major platforms, Linux, macOS, Windows.
  • Emoji support (-: 🌈 💝 😛 👪 :-)
  • Font ligatures support (such as in Fira Code).
  • Bold and italic fonts
  • GPU-accelerated rendering.
  • Vertical Line Markers (quickly jump to markers in your history!)
  • Blurred behind transparent background when using Windows 10 or KDE window manager on Linux.
  • Runtime configuration reload
  • 256-color and Truecolor support
  • Key binding customization
  • Color Schemes
  • Profiles (grouped customization of: color scheme, login shell, and related behaviors)
  • Clickable hyperlinks via OSC 8
  • Sixel inline images