1
1
mirror of https://github.com/wez/wezterm.git synced 2024-12-23 05:12:40 +03:00
A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
Go to file
Wez Furlong 6c75ff4146 Use brighter version of ANSI color when bold enabled
This is one of the main reasons that I started to build my
own terminal emulator :-p
2018-02-09 20:54:17 -08:00
src Use brighter version of ANSI color when bold enabled 2018-02-09 20:54:17 -08:00
term fixup alt-KEY to send escape rather than set bits 2018-02-09 16:03:09 -08:00
.gitignore Add fontconfig support to locate fonts 2018-01-15 17:32:31 -08:00
.rustfmt.toml avoid .bk files when rustfmt'ing 2018-01-27 14:20:15 -08:00
.travis.yml Meh, TravisCI Ubuntu is too old. 2018-02-06 22:24:36 -08:00
Cargo.toml Add basic config file parsing 2018-02-07 07:51:04 -08:00
LICENSE.md flesh out some details prior to pushing to github 2018-02-06 21:32:40 -08:00
README.md Add double click to select a word 2018-02-09 15:47:41 -08:00

Wez's Terminal

A terminal emulator implemented in Rust.

Quickstart

  • Install rustup to get the nightly rust compiler installed on your system. https://www.rust-lang.org/en-US/install.html
  • Build in release mode: cargo build --release
  • Run it via either cargo run --release or target/release/wezterm

You will need a collection of support libraries; important to note is that your harfbuzz library must have support for hb_ft_font_create_referenced; older linux distributions don't have this!

$ sudo apt-get install -y libxcb-icccm4-dev libxcb-ewmh-dev \
    libxcb-image0-dev libxcb-keysyms1-dev libharfbuzz-dev \
    libfontconfig1-dev libfreetype6-dev

What?

Here's what I'm shooting for:

  • A terminal escape sequence parser
  • A model of a terminal screen + scrollback that is OS independent
  • Textual and GUI rendering of the model
  • A differential protocol for the model

This would manifest as a common core that could run as both a textual terminal multiplexer and a gui terminal emulator, where the GUI part could automatically provide a native UI around the remotely multiplexed terminal session.

Status / Features

These are in the done/doing soon category:

  • Runs on Linux with XCB
  • Scrollback (use mouse wheel and Shift Page{Up|Down})
  • True Color support
  • Color Emoji and font fallback
  • Paste selection via Shift-Insert (bracketed paste is supported!)
  • SGR style mouse reporting (works in vim and tmux)
  • xterm style selection of text with mouse
  • Configuration file to specify fonts and colors (in progress)
  • Render underline, italic, bold, strikethrough
  • Command line argument parsing instead of launching user shell
  • Hyperlinks see: https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda

There's a good number of terminal escape sequences that are not yet implemented and that will get fleshed out as the applications I use uncover them. Similarly for key mappings.

Things that I'd like to see happen and that have no immediate priority (contributions to get closer to these are welcomed!)

  • Runs on macOS
  • Sixel / iTerm2 graphics protocol support
  • Tabs
  • Textual renderer. Think tmux or screen.
  • Runs on Linux with Wayland (use XWayland for now)
  • Runs on Windows

Configuration

wezterm will look for a TOML configuration file in $HOME/.config/wezterm/wezterm.toml, and then in $HOME/.wezterm.toml.

Configuration is currently very simple and the format is considered unstable and subject to change. The code for configuration can be found in src/config.rs.

I use the following in my ~/.wezterm.toml:

font_size = 10
font = { fontconfig_pattern = "Operator Mono SSm Lig Medium" }

[[font_rules]]
italic = true
font = { fontconfig_pattern = "Operator Mono SSm Lig Medium:style=Italic" }

[[font_rules]]
italic = true
intensity = "Bold"
font = { fontconfig_pattern = "Operator Mono SSm Lig:style=Italic:weight=bold" }

[[font_rules]]
intensity = "Bold"
font = { fontconfig_pattern = "Operator Mono SSm:weight=bold" }

[[font_rules]]
intensity = "Half"
font = { fontconfig_pattern = "Operator Mono SSm Lig Light" }

The default configuration will attempt to use whichever font is returned from fontconfig when monospace is requested.