mirror of
https://github.com/ratatui-org/ratatui
synced 2025-02-16 22:18:51 +00:00
fix: unified crossterm backend
This commit is contained in:
parent
b30cae0473
commit
cadb41c9e3
2 changed files with 14 additions and 9 deletions
|
@ -10,6 +10,7 @@ use std::time::Duration;
|
||||||
use structopt::StructOpt;
|
use structopt::StructOpt;
|
||||||
use tui::backend::CrosstermBackend;
|
use tui::backend::CrosstermBackend;
|
||||||
use tui::Terminal;
|
use tui::Terminal;
|
||||||
|
use crossterm;
|
||||||
|
|
||||||
use crate::demo::{ui, App};
|
use crate::demo::{ui, App};
|
||||||
|
|
||||||
|
@ -30,7 +31,9 @@ fn main() -> Result<(), failure::Error> {
|
||||||
let cli = Cli::from_args();
|
let cli = Cli::from_args();
|
||||||
stderrlog::new().quiet(!cli.log).verbosity(4).init()?;
|
stderrlog::new().quiet(!cli.log).verbosity(4).init()?;
|
||||||
|
|
||||||
let backend = CrosstermBackend::new();
|
let screen = crossterm::Screen::default();
|
||||||
|
let alternate_screen = screen.enable_alternate_modes(true)?;
|
||||||
|
let backend = CrosstermBackend::with_alternate_screen(alternate_screen)?;
|
||||||
let mut terminal = Terminal::new(backend)?;
|
let mut terminal = Terminal::new(backend)?;
|
||||||
terminal.hide_cursor()?;
|
terminal.hide_cursor()?;
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ use crate::style::{Color, Modifier};
|
||||||
use crossterm::error::ErrorKind;
|
use crossterm::error::ErrorKind;
|
||||||
|
|
||||||
pub struct CrosstermBackend {
|
pub struct CrosstermBackend {
|
||||||
screen: crossterm::Screen,
|
screen: Option<crossterm::Screen>,
|
||||||
crossterm: crossterm::Crossterm,
|
crossterm: crossterm::Crossterm,
|
||||||
// Need to keep the AlternateScreen around even when not using it directly,
|
// Need to keep the AlternateScreen around even when not using it directly,
|
||||||
// see https://github.com/TimonPost/crossterm/issues/88
|
// see https://github.com/TimonPost/crossterm/issues/88
|
||||||
|
@ -19,7 +19,7 @@ impl Default for CrosstermBackend {
|
||||||
let screen = crossterm::Screen::default();
|
let screen = crossterm::Screen::default();
|
||||||
let crossterm = crossterm::Crossterm::from_screen(&screen);
|
let crossterm = crossterm::Crossterm::from_screen(&screen);
|
||||||
CrosstermBackend {
|
CrosstermBackend {
|
||||||
screen,
|
screen: Some(screen),
|
||||||
crossterm,
|
crossterm,
|
||||||
alternate_screen: None,
|
alternate_screen: None,
|
||||||
}
|
}
|
||||||
|
@ -34,24 +34,26 @@ impl CrosstermBackend {
|
||||||
pub fn with_screen(screen: crossterm::Screen) -> CrosstermBackend {
|
pub fn with_screen(screen: crossterm::Screen) -> CrosstermBackend {
|
||||||
let crossterm = crossterm::Crossterm::from_screen(&screen);
|
let crossterm = crossterm::Crossterm::from_screen(&screen);
|
||||||
CrosstermBackend {
|
CrosstermBackend {
|
||||||
screen,
|
screen: Some(screen),
|
||||||
crossterm,
|
crossterm,
|
||||||
alternate_screen: None,
|
alternate_screen: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_alternate_screen(screen: crossterm::Screen, raw_mode: bool) -> Result<CrosstermBackend, io::Error> {
|
pub fn with_alternate_screen(alternate_screen: crossterm::AlternateScreen) -> Result<CrosstermBackend, io::Error> {
|
||||||
let alternate_screen = screen.enable_alternate_modes(raw_mode)?;
|
|
||||||
let crossterm = crossterm::Crossterm::from_screen(&alternate_screen.screen);
|
let crossterm = crossterm::Crossterm::from_screen(&alternate_screen.screen);
|
||||||
Ok(CrosstermBackend {
|
Ok(CrosstermBackend {
|
||||||
screen,
|
screen: None,
|
||||||
crossterm,
|
crossterm,
|
||||||
alternate_screen: Some(alternate_screen),
|
alternate_screen: Some(alternate_screen),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn screen(&self) -> &crossterm::Screen {
|
pub fn screen(&self) -> Option<&crossterm::Screen> {
|
||||||
&self.screen
|
match &self.screen {
|
||||||
|
Some(screen) => Some(&screen),
|
||||||
|
None => None,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn alternate_screen(&self) -> Option<&crossterm::AlternateScreen> {
|
pub fn alternate_screen(&self) -> Option<&crossterm::AlternateScreen> {
|
||||||
|
|
Loading…
Add table
Reference in a new issue