added drop disable

This commit is contained in:
TimonPost 2018-08-23 22:59:51 +02:00
parent cc55c190d8
commit ce15004975
3 changed files with 14 additions and 8 deletions

View File

@ -19,6 +19,5 @@ use std::io::Write;
use std::{thread,time};
fn main()
{
terminal::raw_mode::print_wait_screen_on_alternate_window();
thread::sleep(time::Duration::from_millis(2000));
}

View File

@ -86,7 +86,7 @@ pub fn read_async_demo() {
// get the next pressed key
let pressed_key = stdin.next();
terminal.write(format!("\r{:?} <- Character pressed", pressed_key));
terminal.write(format!("{:?} <- Character pressed", pressed_key));
// check if pressed key is enter (\r)
if let Some(Ok(b'\r')) = pressed_key {
@ -123,7 +123,7 @@ pub fn async_reading_on_alternate_screen() {
// get the next pressed key
let pressed_key = stdin.next();
terminal.write(format!("\r{:?} <- Character pressed", pressed_key));
terminal.write(format!("{:?} <- Character pressed", pressed_key));
// check if pressed key is enter (\r)
if let Some(Ok(b'\r')) = pressed_key {

View File

@ -45,6 +45,7 @@ pub struct Screen
{
buffer: Vec<u8>,
pub stdout: Arc<TerminalOutput>,
drop: bool,
}
impl Screen
@ -90,13 +91,19 @@ impl Screen
self.stdout.write_buf(&self.buffer);
self.stdout.flush()
}
// this will disable the drop which will cause raw modes not to be undone on drop of `Screen`.
pub fn disable_drop(&self)
{
self.drop = false;
}
}
impl From<TerminalOutput> for Screen
{
/// Create an screen with the given `Stdout`
fn from(stdout: TerminalOutput) -> Self {
return Screen { stdout: Arc::new(stdout), buffer: Vec::new() };
return Screen { stdout: Arc::new(stdout), buffer: Vec::new(), drop: true};
}
}
@ -104,7 +111,7 @@ impl From<Arc<TerminalOutput>> for Screen
{
/// Create an screen with the given 'Arc<Stdout>'
fn from(stdout: Arc<TerminalOutput>) -> Self {
return Screen { stdout: stdout, buffer: Vec::new() };
return Screen { stdout: stdout, buffer: Vec::new() drop: true};
}
}
@ -112,7 +119,7 @@ impl Default for Screen
{
/// Create an new screen which will not be in raw mode or alternate mode.
fn default() -> Self {
return Screen { stdout: Arc::new(TerminalOutput::new(false)), buffer: Vec::new() };
return Screen { stdout: Arc::new(TerminalOutput::new(false)), buffer: Vec::new(), drop: true};
}
}
@ -120,7 +127,7 @@ impl Drop for Screen
{
/// If the current screen is in raw mode whe need to disable it when the instance goes out of scope.
fn drop(&mut self) {
if self.stdout.is_in_raw_mode
if self.stdout.is_in_raw_mode && self.drop
{
RawScreen::disable_raw_modes();
}