2.8 KiB
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
MouseTerminalstruct, you can get mouse events (thanks to IGI-111). - TrueColor support: You can now use true color, by the
Rgbstruct. - A complete revision of the way escapes are handled: Everything is now done through
Displayinstead of custom traits. isattywrapper:termion::is_ttytakes anyT: AsRawFdand 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();
}