termion/CHANGELOG.md

2.8 KiB

1.0.0

Termion 1.0.0 is out! This release is breaking, which is also the reason for the semver bump.

Highlights

Lot'ta goodies.

  • Mouse support: If you enabled mouse mode through the MouseTerminal struct, you can get mouse events (thanks to IGI-111).
  • TrueColor support: You can now use true color, by the Rgb struct.
  • A complete revision of the way escapes are handled: Everything is now done through Display instead of custom traits.
  • isatty wrapper: termion::is_tty takes any T: AsRawFd and gives you a bool.
  • Crates.io release: Previously, it was distributed solely through git. This turns out to be very convinient, but quite critical whenever making breaking changes (that is, major semver bumps).

0.1.0 to 1.0.0 guide

This sample table gives an idea of how to go bu converting to the new major version of Termion.

0.1.0 1.0.0
use termion::IntoRawMode use termion::raw::IntoRawMode
stdout.color(color::Red); write!(stdout, "{}", color::Fg(color::Red));
stdout.color_bg(color::Red); write!(stdout, "{}", color::Bg(color::Red));
stdout.goto(x, y); write!(stdout, "{}", cursor::Goto(x, y));
color::rgb(r, g, b); color::Rgb(r, g, b) (truecolor)
x.with_mouse() MouseTerminal::from(x)

An example

#![feature(step_by)]

extern crate termion;

use termion::event::Key;
use termion::input::TermRead;
use termion::raw::IntoRawMode;
use std::io::{Write, stdout, stdin};

fn rainbow<W: Write>(stdout: &mut W, blue: u8) {
    write!(stdout, "{}{}", termion::cursor::Goto(1, 1), termion::clear::All).unwrap();

    for red in (0..255).step_by(8 as u8) {
        for green in (0..255).step_by(4) {
            write!(stdout, "{} ", termion::color::Bg(termion::color::Rgb(red, green, blue))).unwrap();
        }
        write!(stdout, "\n\r").unwrap();
    }

    writeln!(stdout, "{}b = {}", termion::style::Reset, blue).unwrap();
}

fn main() {
    let stdin = stdin();
    let mut stdout = stdout().into_raw_mode().unwrap();

    writeln!(stdout, "{}{}{}Use the arrow keys to change the blue in the rainbow.",
           termion::clear::All,
           termion::cursor::Goto(1, 1),
           termion::cursor::Hide).unwrap();

    let mut blue = 172u8;

    for c in stdin.keys() {
        match c.unwrap() {
            Key::Up => {
                blue = blue.saturating_add(4);
                rainbow(&mut stdout, blue);
            },
            Key::Down => {
                blue = blue.saturating_sub(4);
                rainbow(&mut stdout, blue);
            },
            Key::Char('q') => break,
            _ => {},
        }
        stdout.flush().unwrap();
    }

    write!(stdout, "{}", termion::cursor::Show).unwrap();
}