All Projects → christianparpart → Contour

christianparpart / Contour

Licence: apache-2.0
Modern C++ Terminal Emulator

Projects that are alternatives of or similar to Contour

contour
Modern C++ Terminal Emulator
Stars: ✭ 761 (+298.43%)
Mutual labels:  console, unicode, terminal-emulators
Unicode Bidirectional
A Javascript implementation of the Unicode 9.0.0 Bidirectional Algorithm
Stars: ✭ 35 (-81.68%)
Mutual labels:  library, unicode
Unidump
hexdump(1) for Unicode data
Stars: ✭ 31 (-83.77%)
Mutual labels:  console, unicode
Panwid
A collection of widgets for urwid.
Stars: ✭ 82 (-57.07%)
Mutual labels:  console, library
Slug Generator
Slug Generator Library for PHP, based on Unicode’s CLDR data
Stars: ✭ 740 (+287.43%)
Mutual labels:  library, unicode
Idutf8lib
Idiot's UTF-8 Library
Stars: ✭ 12 (-93.72%)
Mutual labels:  library, unicode
Sheenbidi
A sophisticated implementation of Unicode Bidirectional Algorithm
Stars: ✭ 52 (-72.77%)
Mutual labels:  library, unicode
Ustring
The Hoa\Ustring library.
Stars: ✭ 403 (+110.99%)
Mutual labels:  library, unicode
Xterm.js
A terminal for the web
Stars: ✭ 12,019 (+6192.67%)
Mutual labels:  console, terminal-emulators
Box Cli Maker
Make Highly Customized Boxes for your CLI
Stars: ✭ 115 (-39.79%)
Mutual labels:  console, unicode
Consoleimg
Display images in your developer console!
Stars: ✭ 132 (-30.89%)
Mutual labels:  console, library
Python Progressbar
Progressbar 2 - A progress bar for Python 2 and Python 3 - "pip install progressbar2"
Stars: ✭ 682 (+257.07%)
Mutual labels:  console, library
Terminaltables
Generate simple tables in terminals from a nested list of strings.
Stars: ✭ 685 (+258.64%)
Mutual labels:  console, library
Php Confusable Homoglyphs
A PHP port of https://github.com/vhf/confusable_homoglyphs
Stars: ✭ 27 (-85.86%)
Mutual labels:  library, unicode
Terminology
The best terminal emulator based on the Enlightenment Foundation Libraries
Stars: ✭ 440 (+130.37%)
Mutual labels:  console, terminal-emulators
Libcon.ahk
LibCon - AutoHotkey Library For Console Support
Stars: ✭ 50 (-73.82%)
Mutual labels:  console, library
Criterion
Microbenchmarking for Modern C++
Stars: ✭ 140 (-26.7%)
Mutual labels:  console, library
Console
The Hoa\Console library.
Stars: ✭ 354 (+85.34%)
Mutual labels:  console, library
Upterm
A terminal emulator for the 21st century.
Stars: ✭ 19,441 (+10078.53%)
Mutual labels:  console, terminal-emulators
Zui
⬢ Zsh User Interface library – CGI+DHTML-like rapid application development with Zsh
Stars: ✭ 95 (-50.26%)
Mutual labels:  console, library

Contour - A modern C++ Terminal Emulator

CI Build codecov C++17

alt text

IMPORTANT: THIS PROJECT IS IN ALPHA STAGE & ACTIVE DEVELOPMENT

contour is a modern terminal emulator, for everyday use. It is fully separating emulation from graphical representation for clear separation of concerns but also for special features to come before version 1.0 is released (headless terminal server with GUI & TUI frontends).

Features

  • ✅ Available on all 3 major platforms, Linux, OS/X, Windows.
  • ✅ Unicode: Emoji support (-: 🌈 💝 😛 👪 - including ZWJ, VS15, VS16 emojis :-)
  • ✅ Unicode: Grapheme cluster 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)
  • ✅ Synchronized rendering (via DECSM 2026 / DECRM 2026)
  • ✅ Conditionally block text reflow (via DECSM 2027 / DECRM 2027)
  • ✅ Clickable hyperlinks via OSC 8
  • ✅ Clipboard setting via OSC 52
  • ✅ Sixel inline images

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

word_delimiters: " /\\()\"'-.,:;<>
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.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].