Contour - A modern C++ Terminal Emulator

Overview

Contour - A modern C++ Terminal Emulator

CI Build codecov C++17 Discord Twitch Live Stream

alt text

IMPORTANT: THIS PROJECT IS IN BETA STAGE & ACTIVE DEVELOPMENT

contour is a modern terminal emulator, for everyday use. It is aiming for power users with a modern feature mindset.

Features

  • โœ… Available on all 3 major platforms, Linux, OS/X, Windows (Windows is alpha stage).
  • โœ… GPU-accelerated rendering.
  • โœ… Font ligatures support (such as in Fira Code).
  • โœ… Unicode: Emoji support (-: ๐ŸŒˆ ๐Ÿ’ ๐Ÿ˜› ๐Ÿ‘ช - including ZWJ, VS15, VS16 emojis :-)
  • โœ… Unicode: Grapheme cluster support
  • โœ… Bold and italic fonts
  • โœ… High-DPI support.
  • โœ… 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 behaviours)
  • โœ… Synchronized rendering (via DECSM 2026 / DECRM 2026)
  • โœ… Text reflow (configurable via DECSM 2027 / DECRM 2027)
  • โœ… Clickable hyperlinks via OSC 8
  • โœ… Clipboard setting via OSC 52
  • โœ… Sixel inline images
  • โœ… Terminal page buffer capture VT extension to quickly extract contents.

CLI - Command Line Interface

  Usage:

    contour [terminal] [config STRING] [profile STRING] [debug STRING] [live-config]
                       [working-directory STRING] [PROGRAM ARGS...]
    contour help
    contour version
    contour parser-table
    contour list-debug-tags
    contour capture [logical] [timeout FLOAT] [lines INT] output STRING

  Detailed description:

    contour [terminal]
        Spawns a new terminal application.

        Options:

            [config STRING]             Path to configuration file to load at startup.
                                        [default: /home/trapni/.config/contour/contour.yml]
            [profile STRING]            Terminal Profile to load.
            [debug STRING]              Enables debug logging, using a comma seperated list of tags.
            [live-config]               Enables live config reloading. [default: false]
            [working-directory STRING]  Sets initial working directory. [default: .]
            [PROGRAM ARGS...]           Executes given program instead of the configuration provided one.

Example Configuration File

[email protected]#$%^&*+=[]{}~?|โ”‚" default_profile: ubuntu_vm profiles: ubuntu_vm: shell: "ssh ubuntu-vm" terminal_size: columns: 130 lines: 30 environment: TERM: xterm-256color COLORTERM: truecolor font: size: 12 render_mode: lcd regular: "Fira Code" bold: "Fira Code:style=bold" italic: "Hack:style=italic" bold_italic: "Hack:style=bold italic" emoji: "emoji" tab_width: 8 history: limit: 8000 scroll_multiplier: 3 auto_scroll_on_update: true cursor: shape: block blinking: true background: opacity: 0.9 blur: false colors: google_dark color_schemes: google_dark: cursor: '#b0b030' selection: '#30c0c0' default: background: '#1d1f21' foreground: '#c5c8c6' normal: black: '#1d1f21' red: '#cc342b' green: '#198844' yellow: '#fba922' blue: '#3971ed' magenta: '#a36ac7' cyan: '#3971ed' white: '#c5c8c6' bright: black: '#969896' red: '#cc342b' green: '#198844' yellow: '#fba922' blue: '#3971ed' magenta: '#a36ac7' cyan: '#3971ed' white: '#ffffff' input_mapping: - { mods: [Alt], key: Enter, action: ToggleFullscreen } - { mods: [Control, Alt], key: S, action: ScreenshotVT } - { mods: [Control, Shift], key: Equal, action: IncreaseFontSize } - { mods: [Control, Shift], key: Minus, action: DecreaseFontSize } - { mods: [Control, Shift], key: N, action: NewTerminal } - { mods: [Control], mouse: WheelUp, action: IncreaseFontSize } - { mods: [Control], mouse: WheelDown, action: DecreaseFontSize } - { mods: [Alt], mouse: WheelUp, action: IncreaseOpacity } - { mods: [Alt], mouse: WheelDown, action: DecreaseOpacity } - { mods: [Control], key: '0', action: ResetFontSize } - { mods: [Shift], mouse: WheelUp, action: ScrollPageUp } - { mods: [Shift], mouse: WheelDown, action: ScrollPageDown } - { mods: [], mouse: WheelUp, action: ScrollUp } - { mods: [], mouse: WheelDown, action: ScrollDown } - { mods: [Shift], key: UpArrow, action: ScrollOneUp } - { mods: [Shift], key: DownArrow, action: ScrollOneDown } - { mods: [Shift], key: PageUp, action: ScrollPageUp } - { mods: [Shift], key: PageDown, action: ScrollPageDown } - { mods: [Shift], key: Home, action: ScrollToTop } - { mods: [Shift], key: End, action: ScrollToBottom } - { mods: [Alt, Shift], key: 'k', action: ScrollMarkUp } - { mods: [Alt, Shift], key: 'j', action: ScrollMarkDown } logging: file: "/path/to/contour.log" parse_errors: true invalid_output: true unsupported_output: true raw_input: false raw_output: false trace_input: false trace_output: false ">
word_delimiters: " /\\()\"'-.,:;<>[email protected]#$%^&*+=[]{}~?|โ”‚"
default_profile: ubuntu_vm
profiles:
    ubuntu_vm:
        shell: "ssh ubuntu-vm"
        terminal_size:
            columns: 130
            lines: 30
        environment:
            TERM: xterm-256color
            COLORTERM: truecolor
        font:
            size: 12
            render_mode: lcd
            regular: "Fira Code"
            bold: "Fira Code:style=bold"
            italic: "Hack:style=italic"
            bold_italic: "Hack:style=bold italic"
            emoji: "emoji"
        tab_width: 8
        history:
            limit: 8000
            scroll_multiplier: 3
            auto_scroll_on_update: true
        cursor:
            shape: block
            blinking: true
        background:
            opacity: 0.9
            blur: false
        colors: google_dark

color_schemes:
    google_dark:
        cursor: '#b0b030'
        selection: '#30c0c0'
        default:
            background: '#1d1f21'
            foreground: '#c5c8c6'
        normal:
            black:   '#1d1f21'
            red:     '#cc342b'
            green:   '#198844'
            yellow:  '#fba922'
            blue:    '#3971ed'
            magenta: '#a36ac7'
            cyan:    '#3971ed'
            white:   '#c5c8c6'
        bright:
            black:   '#969896'
            red:     '#cc342b'
            green:   '#198844'
            yellow:  '#fba922'
            blue:    '#3971ed'
            magenta: '#a36ac7'
            cyan:    '#3971ed'
            white:   '#ffffff'

input_mapping:
    - { mods: [Alt],            key: Enter,         action: ToggleFullscreen }
    - { mods: [Control, Alt],   key: S,             action: ScreenshotVT }
    - { mods: [Control, Shift], key: Equal,         action: IncreaseFontSize }
    - { mods: [Control, Shift], key: Minus,         action: DecreaseFontSize }
    - { mods: [Control, Shift], key: N,             action: NewTerminal }
    - { mods: [Control],        mouse: WheelUp,     action: IncreaseFontSize }
    - { mods: [Control],        mouse: WheelDown,   action: DecreaseFontSize }
    - { mods: [Alt],            mouse: WheelUp,     action: IncreaseOpacity }
    - { mods: [Alt],            mouse: WheelDown,   action: DecreaseOpacity }
    - { mods: [Control],        key: '0',           action: ResetFontSize }
    - { mods: [Shift],          mouse: WheelUp,     action: ScrollPageUp }
    - { mods: [Shift],          mouse: WheelDown,   action: ScrollPageDown }
    - { mods: [],               mouse: WheelUp,     action: ScrollUp }
    - { mods: [],               mouse: WheelDown,   action: ScrollDown }
    - { mods: [Shift],          key: UpArrow,       action: ScrollOneUp }
    - { mods: [Shift],          key: DownArrow,     action: ScrollOneDown }
    - { mods: [Shift],          key: PageUp,        action: ScrollPageUp }
    - { mods: [Shift],          key: PageDown,      action: ScrollPageDown }
    - { mods: [Shift],          key: Home,          action: ScrollToTop }
    - { mods: [Shift],          key: End,           action: ScrollToBottom }
    - { mods: [Alt, Shift],     key: 'k',           action: ScrollMarkUp }
    - { mods: [Alt, Shift],     key: 'j',           action: ScrollMarkDown }

logging:
    file: "/path/to/contour.log"
    parse_errors: true
    invalid_output: true
    unsupported_output: true
    raw_input: false
    raw_output: false
    trace_input: false
    trace_output: false

Installing from source

Prerequisites Linux

This is tested on Ubuntu 19.04, but any recent Linux with latest C++17 compiler should do:

sudo apt install \
    "g++-9" cmake pkg-config make libfreetype6-dev qtbase5-dev libqt5gui5 extra-cmake-modules \
    libfontconfig1-dev libharfbuzz-dev libfontconfig-dev

To enable blur-behind feature on transparent background, you'll need the following packages:

sudo apt install libkf5windowsystem-dev

And set pass -DCONTOUR_BLUR_PLATFORM_KWIN=ON to cmake when configuring the project.

In case you want to improve performance slightly and run at at least Linux, you can add -DLIBTERMINAL_EXECUTION_PAR=ON to the cmake configuration and make sure to have libtbb-dev installed beforehand.

Prerequisites Windows 10

For Windows, you must have Windows 10, 2018 Fall Creators Update, and Visual Studio 2019, installed. It will neither build nor run on any prior Windows OS, due to libterminal making use of ConPTY API.

vcpkg install freetype fontconfig harfbuzz qt5-base

Prerequisites Mac OS/X

brew install freetype fontconfig harfbuzz boost qt5

References

License

Contour - A modern C++ Terminal Emulator
-------------------------------------------

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Issues
  • Coredumps when drawing Unicode block characters

    Coredumps when drawing Unicode block characters

    Description

    When attempting to draw box drawing characters, contour attempts to free() an invalid pointer and dumps core.

    Environment

    • Contour Version or Git commit hash: 2814f42f705756cd2dbaeb8579618801c714c7fd
    • Operating System (name / distribution / version): Debian GNU/Linux 11
    • Contour configuration: None
    • TERM environment variable: xterm-256color
    • Compiler version: g++ 10.2.1

    Steps to Reproduce

    1. Install ugrep
    2. Try running ugrep 0..10FFFF which will show every assigned unicode character.
    3. Eventually, Contour will crash

    The point appears to be in the range of box drawing glyphs (U+2500) as I'm able to get it to coredump immediately when I type:

    ugrep box draw
    

    Update:

    This does not crash:

    ugrep 2500..70
    

    Nor does this:

    ugrep 2580..FF
    

    But this crashes:

    ugrep 2570..F
    
    bug VT: renderer fonts stability blocker 
    opened by hackerb9 34
  • XTSMGRAPHICS

    XTSMGRAPHICS "Read sixel graphics geometry" returns the different value from xterm.

    Contour Terminal version

    0.3.1-unreleased-master-7f13fbb0

    Installer source

    Github: source code cloned

    Operating System

    Ubuntu Linux 20.04

    Architecture

    x86-64

    Other Software

    No response

    Steps to reproduce

    cat <<EOF > test.sh
    IFS=';' read -a REPLY -s -t 0.25 -d "S" -p $'\e[?2;1;0S'
    echo "width=\${REPLY[2]} height=\${REPLY[3]}"
    EOF
    bash test.sh
    

    Expected Behavior

    Returned width and height are smaller than or equal to screen width and height (same as the latest xterm).

    Actual Behavior

    Returned width and height are always 1920 and 1080 regardless of screen size.

    Additional notes

    By this problem, https://github.com/hackerb9/lsix can not layout pictures as expected position.

    contour image

    xterm image

    ref: xterm implementation:

    https://github.com/ThomasDickey/xterm-snapshots/blob/834b501a1416d7f14b1c38705083f413aea92eee/charproc.c#L4625

    bug 
    opened by kumattau 31
  • segfault with with latest git

    segfault with with latest git

    Contour Terminal version

    latest git

    Installer source

    Github: source code cloned

    Operating System

    arch linux

    Architecture

    x86-64

    Other Software

    none

    Steps to reproduce

    build remove config start

    Expected Behavior

    contour starting

    Actual Behavior

    segment fault

    Additional notes

    https://termbin.com/m7r4 happens also with with stable

    bug frontend: OpenGL OpenGL blocker 
    opened by Glog78 23
  • Set some environment variable if shell is running inside Contour

    Set some environment variable if shell is running inside Contour

    Abstract

    I would like to have some environment variable automatically set by Contour, so the shells running inside may know they are running in Contour.

    When a shell is run inside Konsole, you get a few env vars to at least check their existence and be in the know:

    โ•ฐโ”€ env | grep KONSOLE
    KONSOLE_DBUS_SERVICE=:1.37
    KONSOLE_DBUS_SESSION=/Sessions/10
    KONSOLE_DBUS_WINDOW=/Windows/1
    KONSOLE_PROFILE_NAME=Default (ZSH)
    

    Motivation

    I am using the conceal feature in Vim. Conceal allows you to change keywords and sequences to a single letter. E.g. in C++, I am changing bool to ๐”น, true to โŠค and false to โŠฅ. This makes Vim show code when reading like below.

    Unfortunately, Konsole (KDE's terminal emulator I'm using normally) has issues with rendering Unicode. Note how the right-hand sidebar is wobbly, and how in the initialisation of the bool local variables, the โŠฅ just randomly went missing.

    Screenshot_20210217_131849

    So instead, I use a different glyph for the false keyword, โŸ‚. They might look similar, but they ain't. Even Wikipedia mentions the difference between the two symbols. While this makes the disappearing symbol issue fixed, it looks ugly...ish. Note the issue with this symbol is shown, but the wobbly is still there.

    Screenshot_20210217_132137

    If there was some environment variable set by Contour, I could write my Vim scripts in a way that they show the โŸ‚ glyph instead of โŠฅ when I'm in Konsole (or rather, disable this whole feature altogether because of the Unicode rendering issues of Konsole), and use the real โŠฅ symbol (and have the conceal feature enabled) when Contour is running.

    Specification

    I'm not sure what kind of env-var could be useful. But if there is "something" that starts with CONTOUR_ and I could grep for it similarly to KONSOLE_, it's already fine for scripting user-facing stuff.

    enhancement good first issue 
    opened by whisperity 23
  • No syntax highlighting in VIM

    No syntax highlighting in VIM

    After compiling under Gentoo I have no color in vim. The normal shell shows colors fine, but when I start vim, it only gives underscoring as highlighting. Is there a way to activate the color in VIM?

    opened by echo2go 21
  • SIGSEGV when displaying sixels

    SIGSEGV when displaying sixels

    Description

    When I run lsix to list the images in a directory, the first row of images appears and then Contour dumps core with a segfault.

    Environment

    • Contour Version or Git commit hash: Git main 77cb600f52f94d888cafe5282a64ad27d0494137
    • Operating System (name / distribution / version): Debian GNU/Linux 11 (bullseye) with Wayland
    • Contour configuration: unchanged
    • TERM environment variable: unchanged
    • Compiler version: g++ 10.2.1 [It didn't show while compiling, but g++ is what I have as my system default (/bin/c++ โ†’ /etc/alternatives/c++ โ†’ /usr/bin/g++)]

    Steps to Reproduce

    1. Run lsix in a directory with many images.
    2. The first row of images appears
    3. ๐Ÿ’ฅ(Kaboom)๐Ÿ’ฅ

    Debugging output

    Backtrace โ„– 1
    Thread 10 "contour" received signal SIGSEGV, Segmentation fault.
    [Switching to Thread 0x7fffebe29700 (LWP 530418)]
    terminal::Grid::at (this=0x9b0740, _coord=...) at src/contour/src/terminal/Grid.h:794
    794             return (*next(lines_.begin(), unbox<int>(historyLineCount()) + _coord.row - 1))[static_cast<size_t>(_coord.column - 1)];
    (gdb) bt
    #0  terminal::Grid::at(terminal::Coordinate const&) (this=0x9b0740, _coord=...)
        at src/contour/src/terminal/Grid.h:794
    #1  0x00000000004fd0e9 in terminal::Screen::at(terminal::Coordinate const&) (_coord=..., this=
        0x9afd20) at src/contour/src/terminal/Screen.h:565
    #2  operator() (offset=..., __closure=<synthetic pointer>)
        at src/contour/src/terminal/Screen.cpp:2114
    #3  std::for_each<terminal::GridSize::iterator, terminal::Screen::renderImage(const std::shared_ptr<const terminal::Image>&, terminal::Coordinate, terminal::GridSize, terminal::Coordinate, terminal::ImageSize, terminal::ImageAlignment, terminal::ImageResize, bool)::<lambda(terminal::GridSize::Offset)> > (__last=..., __last=..., __f=..., __first=...) at /usr/include/c++/10/bits/stl_algo.h:3839
    #4  crispy::for_each<terminal::GridSize, terminal::Screen::renderImage(const std::shared_ptr<const terminal::Image>&, terminal::Coordinate, terminal::GridSize, terminal::Coordinate, terminal::ImageSize, terminal::ImageAlignment, terminal::ImageResize, bool)::<lambda(terminal::GridSize::Offset)> >
        (_fn=<optimized out>, _container=<optimized out>)
        at  src/contour/src/crispy/algorithm.h:55
    #5  terminal::Screen::renderImage(std::shared_ptr<terminal::Image const> const&, terminal::Coordinate, terminal::GridSize, terminal::Coordinate, crispy::ImageSize, terminal::ImageAlignment, terminal::ImageResize, bool)
        (this=<optimized out>, _imageRef=<optimized out>, _topLeft=..., _gridSize=..., _imageOffset=..., _imageSize=..., _alignmentPolicy=terminal::ImageAlignment::TopStart, _resizePolicy=terminal::ImageResize::NoResize, _autoScroll=true) at src/contour/src/terminal/Screen.cpp:2107
    #6  0x00000000004fd3ad in terminal::Screen::sixelImage(crispy::ImageSize, std::vector<unsigned char, std::allocator<unsigned char> >&&) (this=0x9afd20, _pixelSize=..., _data=<optimized out>)
        at src/contour/src/terminal/Screen.cpp:2060
    --Type <RET> for more, q to quit, c to continue without paging--c
    #7  0x000000000050b646 in terminal::Sequencer::unhook() (this=0x9b0590) at src/contour/src/terminal/Sequencer.cpp:1073
    #8  0x00000000004f68c9 in terminal::parser::Parser::processInput(char32_t) ([email protected]=0x9b0668, _ch=27 U'\033') at src/contour/src/terminal/Parser.h:796
    #9  0x00000000004f4bfc in terminal::parser::Parser::parseFragment(std::basic_string_view<char, std::char_traits<char> >) ([email protected]=0x9b0668, _data=Python Exception <class 'gdb.error'> value has been optimized out: 
    ) at src/contour/src/terminal/Parser.cpp:117
    #10 0x000000000050045e in terminal::Screen::write(std::basic_string_view<char, std::char_traits<char> >) ([email protected]=0x9afd20, _data="17!158?C#11!65?G#17!80?G!45?A#19!147?C$#17!334?_-#16!30~fv!20~z!12~rzz!15~}!38~vrNf!28~||k!53~|z!8~^!33~^!9~}!14~}!24~v|!23~^!13~|!14~v!51~}!21~|!28~|||!4~}!12~}!14~z{{!39~v!29~b!9~z!14~^!26~n!20~n}!4"...) at src/contour/src/terminal/Screen.cpp:528
    #11 0x0000000000518776 in terminal::Terminal::writeToScreen(std::basic_string_view<char, std::char_traits<char> >) (this=0x9afb40, _data="17!158?C#11!65?G#17!80?G!45?A#19!147?C$#17!334?_-#16!30~fv!20~z!12~rzz!15~}!38~vrNf!28~||k!53~|z!8~^!33~^!9~}!14~}!24~v|!23~^!13~|!14~v!51~}!21~|!28~|||!4~}!12~}!14~z{{!39~v!29~b!9~z!14~^!26~n!20~n}!4"...) at src/contour/src/terminal/Terminal.cpp:696
    #12 0x000000000051ae38 in terminal::Terminal::processInputOnce() (this=0x9afb40) at src/contour/src/terminal/Terminal.cpp:185
    #13 0x000000000051d2c0 in terminal::Terminal::mainLoop() (this=0x9afb40) at src/contour/src/terminal/Terminal.cpp:154
    #14 0x00007ffff686ced0 in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
    #15 0x00007ffff7778ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
    #16 0x00007ffff6576def in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
    (gdb)
    
    Backtrace โ„– 2
    Thread 10 "contour" received signal SIGSEGV, Segmentation fault.
    [Switching to Thread 0x7fffebe29700 (LWP 535751)]
    0x00000000004fd141 in terminal::ImageFragment::ImageFragment (this=<optimized out>) at /usr/include/c++/10/bits/shared_ptr_base.h:1190
    1190          __shared_ptr(__shared_ptr&& __r) noexcept
    (gdb) bt
    #0  0x00000000004fd141 in terminal::ImageFragment::ImageFragment(terminal::ImageFragment&&)
        (this=<optimized out>) at /usr/include/c++/10/bits/shared_ptr_base.h:1190
    #1  std::_Optional_base_impl<terminal::ImageFragment, std::_Optional_base<terminal::ImageFragment, false, false> >::_M_construct<terminal::ImageFragment>(terminal::ImageFragment&&)
        (this=<optimized out>) at /usr/include/c++/10/optional:419
    #2  std::optional<terminal::ImageFragment>::emplace<terminal::ImageFragment>(terminal::ImageFragment&&) (this=<optimized out>) at /usr/include/c++/10/optional:851
    #3  terminal::Cell::setImage(terminal::ImageFragment) (_imageFragment=..., this=<optimized out>)
        at src/contour/src/terminal/Grid.h:324
    #4  operator() (offset=..., __closure=<synthetic pointer>)
        at src/contour/src/terminal/Screen.cpp:2115
    #5  std::for_each<terminal::GridSize::iterator, terminal::Screen::renderImage(const std::shared_ptr<const terminal::Image>&, terminal::Coordinate, terminal::GridSize, terminal::Coordinate, terminal::ImageSize, terminal::ImageAlignment, terminal::ImageResize, bool)::<lambda(terminal::GridSize::Offset)> > (__last=..., __last=..., __f=..., __first=...) at /usr/include/c++/10/bits/stl_algo.h:3839
    #6  crispy::for_each<terminal::GridSize, terminal::Screen::renderImage(const std::shared_ptr<const terminal::Image>&, terminal::Coordinate, terminal::GridSize, terminal::Coordinate, terminal::ImageSize, terminal::ImageAlignment, terminal::ImageResize, bool)::<lambda(terminal::GridSize::Offset)> >
        (_fn=<optimized out>, _container=<optimized out>)
        at src/contour/src/crispy/algorithm.h:55
    #7  terminal::Screen::renderImage(std::shared_ptr<terminal::Image const> const&, terminal::Coordinate, terminal::GridSize, terminal::Coordinate, crispy::ImageSize, terminal::ImageAlignment, terminal::ImageResize, bool)
        (this=<optimized out>, _imageRef=<optimized out>, _topLeft=..., _gridSize=..., _imageOffset=..., --Type <RET> for more, q to quit, c to continue without paging--c
    _imageSize=..., _alignmentPolicy=terminal::ImageAlignment::TopStart, _resizePolicy=terminal::ImageResize::NoResize, _autoScroll=true) at src/contour/src/terminal/Screen.cpp:2107
    #8  0x00000000004fd3ad in terminal::Screen::sixelImage(crispy::ImageSize, std::vector<unsigned char, std::allocator<unsigned char> >&&) (this=0x9af260, _pixelSize=..., _data=<optimized out>) at src/contour/src/terminal/Screen.cpp:2060
    #9  0x000000000050b646 in terminal::Sequencer::unhook() (this=0x9afad0) at src/contour/src/terminal/Sequencer.cpp:1073
    #10 0x00000000004f68c9 in terminal::parser::Parser::processInput(char32_t) ([email protected]=0x9afba8, _ch=27 U'\033') at src/contour/src/terminal/Parser.h:796
    #11 0x00000000004f4bfc in terminal::parser::Parser::parseFragment(std::basic_string_view<char, std::char_traits<char> >) ([email protected]=0x9afba8, _data=Python Exception <class 'gdb.error'> value has been optimized out: 
    ) at src/contour/src/terminal/Parser.cpp:117
    #12 0x000000000050045e in terminal::Screen::write(std::basic_string_view<char, std::char_traits<char> >) ([email protected]=0x9af260, _data="5?A#162?O#163_$#175!54?G#161??C#171C#205!9?_#28?q???o!4?C$#205!54?S#210???G#47!11?K???G#164???G$#196!71?o!7?A$#210!71?C#89C!4?G$#167!72?A#204A!4?C-#14!45~!4{~!10{~{{__g{{{}{{~~{{vooo?oo!19~nNFN!545~^^"...) at src/contour/src/terminal/Screen.cpp:528
    #13 0x0000000000518776 in terminal::Terminal::writeToScreen(std::basic_string_view<char, std::char_traits<char> >) (this=0x9af080, _data="5?A#162?O#163_$#175!54?G#161??C#171C#205!9?_#28?q???o!4?C$#205!54?S#210???G#47!11?K???G#164???G$#196!71?o!7?A$#210!71?C#89C!4?G$#167!72?A#204A!4?C-#14!45~!4{~!10{~{{__g{{{}{{~~{{vooo?oo!19~nNFN!545~^^"...) at src/contour/src/terminal/Terminal.cpp:696
    #14 0x000000000051ae38 in terminal::Terminal::processInputOnce() (this=0x9af080) at src/contour/src/terminal/Terminal.cpp:185
    #15 0x000000000051d2c0 in terminal::Terminal::mainLoop() (this=0x9af080) at src/contour/src/terminal/Terminal.cpp:154
    #16 0x00007ffff686ced0 in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
    #17 0x00007ffff7778ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
    #18 0x00007ffff6576def in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
    (gdb) 
    
    bug VT: Backend stability 
    opened by hackerb9 19
  • Make deps of several C++ header libraries to improve terminal

    Make deps of several C++ header libraries to improve terminal

    Windows Terminal uses these C++ libraries: https://github.com/microsoft/terminal/tree/main/oss for a few things that include type-safety, thread-safety, safer math, performance, and easier implementation of some functionalities. Since this is a C++ terminal project, I thought I'd recommend these to improve things here. These libraries work on all platforms (Linux, Windows, MacOS).

    enhancement 
    opened by WSLUser 19
  • Chinese display has some problems

    Chinese display has some problems

    Contour Terminal version

    0.2.3

    Installer source

    GitHub: release page

    Operating System

    OS/X Monterey 12.0.1

    Architecture

    x86-64

    Other Software

    NeoVim 0.6.1

    Steps to reproduce

    display

    Expected Behavior

    image

    image

    Actual Behavior

    image

    image

    Additional notes

    bug fonts platform: osx 
    opened by Jackson-soft 18
  • empty window and

    empty window and "Precision qualifier" is not supported prior to GLSL version 1.30

    Description

    an empty window appears, the desktop background shines through can only be closed

    Environment

    ubuntu 20

    Steps to Reproduce

    > dpkg -i contour-terminfo_0.2.1~develop-2021-09-09-20-49-77cb600f-0ubuntu1~focal_amd64
    > dpkg -i contour_0.2.1~develop-2021-09-09-20-49-77cb600f-0ubuntu1~focal_amd64
    

    contour

    [error] Superfluous config key found: profiles.main.font.regular
    [error] Superfluous config key found: profiles.main.hyperlink_decoration.default
    qt5ct: using qt5ct plugin
    QOpenGLShader::compile(Vertex): Vertex shader failed to compile with the following errors:
    ERROR: 1:1: error(#263) "Precision qualifier" is not supported prior to GLSL version 1.30
    ERROR: 1:1: error(#263) "Precision qualifier" is not supported prior to GLSL version 1.30
    ERROR: 1:1: error(#263) "Precision qualifier" is not supported prior to GLSL version 1.30
    ERROR: 1:1: error(#263) "Precision qualifier" is not supported prior to GLSL version 1.30
    ERROR: 1:1: error(#263) "Precision qualifier" is not supported prior to GLSL version 1.30
    ERROR: error(#273) 5 compilation errors.  No code generated
    
    
    *** Problematic Vertex shader source code ***
    #line 1
    attribute highp vec3 vertexCoord;attribute highp vec2 textureCoord;varying highp vec2 uv;uniform highp mat4 vertexTransform;uniform highp mat3 textureTransform;void main() {   uv = (textureTransform * vec3(textureCoord,1.0)).xy;   gl_Position = vertexTransform * vec4(vertexCoord,1.0);}
    ***
    Could not link shader program:
     "Vertex shader failed to compile with the following errors:\nERROR: 1:1: error(#263) \"Precision qualifier\" is not supported prior to GLSL version 1.30\nERROR: 1:1: error(#263) \"Precision qualifier\" is not supported prior to GLSL version 1.30\nERROR: 1:1: error(#263) \"Precision qualifier\" is not supported prior to GLSL version 1.30\nERROR: 1:1: error(#263) \"Precision qualifier\" is not supported prior to GLSL version 1.30\nERROR: 1:1: error(#263) \"Precision qualifier\" is not supported prior to GLSL version 1.30\nERROR: error(#273) 5 compilation errors.  No code generated\n\n"
    QOpenGLShader::compile(Vertex): Vertex shader failed to compile with the following errors:
    ERROR: 1:1: error(#263) "Precision qualifier" is not supported prior to GLSL version 1.30
    ERROR: 1:1: error(#263) "Precision qualifier" is not supported prior to GLSL version 1.30
    ERROR: 1:1: error(#263) "Precision qualifier" is not supported prior to GLSL version 1.30
    ERROR: 1:1: error(#263) "Precision qualifier" is not supported prior to GLSL version 1.30
    ERROR: 1:1: error(#263) "Precision qualifier" is not supported prior to GLSL version 1.30
    ERROR: error(#273) 5 compilation errors.  No code generated
    

    the above error continues multiple times Sorry, no idea about any of this

    bug frontend: OpenGL stability 
    opened by dbpaul 17
  • Allow build on FreeBSD

    Allow build on FreeBSD

    These are some fixes for making contour compile on FreeBSD. Mostly things where Linux was assumed.

    Build with autogen.sh does not work because of the broken shebang (which I didn't bother fixing). Thus build manually with cmake:

    $ cmake -G'Unix Makefiles' -Bbuild .

    Everything seems fine so far, except changing the font. That causes a floating point exception. I may do some further debugging to try and figure out what is going on there.

    I don't know if the change in UnixPty.h:108 causes any trouble because of const correctness. The prototype of openpty on FreeBSD is :

     int
     openpty(int *amaster, int *aslave, char *name, struct termios *termp,
             struct winsize *winp);
    

    (see https://www.freebsd.org/cgi/man.cgi?query=openpty&apropos=0&sektion=0&manpath=FreeBSD+13.0-RELEASE+and+Ports&arch=default&format=html ). The compiler complains about the discarded const which causes the candidade to be disregarded.

    In case the changes get merged and the floating point exception fixed, I may bring contour to the FreeBSD Ports.

    VT: Backend 
    opened by herrhotzenplotz 16
  • "Calculated current line does not match" followed by assert()

    Description

    NOTE: i just realized i was using TERM=vte-256color throughout. I'm going to switch to TERM=contour/TERM=contour-latest and try again. Nonetheless, I wouldn't expect segfaults from improper escape codes, if that's what was happening.

    Running contour from tip of master 2021-04-19 5daf772d99cb17319ee6426df03c6a013d4e27a8 on Compiz 0.8 on Linux 5.11.15, Debian Unstable. I'm the author of Notcurses, a "blingful TUI library". I was trying out contour by running notcurses-demo from my 2.2.8 release (same behavior with tip of master). During the first demo, intro, I get the following output:

    ==================================================================================================================================
    Calculated current line does not match.
    ==================================================================================================================================
    Rendered screen at the time of failure: 130x64
    cursor position      : (64:1, (invis))
    vertical margins     : 1..64
    horizontal margins   : 1..130
    ==================================================================================================================================
    

    followed by

    contour: ../src/terminal/Screen.cpp:517: void terminal::Screen::fail(const string&) const: Assertion `false' failed.
    

    The same thing happened with most of my other example programs. pixel ../data/warmech.bmp elicited:

    ==================================================================================================================================
    Calculated current line does not match.
    ==================================================================================================================================
    Rendered screen at the time of failure: 130x30
    cursor position      : (10:1, (invis))
    vertical margins     : 1..30
    horizontal margins   : 1..130
    ==================================================================================================================================
    

    followed by the same assertion failure. Both of these programs were driving Sixels. I then ran a non-Sixel program, and got a straight segfault (zalgo, exercising some complex Unicode):

    [schwarzgerat](0) $ valgrind --tool=memcheck src/contour/contour
    ==511403== Memcheck, a memory error detector
    ==511403== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
    ==511403== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
    ==511403== Command: src/contour/contour
    ==511403== 
    ==511403== Warning: noted but unhandled ioctl 0x5441 with no size/direction hints.
    ==511403==    This could cause spurious value errors to appear.
    ==511403==    See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper.
    ==511403== Warning: unimplemented fcntl command: 1033
    ==511403== Invalid write of size 4
    ==511403==    at 0x2F3123: unicode::script_segmenter::mergeSets(unicode::fs_array<unicode::Script, 32ul> const&, unicode::fs_array<unicode::Script, 32ul>&) (script_segmenter.cpp:97)
    ==511403==    by 0x2F2C31: unicode::script_segmenter::consume() (script_segmenter.cpp:31)
    ==511403==    by 0x2B8733: unicode::script_segmenter::consume(unicode::out<unsigned long>, unicode::out<unicode::Script>) (script_segmenter.h:57)
    ==511403==    by 0x2BDC1E: void unicode::basic_run_segmenter<unicode::script_segmenter, unicode::emoji_segmenter>::consumeUntilSplitPosition<unicode::script_segmenter, unicode::Script>(unicode::script_segmenter&, unicode::out<unsigned long>, unicode::out<unicode::Script>) (run_segmenter.h:164)
    ==511403==    by 0x2BC14B: void unicode::basic_run_segmenter<unicode::script_segmenter, unicode::emoji_segmenter>::consumeAllUntilSplitPosition<0ul, unicode::script_segmenter, unicode::emoji_segmenter>() (run_segmenter.h:143)
    ==511403==    by 0x2B9AE4: unicode::basic_run_segmenter<unicode::script_segmenter, unicode::emoji_segmenter>::consume(unicode::out<unicode::basic_run_segmenter<unicode::script_segmenter, unicode::emoji_segmenter>::range>) (run_segmenter.h:112)
    ==511403==    by 0x2B6364: terminal::renderer::TextRenderer::requestGlyphPositions() (TextRenderer.cpp:192)
    ==511403==    by 0x3700000036: ???
    ==511403==    by 0x3700000036: ???
    ==511403==    by 0x3700000036: ???
    ==511403==    by 0x3700000036: ???
    ==511403==    by 0x3700000036: ???
    ==511403==  Address 0x1fff001000 is not stack'd, malloc'd or (recently) free'd
    ==511403== 
    ==511403== 
    ==511403== Process terminating with default action of signal 11 (SIGSEGV): dumping core
    ==511403==  Access not within mapped region at address 0x1FFF001000
    ==511403==    at 0x2F3123: unicode::script_segmenter::mergeSets(unicode::fs_array<unicode::Script, 32ul> const&, unicode::fs_array<unicode::Script, 32ul>&) (script_segmenter.cpp:97)
    ==511403==    by 0x2F2C31: unicode::script_segmenter::consume() (script_segmenter.cpp:31)
    ==511403==    by 0x2B8733: unicode::script_segmenter::consume(unicode::out<unsigned long>, unicode::out<unicode::Script>) (script_segmenter.h:57)
    ==511403==    by 0x2BDC1E: void unicode::basic_run_segmenter<unicode::script_segmenter, unicode::emoji_segmenter>::consumeUntilSplitPosition<unicode::script_segmenter, unicode::Script>(unicode::script_segmenter&, unicode::out<unsigned long>, unicode::out<unicode::Script>) (run_segmenter.h:164)
    ==511403==    by 0x2BC14B: void unicode::basic_run_segmenter<unicode::script_segmenter, unicode::emoji_segmenter>::consumeAllUntilSplitPosition<0ul, unicode::script_segmenter, unicode::emoji_segmenter>() (run_segmenter.h:143)
    ==511403==    by 0x2B9AE4: unicode::basic_run_segmenter<unicode::script_segmenter, unicode::emoji_segmenter>::consume(unicode::out<unicode::basic_run_segmenter<unicode::script_segmenter, unicode::emoji_segmenter>::range>) (run_segmenter.h:112)
    ==511403==    by 0x2B6364: terminal::renderer::TextRenderer::requestGlyphPositions() (TextRenderer.cpp:192)
    ==511403==    by 0x3700000036: ???
    ==511403==    by 0x3700000036: ???
    ==511403==    by 0x3700000036: ???
    ==511403==    by 0x3700000036: ???
    ==511403==    by 0x3700000036: ???
    ==511403==  If you believe this happened as a result of a stack
    ==511403==  overflow in your program's main thread (unlikely but
    ==511403==  possible), you can try to increase the size of the
    ==511403==  main thread stack using the --main-stacksize= flag.
    ==511403==  The main thread stack size used in this run was 8388608.
    ==511403== 
    ==511403== HEAP SUMMARY:
    ==511403==     in use at exit: 61,971,679 bytes in 41,185 blocks
    ==511403==   total heap usage: 278,637 allocs, 237,452 frees, 5,313,727,825 bytes allocated
    ==511403== 
    ==511403== LEAK SUMMARY:
    ==511403==    definitely lost: 26,148 bytes in 71 blocks
    ==511403==    indirectly lost: 31,283 bytes in 324 blocks
    ==511403==      possibly lost: 46,388,796 bytes in 109 blocks
    ==511403==    still reachable: 15,472,036 bytes in 40,241 blocks
    ==511403==                       of which reachable via heuristic:
    ==511403==                         length64           : 2,328 bytes in 42 blocks
    ==511403==                         newarray           : 1,936 bytes in 41 blocks
    ==511403==                         multipleinheritance: 104 bytes in 1 blocks
    ==511403==         suppressed: 0 bytes in 0 blocks
    ==511403== Rerun with --leak-check=full to see details of leaked memory
    ==511403== 
    ==511403== For lists of detected and suppressed errors, rerun with: -s
    ==511403== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
    Segmentation fault
    [schwarzgerat](139) $ 
    

    Environment

    See information above, especially regarding TERM.

    Steps to Reproduce

    See above. I'm happy to run valgrind/gdb/whatever to help you out, subject to time demands from elsewhere, but we're all in on this terminal ecosystem together =].

    opened by dankamongmen 16
  • improve VT text processing efficiency

    improve VT text processing efficiency

    This is a draft PoC PR.

    Goals:

    • less resource usage on RenderBuffer array of RenderCell's, also in order to reduce locking time on TE backend.
    • extend trivial line optimization from US ASCII to non US-ASCII text.
    VT: Backend test VT: renderer 
    opened by christianparpart 0
  • cursor can become invisible if foreground == background

    cursor can become invisible if foreground == background

    Just realized in vim, that sometimes the (here: block-)cursor's foreground color and background color may become the same (?) and that leads to an invisible cursor when placed over a whitespace (in my configuration). More input to be investigated.

    bug VT: renderer 
    opened by christianparpart 0
  • OpenGL (ES) Rendering using Computer Shader

    OpenGL (ES) Rendering using Computer Shader

    Okay, that'll be a big one (due to code change count implications), but I think it's worth looking into that.

    zutty is the first terminal emulator, kind of PoC, to demo rendering monospaced glyphs using a Compute Shader.

    Maybe, since the render target is abstracted, I could provide that as an alternative renderer such that a configuration option could be used to switch between the new renderer and the existing renderer.

    enhancement frontend frontend: OpenGL performance OpenGL 
    opened by christianparpart 0
  • customizable statusbar

    customizable statusbar

    • Should need usually at the bottom
    • a reserved grid line at the bottom
    • by default not accessible via VT writes

    Could contain things like:

    • active buffer
    • active modes of interest
    • input mode (insert, normal, visual...)
    • show the system date/time
    • timespan since last activity (idle time)
    • mouse hover information like codepoints
    • ...?

    IIRC there was even a VT sequence in the physical VT hardware.

    • https://vt100.net/docs/vt510-rm/DECSASD.html
    • https://vt100.net/docs/vt510-rm/DECSSDT.html
    enhancement VT: Backend feature-request 
    opened by christianparpart 1
  • Hard crash when fontconfig has defined alias for specific font family

    Hard crash when fontconfig has defined alias for specific font family

    Contour Terminal version

    Contour Terminal Emulator 0.3.2-unreleased-master-fde55e6b

    Installer source

    Github: source code cloned

    Operating System

    Gentoo

    Architecture

    x86-64

    Other Software

    No response

    Steps to reproduce

    • Use following fontconfig configuration (either changed mapped fonts or make sure you have them on your system
    <?xml version='1.0'?>
    <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
    <fontconfig>
     <its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
      <its:translateRule selector="/fontconfig/*[not(self::description)]" translate="no"/>
     </its:rules>
     <!-- 
     Artificial oblique for fonts without an italic or oblique version
     -->
     <alias>
      <family>SFMono-Regular</family>
      <prefer>
       <family>SF Mono</family>
      </prefer>
     </alias>
     <alias>
      <family>monospace</family>
      <prefer>
       <family>Ubuntu Mono</family>
      </prefer>
     </alias>
     <alias>
      <family>Liberation Mono</family>
      <prefer>
       <family>Ubuntu Mono</family>
      </prefer>
     </alias>
     <alias>
      <family>Liberation</family>
      <prefer>
       <family>Ubuntu</family>
      </prefer>
     </alias>
     <!--  <alias> -->
     <!--      <family>sans-serif</family> -->
     <!--      <prefer><family>Ubuntu</family> -->
     <!--      </prefer> -->
     <!--  </alias> -->
     <!--  -->
     <!--  <alias> -->
     <!--      <family>Helvetica</family> -->
     <!--      <prefer><family>DejaVu Sans</family> -->
     <!--      </prefer> -->
     <!--  </alias> -->
     <match target="font">
      <!-- check to see if the font is roman -->
      <test name="slant">
       <const>roman</const>
      </test>
      <!-- check to see if the pattern requested non-roman -->
      <test name="slant" target="pattern" compare="not_eq">
       <const>roman</const>
      </test>
      <!-- multiply the matrix to slant the font -->
      <edit name="matrix" mode="assign">
       <times>
        <name>matrix</name>
        <matrix>
         <double>1</double>
         <double>0.2</double>
         <double>0</double>
         <double>1</double>
        </matrix>
       </times>
      </edit>
      <!-- pretend the font is oblique now -->
      <edit name="slant" mode="assign">
       <const>oblique</const>
      </edit>
      <!-- and disable embedded bitmaps for artificial oblique -->
      <edit name="embeddedbitmap" mode="assign">
       <bool>false</bool>
      </edit>
     </match>
     <!--
     Synthetic emboldening for fonts that do not have bold face available
     -->
     <match target="font">
      <!-- check to see if the weight in the font is less than medium which possibly need emboldening -->
      <test name="weight" compare="less_eq">
       <const>medium</const>
      </test>
      <!-- check to see if the pattern requests bold -->
      <test name="weight" target="pattern" compare="more_eq">
       <const>bold</const>
      </test>
      <!--
    		  set the embolden flag
    		  needed for applications using cairo, e.g. gucharmap, gedit, ...
    		-->
      <edit name="embolden" mode="assign">
       <bool>true</bool>
      </edit>
      <!--
    		 set weight to bold
    		 needed for applications using Xft directly, e.g. Firefox, ...
    		-->
      <edit name="weight" mode="assign">
       <const>bold</const>
      </edit>
     </match>
     <match target="font">
      <edit name="rgba" mode="assign">
       <const>vrgb</const>
      </edit>
     </match>
     <match target="font">
      <edit name="hinting" mode="assign">
       <bool>true</bool>
      </edit>
     </match>
     <match target="font">
      <edit name="hintstyle" mode="assign">
       <const>hintslight</const>
      </edit>
     </match>
     <match target="font">
      <edit name="lcdfilter" mode="assign">
       <const>lcdlight</const>
      </edit>
     </match>
     <dir>~/.fonts</dir>
     <match target="font">
      <edit name="antialias" mode="assign">
       <bool>true</bool>
      </edit>
     </match>
    </fontconfig>
    
    • Use default contour configuration

    Expected Behavior

    Should load the aliased font family

    Actual Behavior

    Hard crashes with lovely stack trace

    Contour version: 0.3.2-unreleased-master-fde55e6b
    
    Stack Trace:
    ------------
    /home/uros/workspace/contour/src/crispy/StackTrace.cpp:90
    /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.1/include/g++-v11/bits/stl_vector.h:98
    /home/uros/workspace/contour/src/contour/ContourApp.cpp:76
    /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.1/include/g++-v11/sstream:1136
    0x7f4f0937cb40
    0x7f4f093c872c
    0x7f4f0937caa2
    0x7f4f09367449
    /home/uros/workspace/contour/src/contour/CaptureScreen.cpp:89
    /home/uros/workspace/contour/src/terminal_renderer/DecorationRenderer.cpp:145
    /home/uros/workspace/contour/src/terminal_renderer/DecorationRenderer.cpp:83
    /home/uros/workspace/contour/src/terminal_renderer/DecorationRenderer.cpp:68
    /home/uros/workspace/contour/src/terminal_renderer/Renderer.cpp:208
    /home/uros/workspace/contour/src/terminal_renderer/Renderer.cpp:180
    /home/uros/workspace/contour/src/contour/opengl/TerminalWidget.cpp:520
    0x7f4f0a891504
    0x7f4f0a87272c
    /home/uros/workspace/contour/src/contour/opengl/TerminalWidget.cpp:702
    0x7f4f0a82e93f
    0x7f4f09bfcf78
    0x7f4f0a869a6c
    0x7f4f0a86e5d3
    0x7f4f0a871793
    0x7f4f0a86e559
    0x7f4f0a86e5ef
    0x7f4f0a871793
    0x7f4f0a86e559
    0x7f4f0a86e5ef
    0x7f4f0a871793
    /home/uros/workspace/contour/src/contour/ContourGuiApp.cpp:383
    /home/uros/workspace/contour/src/contour/ContourGuiApp.cpp:339
    /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.1/include/g++-v11/bits/std_function.h:292
    /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.1/include/g++-v11/bits/std_function.h:590
    /home/uros/workspace/contour/src/contour/ContourGuiApp.cpp:67
    /home/uros/workspace/contour/src/contour/main.cpp:97
    0x7f4f093681ca
    0x7f4f09368278
    ??:?
    

    Additional notes

    No response

    bug 
    opened by uspasojevic96 0
Releases(v0.3.1.200)
  • v0.3.1.200(May 1, 2022)

    TL;DR This release is important as it's fixing some rendering bug. Most proudly however is to be presented the introduction of different vi-like input modes, that can be used to quickly copy'n'paste and move around in the grid buffer using the well known vi motions.

    • Adds Vi-like input modes for improved selection and copy'n'paste experience.
    • Adds contour executable to search path for spawned shell process on OS/X 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 reuqested 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 behaviour of full-line selection to include a trailing linefeed for the last line (#641).
    • Changes behaviour 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).
    Source code(tar.gz)
    Source code(zip)
    contour-0.3.1.200-1.fc35.x86_64.rpm(867.54 KB)
    contour-0.3.1.200-osx.dmg(13.68 MB)
    contour-0.3.1.200-osx.zip(12.76 MB)
    contour-0.3.1.200-win64.msi(21.97 MB)
    contour-0.3.1.200-win64.zip(21.75 MB)
    contour-dbgsym_0.3.1.200-ubuntu_18_04_amd64.ddeb(28.56 MB)
    contour-dbgsym_0.3.1.200-ubuntu_20_04_amd64.ddeb(30.46 MB)
    contour-debuginfo-0.3.1.200-1.fc35.x86_64.rpm(16.35 MB)
    contour-debugsource-0.3.1.200-1.fc35.x86_64.rpm(611.18 KB)
    contour_0.3.1.200-archlinux_aarch64(1.20 MB)
    contour_0.3.1.200-archlinux_x86_64(1.20 MB)
    contour_0.3.1.200-ubuntu_18_04_amd64.deb(935.35 KB)
    contour_0.3.1.200-ubuntu_20_04_amd64.deb(745.64 KB)
  • v0.3.0.198(Apr 18, 2022)

    TL;DR 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 behaviour.
    • 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).
    Source code(tar.gz)
    Source code(zip)
    contour-0.3.0.198-1.fc35.x86_64.rpm(855.82 KB)
    contour-0.3.0.198-osx.dmg(13.67 MB)
    contour-0.3.0.198-osx.zip(12.74 MB)
    contour-0.3.0.198-win64.msi(21.96 MB)
    contour-0.3.0.198-win64.zip(21.75 MB)
    contour-dbgsym_0.3.0.198-ubuntu_18_04_amd64.ddeb(27.80 MB)
    contour-dbgsym_0.3.0.198-ubuntu_20_04_amd64.ddeb(29.67 MB)
    contour-debuginfo-0.3.0.198-1.fc35.x86_64.rpm(16.03 MB)
    contour-debugsource-0.3.0.198-1.fc35.x86_64.rpm(603.49 KB)
    contour_0.3.0.198-archlinux_aarch64(1.18 MB)
    contour_0.3.0.198-archlinux_x86_64(1.18 MB)
    contour_0.3.0.198-ubuntu_18_04_amd64.deb(917.38 KB)
    contour_0.3.0.198-ubuntu_20_04_amd64.deb(737.74 KB)
  • v0.2.3.183(Jan 8, 2022)

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

    • Fixes installation from .deb (missing terminfo dependency)
    • 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).
    Source code(tar.gz)
    Source code(zip)
    contour-0.2.3.183-1.fc35.x86_64.rpm(863.18 KB)
    contour-0.2.3.183-osx.dmg(13.66 MB)
    contour-0.2.3.183-osx.zip(12.75 MB)
    contour-0.2.3.183-win64.msi(22.54 MB)
    contour-0.2.3.183-win64.zip(22.32 MB)
    contour-dbgsym_0.2.3.183-ubuntu_18_04_amd64.ddeb(18.44 MB)
    contour-dbgsym_0.2.3.183-ubuntu_20_04_amd64.ddeb(26.53 MB)
    contour-debuginfo-0.2.3.183-1.fc35.x86_64.rpm(15.36 MB)
    contour-debugsource-0.2.3.183-1.fc35.x86_64.rpm(751.58 KB)
    contour_0.2.3.183-archlinux_aarch64(1.16 MB)
    contour_0.2.3.183-archlinux_x86_64(1.16 MB)
    contour_0.2.3.183-ubuntu_18_04_amd64.deb(764.71 KB)
    contour_0.2.3.183-ubuntu_20_04_amd64.deb(736.75 KB)
  • v0.2.3.182(Dec 12, 2021)

    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).
    Source code(tar.gz)
    Source code(zip)
    contour-0.2.3.182-1.fc35.x86_64.rpm(863.12 KB)
    contour-0.2.3.182-osx.dmg(13.66 MB)
    contour-0.2.3.182-osx.zip(12.75 MB)
    contour-0.2.3.182-win64.msi(22.54 MB)
    contour-0.2.3.182-win64.zip(22.32 MB)
    contour-dbgsym_0.2.3.182-ubuntu_18_04_amd64.ddeb(18.44 MB)
    contour-dbgsym_0.2.3.182-ubuntu_20_04_amd64.ddeb(26.53 MB)
    contour-debuginfo-0.2.3.182-1.fc35.x86_64.rpm(15.36 MB)
    contour-debugsource-0.2.3.182-1.fc35.x86_64.rpm(751.64 KB)
    contour_0.2.3.182-archlinux_aarch64(1.12 MB)
    contour_0.2.3.182-archlinux_x86_64(1.12 MB)
    contour_0.2.3.182-ubuntu_18_04_amd64.deb(764.62 KB)
    contour_0.2.3.182-ubuntu_20_04_amd64.deb(736.80 KB)
  • v0.2.2.175(Nov 18, 2021)

    • Fixes input mapping containing Control modifier.
    • Fixes input mapping mode Select being ignored.
    • Fixes Modifier+Enter input mapping not being catched.
    • 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.
    Source code(tar.gz)
    Source code(zip)
    contour-0.2.2.175-osx.dmg(13.64 MB)
    contour-0.2.2.175-osx.zip(12.73 MB)
    contour-0.2.2.175-win64.msi(22.53 MB)
    contour-0.2.2.175-win64.zip(22.31 MB)
    contour-dbgsym_0.2.2.175-ubuntu_18_04_amd64.ddeb(17.90 MB)
    contour-dbgsym_0.2.2.175-ubuntu_20_04_amd64.ddeb(25.78 MB)
    contour_0.2.2.175-archlinux_aarch64(1.09 MB)
    contour_0.2.2.175-archlinux_x86_64(1.09 MB)
    contour_0.2.2.175-ubuntu_18_04_amd64.deb(742.86 KB)
    contour_0.2.2.175-ubuntu_20_04_amd64.deb(715.50 KB)
  • v0.2.1.174(Nov 14, 2021)

    • Reverts change from 0.2.0: "Changes behaviour 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 exernal 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 OS/X 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 OS/X (#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 envionment 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.
    Source code(tar.gz)
    Source code(zip)
    contour-0.2.1.174-osx.dmg(13.63 MB)
    contour-0.2.1.174-osx.zip(12.72 MB)
    contour-0.2.1.174-win64.msi(22.53 MB)
    contour-0.2.1.174-win64.zip(22.30 MB)
    contour-dbgsym_0.2.1.174-ubuntu_18_04_amd64.ddeb(17.83 MB)
    contour-dbgsym_0.2.1.174-ubuntu_20_04_amd64.ddeb(25.52 MB)
    contour_0.2.1.174-archlinux_aarch64(1.08 MB)
    contour_0.2.1.174-archlinux_x86_64(1.08 MB)
    contour_0.2.1.174-ubuntu_18_04_amd64.deb(737.51 KB)
    contour_0.2.1.174-ubuntu_20_04_amd64.deb(710.87 KB)
  • v0.2.0.173(Aug 17, 2021)

    • 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 behaviour 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 seperated 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 OS/X).
    • 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.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 respone 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 integreation file for the given shell (only zsh supported for now). Also adds a pre-generated shell integration file for Linux (and OS/X) to /usr/share/contour/shell-integration.zsh.
    • Unicode data updated to version 14.0 beta. See https://home.unicode.org/unicode-14-0-beta-review.
    • Adds support for building with Qt 6 (disabled by default).
    • Adds support for building with mimalloc (experimental, disabled by default).
    Source code(tar.gz)
    Source code(zip)
    contour-0.2.0.173-osx.dmg(13.67 MB)
    contour-0.2.0.173-osx.zip(12.76 MB)
    contour-0.2.0.173-win64.msi(22.51 MB)
    contour-0.2.0.173-win64.zip(22.28 MB)
    contour-dbgsym_0.2.0.173-ubuntu_18_04_amd64.ddeb(17.67 MB)
    contour-dbgsym_0.2.0.173-ubuntu_20_04_amd64.ddeb(24.45 MB)
    contour_0.2.0.173-archlinux_aarch64(1.02 MB)
    contour_0.2.0.173-archlinux_x86_64(1.02 MB)
    contour_0.2.0.173-ubuntu_18_04_amd64.deb(721.76 KB)
    contour_0.2.0.173-ubuntu_20_04_amd64.deb(687.11 KB)
  • v0.2.0.171_rc2(Aug 17, 2021)

    Changes since rc1

    • change versioning scheme, adding 4th component to reflect current CI run number
    • Last-resort font fallback to shape each grapheme cluster individually to increase success rate
    • VS16 always having width 2
    • configuration log messages improved
    • glitch in box drawing arcs fixed
    • revive Alt + mouse button input mapping with a temporary workaround
    • Fixes some XTSMGRAPHICS properties.
    • Changed "Bright black" RGB color from #000000 to #707070.
    • Set default terminal size to 80x25 (was 130x30).
    • Mac OS/X: Default shell changed to login -fp $USERNAME (was: login shell as reported by getpwuid($uid)
    Source code(tar.gz)
    Source code(zip)
    contour-0.2.0.171-osx.dmg(13.67 MB)
    contour-0.2.0.171-osx.zip(12.76 MB)
    contour-0.2.0.171-win64.msi(22.51 MB)
    contour-0.2.0.171-win64.zip(22.28 MB)
    contour-dbgsym_0.2.0.171-ubuntu_18_04_amd64.ddeb(17.68 MB)
    contour-dbgsym_0.2.0.171-ubuntu_20_04_amd64.ddeb(24.45 MB)
    contour_0.2.0.171-archlinux_aarch64(1.02 MB)
    contour_0.2.0.171-archlinux_x86_64(1.02 MB)
    contour_0.2.0.171-ubuntu_18_04_amd64.deb(721.69 KB)
    contour_0.2.0.171-ubuntu_20_04_amd64.deb(687.69 KB)
  • v0.2.0_rc1(Aug 13, 2021)

    • 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.
    • 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 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 seperated 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 OS/X).
    • 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.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 respone 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 integreation file for the given shell (only zsh supported for now). Also adds a pre-generated shell integration file for Linux (and OS/X) to /usr/share/contour/shell-integration.zsh.
    • Unicode data updated to version 14.0 beta. See https://home.unicode.org/unicode-14-0-beta-review.
    • Adds support for building with Qt 6 (disabled by default).
    • Adds support for building with mimalloc (experimental, disabled by default).
    Source code(tar.gz)
    Source code(zip)
    contour-0.2.0-148-osx.dmg(13.69 MB)
    contour-0.2.0-148-osx.zip(12.78 MB)
    contour-0.2.0-148-win64.msi(22.51 MB)
    contour-0.2.0-148-win64.zip(22.29 MB)
    contour-dbgsym_0.2.0-148-ubuntu_18_04_amd64.ddeb(17.68 MB)
    contour-dbgsym_0.2.0-148-ubuntu_20_04_amd64.ddeb(24.50 MB)
    contour_0.2.0-148-archlinux_aarch64(1.01 MB)
    contour_0.2.0-148-archlinux_x86_64(1.01 MB)
    contour_0.2.0-148-ubuntu_18_04_amd64.deb(722.46 KB)
    contour_0.2.0-148-ubuntu_20_04_amd64.deb(688.22 KB)
  • v0.1.1(Dec 31, 2020)

    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>.
    Source code(tar.gz)
    Source code(zip)
    contour-0.1.1-132-osx.dmg(13.19 MB)
    contour-0.1.1-132-osx.zip(12.28 MB)
    contour-0.1.1-132-win64.msi(21.39 MB)
    contour-0.1.1-132-win64.zip(21.16 MB)
    contour-dbgsym_0.1.1-132-ubuntu_18_04_amd64.ddeb(16.57 MB)
    contour-dbgsym_0.1.1-132-ubuntu_20_04_amd64.ddeb(16.65 MB)
    contour_0.1.1-132-ubuntu_18_04_amd64.deb(426.52 KB)
    contour_0.1.1-132-ubuntu_20_04_amd64.deb(427.99 KB)
  • v0.1.0(Dec 24, 2020)

    • Fixes some off-by-one access in libunicode.

    prerelease 6

    • Fixes MacOS/X handling of modifiers (and startup).

    prerelease 5

    • Adds VT sequence CSI 16 t for retrieving cell dimension in pixels.

    prerelease 4

    • Fixes vertical position of text from fallback fonts with different baseline.
    • Fixes Single-click into the window accidentally starting a selection.
    • Fixes font family change in live config reload.
    • Fixes config initial_working_directory's' ~ (tilde) expansion failing to chdir, if followed by a /.
    • Refactoring various internal parts to improve code quality.
    • Adds scrollbar and configuration for scrollbar.
    • Adds input mapping for Shift+Tab (CSI Z)
    • Adds VT sequence CHT.
    • Adds VT sequence SM/RM ?40 (Allow 80 -> 132 Mode).
    • Adds VT sequence DECSCPP

    prerelease 3

    • Fixes missing .exe files in windows installer

    prerelease 2

    • initial_working_directory config option added
    • Selection improved, and selection.foreground and selection.background config options added to color profile
    • VT mouse protocol fixes in vim
    • Debian packages now contain application image and .desktop file
    • Implements OSC 117 and OSC 119 (resetting selection text/background color to application defaults).

    General Features

    • Available on all 3 major platforms, Linux, OS/X, 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 behaviours)
    • Clickable hyperlinks via OSC 8
    • Sixel inline images
    Source code(tar.gz)
    Source code(zip)
    contour-0.1.0-128-osx.dmg(13.18 MB)
    contour-0.1.0-128-osx.zip(12.28 MB)
    contour-0.1.0-128-win64.msi(21.39 MB)
    contour-0.1.0-128-win64.zip(21.16 MB)
    contour-dbgsym_0.1.0-128-ubuntu_18_04_amd64.ddeb(16.54 MB)
    contour-dbgsym_0.1.0-128-ubuntu_20_04_amd64.ddeb(16.63 MB)
    contour_0.1.0-128-ubuntu_18_04_amd64.deb(424.89 KB)
    contour_0.1.0-128-ubuntu_20_04_amd64.deb(425.71 KB)
  • v0.1.0_prerelease_126(Dec 21, 2020)

    prerelease 6

    • Fixes MacOS/X handling of modifiers (and startup).

    prerelease 5

    • Adds VT sequence CSI 16 t for retrieving cell dimension in pixels.

    prerelease 4

    • Fixes vertical position of text from fallback fonts with different baseline.
    • Fixes Single-click into the window accidentally starting a selection.
    • Fixes font family change in live config reload.
    • Fixes config initial_working_directory's' ~ (tilde) expansion failing to chdir, if followed by a /.
    • Refactoring various internal parts to improve code quality.
    • Adds scrollbar and configuration for scrollbar.
    • Adds input mapping for Shift+Tab (CSI Z)
    • Adds VT sequence CHT.
    • Adds VT sequence SM/RM ?40 (Allow 80 -> 132 Mode).
    • Adds VT sequence DECSCPP

    prerelease 3

    • Fixes missing .exe files in windows installer

    prerelease 2

    • initial_working_directory config option added
    • Selection improved, and selection.foreground and selection.background config options added to color profile
    • VT mouse protocol fixes in vim
    • Debian packages now contain application image and .desktop file
    • Implements OSC 117 and OSC 119 (resetting selection text/background color to application defaults).

    General Features

    • Available on all 3 major platforms, Linux, OS/X, 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 behaviours)
    • Clickable hyperlinks via OSC 8
    • Sixel inline images
    Source code(tar.gz)
    Source code(zip)
    contour-0.1.0-126-osx.dmg(13.18 MB)
    contour-0.1.0-126-osx.zip(12.28 MB)
    contour-0.1.0-126-win64.msi(21.39 MB)
    contour-0.1.0-126-win64.zip(21.16 MB)
    contour-dbgsym_0.1.0-126-ubuntu_18_04_amd64.ddeb(16.37 MB)
    contour-dbgsym_0.1.0-126-ubuntu_20_04_amd64.ddeb(16.46 MB)
    contour_0.1.0-126-ubuntu_18_04_amd64.deb(423.92 KB)
    contour_0.1.0-126-ubuntu_20_04_amd64.deb(425.42 KB)
  • v0.1.0_prerelease_122(Dec 18, 2020)

    prerelease 5

    • Adds VT sequence CSI 16 t for retrieving cell dimension in pixels.

    prerelease 4

    • Fixes vertical position of text from fallback fonts with different baseline.
    • Fixes Single-click into the window accidentally starting a selection.
    • Fixes font family change in live config reload.
    • Fixes config initial_working_directory's' ~ (tilde) expansion failing to chdir, if followed by a /.
    • Refactoring various internal parts to improve code quality.
    • Adds scrollbar and configuration for scrollbar.
    • Adds input mapping for Shift+Tab (CSI Z)
    • Adds VT sequence CHT.
    • Adds VT sequence SM/RM ?40 (Allow 80 -> 132 Mode).
    • Adds VT sequence DECSCPP

    prerelease 3

    • Fixes missing .exe files in windows installer

    prerelease 2

    • initial_working_directory config option added
    • Selection improved, and selection.foreground and selection.background config options added to color profile
    • VT mouse protocol fixes in vim
    • Debian packages now contain application image and .desktop file
    • Implements OSC 117 and OSC 119 (resetting selection text/background color to application defaults).

    General Features

    • Available on all 3 major platforms, Linux, OS/X, 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 behaviours)
    • Clickable hyperlinks via OSC 8
    • Sixel inline images
    Source code(tar.gz)
    Source code(zip)
    contour-0.1.0-122-osx.dmg(13.18 MB)
    contour-0.1.0-122-osx.zip(12.28 MB)
    contour-0.1.0-122-win64.msi(21.39 MB)
    contour-0.1.0-122-win64.zip(21.16 MB)
    contour-dbgsym_0.1.0-122-ubuntu_18_04_amd64.ddeb(16.26 MB)
    contour-dbgsym_0.1.0-122-ubuntu_20_04_amd64.ddeb(16.35 MB)
    contour_0.1.0-122-ubuntu_18_04_amd64.deb(423.87 KB)
    contour_0.1.0-122-ubuntu_20_04_amd64.deb(424.89 KB)
  • v0.1.0_prerelease_120(Dec 15, 2020)

    prerelease 4

    • Fixes vertical position of text from fallback fonts with different baseline.
    • Fixes Single-click into the window accidentally starting a selection.
    • Fixes font family change in live config reload.
    • Fixes config initial_working_directory's' ~ (tilde) expansion failing to chdir, if followed by a /.
    • Refactoring various internal parts to improve code quality.
    • Adds scrollbar and configuration for scrollbar.
    • Adds input mapping for Shift+Tab (CSI Z)
    • Adds VT sequence CHT.
    • Adds VT sequence SM/RM ?40 (Allow 80 -> 132 Mode).
    • Adds VT sequence DECSCPP

    prerelease 3

    • Fixes missing .exe files in windows installer

    prerelease 2

    • initial_working_directory config option added
    • Selection improved, and selection.foreground and selection.background config options added to color profile
    • VT mouse protocol fixes in vim
    • Debian packages now contain application image and .desktop file
    • Implements OSC 117 and OSC 119 (resetting selection text/background color to application defaults).

    General Features

    • Available on all 3 major platforms, Linux, OS/X, 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 behaviours)
    • Clickable hyperlinks via OSC 8
    • Sixel inline images
    Source code(tar.gz)
    Source code(zip)
    contour-0.1.0-120-osx.dmg(13.24 MB)
    contour-0.1.0-120-osx.zip(12.33 MB)
    contour-0.1.0-120-win64.msi(21.39 MB)
    contour-0.1.0-120-win64.zip(21.16 MB)
    contour-dbgsym_0.1.0-120-ubuntu_18_04_amd64.ddeb(16.23 MB)
    contour-dbgsym_0.1.0-120-ubuntu_20_04_amd64.ddeb(16.31 MB)
    contour_0.1.0-120-ubuntu_18_04_amd64.deb(421.26 KB)
    contour_0.1.0-120-ubuntu_20_04_amd64.deb(422.54 KB)
  • v0.1.0_prerelease_106(Nov 13, 2020)

    Changes since last prerelease

    • windows installer does now contain contour.exe file

    General Features

    • Available on all 3 major platforms, Linux, OS/X, 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 behaviours)
    • Clickable hyperlinks via OSC 8
    • Sixel inline images
    Source code(tar.gz)
    Source code(zip)
    contour-0.1.0-106-osx.dmg(13.23 MB)
    contour-0.1.0-106-osx.zip(12.32 MB)
    contour-0.1.0-106-win64.msi(21.20 MB)
    contour-0.1.0-106-win64.zip(20.99 MB)
    contour-dbgsym_0.1.0-106-ubuntu_18_04_amd64.ddeb(16.44 MB)
    contour-dbgsym_0.1.0-106-ubuntu_20_04_amd64.ddeb(16.51 MB)
    contour_0.1.0-106-ubuntu_18_04_amd64.deb(417.32 KB)
    contour_0.1.0-106-ubuntu_20_04_amd64.deb(418.16 KB)
  • v0.1.0_prerelease_95(Nov 6, 2020)

    Changes since last prerelease

    • initial_working_directory config option added
    • Selection improved, and selection.foreground and selection.background config options added to color profile
    • VT mouse protocol fixes in vim
    • Debian packages now contain application image and .desktop file
    • Implements OSC 117 and OSC 119 (resetting selection text/background color to application defaults).

    General Features

    • Available on all 3 major platforms, Linux, OS/X, 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 behaviours)
    • Clickable hyperlinks via OSC 8
    • Sixel inline images
    Source code(tar.gz)
    Source code(zip)
    contour-0.1.0-95-osx.dmg(13.23 MB)
    contour-0.1.0-95-osx.zip(12.32 MB)
    contour-0.1.0-95-win64.msi(20.70 MB)
    contour-0.1.0-95-win64.zip(20.50 MB)
    contour-dbgsym_0.1.0-95-ubuntu_18_04_amd64.ddeb(16.62 MB)
    contour-dbgsym_0.1.0-95-ubuntu_20_04_amd64.ddeb(16.70 MB)
    contour_0.1.0-95-ubuntu_18_04_amd64.deb(418.37 KB)
    contour_0.1.0-95-ubuntu_20_04_amd64.deb(419.26 KB)
  • v0.1.0_prerelease_85(Oct 30, 2020)

    • Available on all 3 major platforms, Linux, OS/X, 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 behaviours)
    • Clickable hyperlinks via OSC 8
    Source code(tar.gz)
    Source code(zip)
    contour-0.1.0-85-osx.dmg(13.28 MB)
    contour-0.1.0-85-osx.zip(12.38 MB)
    contour-0.1.0-85-win64.msi(20.70 MB)
    contour-0.1.0-85-win64.zip(20.50 MB)
    contour-dbgsym_0.1.0-85-ubuntu_18_04_amd64.ddeb(21.52 MB)
    contour-dbgsym_0.1.0-85-ubuntu_20_04_amd64.ddeb(21.59 MB)
    contour_0.1.0-85-ubuntu_18_04_amd64.deb(395.19 KB)
    contour_0.1.0-85-ubuntu_20_04_amd64.deb(396.65 KB)
Owner
Contour Terminal Emulator
Contour is a terminal emulator aiming at todays power users
Contour Terminal Emulator
Spitfire is a basic terminal language that can exicute code via the terminal.

Spitfire is a basic terminal language that can exicute code via the terminal. It is easy to learn and runs fast, considering that its just a 300 line c++ file.

jhomas tefferson 0 Nov 18, 2021
X terminal emulator rendering through OpenGL ES Compute Shaders

Zutty is a terminal emulator for the X Window System, functionally similar to several other X terminal emulators such as xterm, rxvt and countless others

Tom Szilagyi 207 May 12, 2022
Make your terminal emulator colorful!

libvterm Make your terminal emulator colorful! LibVTerm is an embeddable ANSI C89 (C90) library for parsing ANSI escape sequences. It is constructed i

Kirill GPRB 4 Jan 10, 2022
Small header only C++ library for writing multiplatform terminal applications

Terminal Terminal is small header only library for writing terminal applications. It works on Linux, macOS and Windows (in the native cmd.exe console)

Jupyter Xeus 192 May 5, 2022
:computer: C++ Functional Terminal User Interface. :heart:

FTXUI Functional Terminal (X) User interface A simple C++ library for terminal based user interface. Demo: Feature Functional style. Inspired by [1] a

Arthur Sonzogni 3k May 12, 2022
A little UNIX-inspired terminal application for the Numworks Calculator (not using escher).

L.E. Terminal (let for short) is a little UNIX-inspired terminal for the Numworks Calculator.

Cacahuรจte Sans Sel 18 Apr 27, 2022
Draw sequence diagram in text from terminal.

sequence-diagram-cli Draw seqence diagram from terminal.

null 42 Feb 28, 2022
Terminal calculator made for programmers working with multiple number representations, sizes, and overall close to the bits

Programmer calculator The programmer calculator is a simple terminal tool designed to give maximum efficiency and flexibility to the programmer workin

romes 164 May 8, 2022
The new Windows Terminal and the original Windows console host, all in the same place!

The new Windows Terminal and the original Windows console host, all in the same place!

Microsoft 83.1k May 16, 2022
nยณ The unorthodox terminal file manager

nยณ The unorthodox terminal file manager

Mischievous Meerkat 14.1k May 17, 2022
Graphs the activity of a chia harvester in a linux terminal.

Chia Harvest Graph Monitor for Chia Harvesting Introduction The chiaharvestgraph tool will graph Chia Harvesting activity in a linux terminal. Use a 2

Bram Stolk 219 May 2, 2022
a simple to use linux terminal

a simple to use linux terminal

notaweeb 7 Feb 17, 2022
Collection of human friendly terminal interface for git.

A collection of human friendly terminal user interface for git.

Arthur Sonzogni 60 May 5, 2022
Simple benchmark for terminal output

TermBench This is a simple timing utility you can use to see how slow your terminal program is at parsing escape-sequence-coded color output. It can b

Casey Muratori 169 May 9, 2022
tinytetris - 80x23 terminal tetris

tinytetris - 80x23 terminal tetris

Conor Taylor 1.6k May 9, 2022
A C, C++ and Rust library to draw graphics with pixels in the terminal

A library to draw graphics with pixels in the terminal Who needs a GUI when you have a terminal ? Building To generate libpluto.a, run: $ make To ins

null 67 Apr 9, 2022
๐Ÿ“บ๐Ÿ—ฟ Terminal graphics for the 21st century.

???? Chafa is a command-line utility that converts all kinds of images, including animated GIFs, into sixel or ANSI/Unicode character output that can be displayed in a terminal.

Hans Petter Jansson 1.3k May 5, 2022
Simple Unix Terminal Football Manager-like game.

Superleage 2020/2021 It is a "work in progress" simple game based on some mechanics of Football Manager. The game is in a very early stage of Developm

sewe2000 2 Oct 14, 2021
timg - Terminal Image and Video Viewer

timg - Terminal Image and Video Viewer

Henner Zeller 1.2k May 15, 2022