diff --git a/Cargo.toml b/Cargo.toml index 52c4063..3977ea4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,11 +55,6 @@ name = "crossterm_demo" path = "examples/crossterm_demo.rs" required-features = ["crossterm"] -[[example]] -name = "curses" -path = "examples/curses.rs" -required-features = ["curses"] - [[example]] name = "curses_demo" path = "examples/curses_demo.rs" diff --git a/examples/curses_demo.rs b/examples/curses_demo.rs index f917ff5..eed4b90 100644 --- a/examples/curses_demo.rs +++ b/examples/curses_demo.rs @@ -2,11 +2,12 @@ mod demo; #[allow(dead_code)] mod util; +use std::io; use std::time::{Duration, Instant}; +use easycurses; use structopt::StructOpt; use tui::backend::CursesBackend; -use easycurses; use tui::Terminal; use crate::demo::{ui, App}; @@ -23,13 +24,14 @@ fn main() -> Result<(), failure::Error> { let cli = Cli::from_args(); stderrlog::new().quiet(!cli.log).verbosity(4).init()?; - let mut terminal = Terminal::new(CursesBackend::new().unwrap()).unwrap(); - terminal.clear().unwrap(); - terminal.hide_cursor().unwrap(); - terminal - .backend_mut() - .get_curses_window_mut() - .set_input_timeout(easycurses::TimeoutMode::WaitUpTo(50)); + let mut backend = CursesBackend::new().ok_or(io::Error::new(io::ErrorKind::Other, ""))?; + let curses = backend.get_curses_mut(); + curses.set_echo(false); + curses.set_input_timeout(easycurses::TimeoutMode::WaitUpTo(50)); + curses.set_input_mode(easycurses::InputMode::RawCharacter); + curses.set_keypad_enabled(true); + let mut terminal = Terminal::new(backend)?; + terminal.hide_cursor()?; let mut app = App::new("Curses demo"); @@ -37,7 +39,7 @@ fn main() -> Result<(), failure::Error> { let tick_rate = Duration::from_millis(cli.tick_rate); loop { ui::draw(&mut terminal, &app)?; - match terminal.backend_mut().get_curses_window_mut().get_input() { + match terminal.backend_mut().get_curses_mut().get_input() { Some(input) => { match input { easycurses::Input::Character(c) => { @@ -60,7 +62,7 @@ fn main() -> Result<(), failure::Error> { } _ => {} }; - terminal.backend_mut().get_curses_window_mut().flush_input(); + terminal.backend_mut().get_curses_mut().flush_input(); if last_tick.elapsed() > tick_rate { app.on_tick(); last_tick = Instant::now(); diff --git a/src/backend/curses.rs b/src/backend/curses.rs index d982072..8a2f49d 100644 --- a/src/backend/curses.rs +++ b/src/backend/curses.rs @@ -16,26 +16,20 @@ pub struct CursesBackend { } impl CursesBackend { - pub fn new() -> Result { - match easycurses::EasyCurses::initialize_system() { - Some(mut curses) => { - curses.set_echo(false); - curses.set_input_timeout(easycurses::TimeoutMode::Never); - curses.set_input_mode(easycurses::InputMode::RawCharacter); - curses.set_keypad_enabled(true); - Ok(CursesBackend { curses }) - } - None => Err(String::from( - "Can't initialize curses, make sure it is not running already.", - )), - } + pub fn new() -> Option { + let curses = easycurses::EasyCurses::initialize_system()?; + Some(CursesBackend { curses }) + } + + pub fn with_curses(curses: easycurses::EasyCurses) -> CursesBackend { + CursesBackend { curses } } - pub fn get_curses_window(&self) -> &easycurses::EasyCurses { + pub fn get_curses(&self) -> &easycurses::EasyCurses { &self.curses } - pub fn get_curses_window_mut(&mut self) -> &mut easycurses::EasyCurses { + pub fn get_curses_mut(&mut self) -> &mut easycurses::EasyCurses { &mut self.curses } }