diff --git a/examples/alternate_screen.rs b/examples/alternate_screen.rs index 0b53b60..8eec9fd 100644 --- a/examples/alternate_screen.rs +++ b/examples/alternate_screen.rs @@ -1,7 +1,7 @@ extern crate crossterm; use crossterm::{style, AlternateScreen, ClearType, Color, Crossterm}; -use std::{thread, time, io}; +use std::{io, thread, time}; fn print_wait_screen() -> io::Result<()> { let crossterm = Crossterm::new(); diff --git a/examples/crossterm.rs b/examples/crossterm.rs index 0e91f2d..19d59ef 100644 --- a/examples/crossterm.rs +++ b/examples/crossterm.rs @@ -1,21 +1,76 @@ extern crate crossterm; -use crossterm::{Color, Crossterm}; +//use crossterm::{Color, Crossterm}; -/// use the `Crossterm` to get an instance to the cursor module | demonstration. -pub fn main() { - // Create the crossterm type to access different modules. - let crossterm = Crossterm::new(); +use crossterm::{ + AlternateScreen, Attribute, ClearType, Crossterm, InputEvent, KeyEvent, Styler, TerminalCursor, +}; +use std::io::Write; +use std::{io, thread, time}; - // pass a reference to the current screen. - let cursor = crossterm.cursor(); - let color = crossterm.color(); - let terminal = crossterm.terminal(); - let terminal = crossterm.input(); - let style = crossterm - .style("Black font on green background") - .with(Color::Black) - .on(Color::Green); - - // TODO: perform some actions with the instances above. +fn run() -> io::Result<()> { + let alternate_screen = AlternateScreen::to_alternate(true)?; + let crossterm = crossterm::Crossterm::new(); + let input = crossterm.input(); + let mut crossterm_events = input.read_sync(); + loop { + if let Some(event) = crossterm_events.next() { + let terminal = crossterm.terminal(); + let cursor = crossterm.cursor(); + cursor.goto(1, 1)?; + terminal.clear(ClearType::UntilNewLine)?; + if let InputEvent::Keyboard(key) = &event { + match key { + KeyEvent::Ctrl('q') => { + println!("quitting..."); + ::std::io::stdout().flush(); + break; + } + _ => { + let s = "event"; + println!( + " {}{}{} : {:?}", + Attribute::Bold, + s, + Attribute::Reset, + event + ); + } + } + } else { + println!("disregarding unrelevant event: {:?}", event); + } + } + } + thread::sleep(time::Duration::from_secs(1)); + Ok(()) } + +fn main() { + match run() { + Ok(_) => { + println!("ok"); + } + Err(e) => { + println!("error {:?}", e); + } + } +} + +// use the `Crossterm` to get an instance to the cursor module | demonstration. +//pub fn main() { +// // Create the crossterm type to access different modules. +// let crossterm = Crossterm::new(); +// +// // pass a reference to the current screen. +// let cursor = crossterm.cursor(); +// let color = crossterm.color(); +// let terminal = crossterm.terminal(); +// let terminal = crossterm.input(); +// let style = crossterm +// .style("Black font on green background") +// .with(Color::Black) +// .on(Color::Green); +// +// // TODO: perform some actions with the instances above. +//} diff --git a/examples/terminal.rs b/examples/terminal.rs index 9627d4e..119ec79 100644 --- a/examples/terminal.rs +++ b/examples/terminal.rs @@ -56,7 +56,7 @@ pub fn clear_from_cursor_up() -> io::Result<()> { } /// Clear all lines from cursor position X:4, Y:4 up | demonstration -pub fn clear_current_line() -> io::Result<()>{ +pub fn clear_current_line() -> io::Result<()> { let terminal = terminal(); print_test_data();