Skip to content

skyter10086/contour

 
 

Repository files navigation

Contour - A modern C++ Terminal Emulator

Build Build codecov C++17

alt text

IMPORANT: THIS PROJECT IS IN ALPHA STAGE & ACTIVE DEVELOPMENT

Purpose

contour is a terminal emulator, for everyday use.

Features

  • Available on all 3 major platforms, Windows, Linux, OS/X.
  • Font Ligatures Support (such as in Fira Code).
  • GPU-accelerated rendering.
  • Blurred behind transparent background when using Windows 10 or KDE window manager on Linux.

Mission Statement

The following is an incomplete list of features that contour does or will support.

  • Available on all three major platforms (Linux, OS/X, Windows 10)
  • Runtime configuration reload
  • Font Ligatures Support (such as in Fira Code)
  • GPU-accelerated rendering
  • 256-color and Truecolor support
  • Key binding customization
  • Color Schemes
  • Profiles (grouped customization of: color scheme, login shell, and related behaviours)
  • Terminal Multiplexer Mode (like TMUX/screen) with a graphical as well as a text based frontend
  • History Search
  • Activity/Inactivity/Bell System Notification
  • Multiple Sessions, Windows, Tabs, Panes (like TMUX/screen)
  • Shell Integration (inspired by iTerm2)
  • Inline Images (inspired by iTerm2, conforming to their custom VT sequences for compatibility)

CLI - Command Line Interface

Contour Terminal Emulator.

Usage:
  contour [OPTIONS ...]

Options:
  -h, --help                  Shows this help and quits.
  -c, --config=PATH           Specifies path to config file to load from (and save to).
                              [~/.config/contour/contour.yml]

Example Configuration File

shell: "ssh ubuntu-vm"

terminalSize:
    columns: 130
    lines: 30

fontSize: 12
fontFamily: "Fira Code, Hack, Cascadia Code, Ubuntu Mono, Consolas, monospace"
tabWidth: 8

history:
    limit: 8000
    scrollMultiplier: 3
    autoScrollOnUpdate: true

cursor:
    shape: block
    blinking: true

background:
    opacity: 0.9
    blur: false

logging:
    file: "/path/to/contour.log"
    parseErrors: true
    invalidOutput: true
    unsupportedOutput: true
    rawInput: false
    rawOutput: false
    traceInput: false
    traceOutput: false

colors: # Color scheme: 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: [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 }

Installing from source

Prerequisites Linux

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

apt install libfreetype6-dev libglew-dev libglfw3-dev libglm-dev libfontconfig1-dev libharfbuzz-dev

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

apt install libx11-dev

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

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 glew glfw3 glm harfbuzz

Prerequisites Mac OS/X

brew install freetype fontconfig glew glfw3 glm harfbuzz boost

References

About

Modern C++ Terminal Emulator

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 97.0%
  • CMake 2.3%
  • Shell 0.7%