2.9 KiB
2.9 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 anyT: AsRawFd
and gives you abool
.- 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();
}