mirror of
https://github.com/ratatui/ratatui.git
synced 2025-10-02 07:21:24 +00:00

* build: bump MSRV to 1.65 The latest version of the time crate requires Rust 1.65.0 ``` cargo +1.64.0-x86_64-apple-darwin test --no-default-features \ --features serde,crossterm,all-widgets --lib --tests --examples error: package `time v0.3.21` cannot be built because it requires rustc 1.65.0 or newer, while the currently active rustc version is 1.64.0 ``` * feat(backend): add termwiz backend and demo * ci(termwiz): add termwiz to makefile.toml --------- Co-authored-by: Josh McKinney <joshka@users.noreply.github.com> Co-authored-by: Prabir Shrestha <mail@prabir.me>
69 lines
1.9 KiB
Rust
69 lines
1.9 KiB
Rust
use std::io;
|
|
|
|
use crate::buffer::Cell;
|
|
use crate::layout::Rect;
|
|
|
|
#[cfg(feature = "termion")]
|
|
mod termion;
|
|
#[cfg(feature = "termion")]
|
|
pub use self::termion::TermionBackend;
|
|
|
|
#[cfg(feature = "crossterm")]
|
|
mod crossterm;
|
|
#[cfg(feature = "crossterm")]
|
|
pub use self::crossterm::CrosstermBackend;
|
|
|
|
#[cfg(feature = "termwiz")]
|
|
mod termwiz;
|
|
#[cfg(feature = "termwiz")]
|
|
pub use self::termwiz::TermwizBackend;
|
|
|
|
mod test;
|
|
pub use self::test::TestBackend;
|
|
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
|
pub enum ClearType {
|
|
All,
|
|
AfterCursor,
|
|
BeforeCursor,
|
|
CurrentLine,
|
|
UntilNewLine,
|
|
}
|
|
|
|
pub trait Backend {
|
|
fn draw<'a, I>(&mut self, content: I) -> Result<(), io::Error>
|
|
where
|
|
I: Iterator<Item = (u16, u16, &'a Cell)>;
|
|
|
|
/// Insert `n` line breaks to the terminal screen
|
|
fn append_lines(&mut self, n: u16) -> io::Result<()> {
|
|
// to get around the unused warning
|
|
let _n = n;
|
|
Ok(())
|
|
}
|
|
|
|
fn hide_cursor(&mut self) -> Result<(), io::Error>;
|
|
fn show_cursor(&mut self) -> Result<(), io::Error>;
|
|
fn get_cursor(&mut self) -> Result<(u16, u16), io::Error>;
|
|
fn set_cursor(&mut self, x: u16, y: u16) -> Result<(), io::Error>;
|
|
|
|
/// Clears the whole terminal screen
|
|
fn clear(&mut self) -> Result<(), io::Error>;
|
|
|
|
/// Clears a specific region of the terminal specified by the [`ClearType`] parameter
|
|
fn clear_region(&mut self, clear_type: ClearType) -> Result<(), io::Error> {
|
|
match clear_type {
|
|
ClearType::All => self.clear(),
|
|
ClearType::AfterCursor
|
|
| ClearType::BeforeCursor
|
|
| ClearType::CurrentLine
|
|
| ClearType::UntilNewLine => Err(io::Error::new(
|
|
io::ErrorKind::Other,
|
|
format!("clear_type [{clear_type:?}] not supported with this backend"),
|
|
)),
|
|
}
|
|
}
|
|
fn size(&self) -> Result<Rect, io::Error>;
|
|
fn flush(&mut self) -> Result<(), io::Error>;
|
|
}
|