//! A window is an abstraction for the UI. Buffers (like [Threads]) draw "to" windows. use std::io::Write; use termion::{clear, color, cursor}; pub enum Line { Normal(String), Highlight(String), } pub struct Window { pub lines: Vec, } impl Window { pub fn new() -> Self { Self { lines: Vec::new(), } } pub fn draw(&mut self, out: &mut W) -> Result<(), std::io::Error> { write!(out, "{}", clear::All)?; for (i, line) in self.lines.iter().enumerate() { write!(out, "{}", cursor::Goto(1, (i + 1) as u16))?; match line { Line::Normal(s) => write!(out, "{}", s)?, Line::Highlight(s) => write!( out, "{}{}{}", color::Fg(color::Red), s, color::Fg(color::Reset), )?, } } out.flush()?; self.lines.clear(); Ok(()) } }