From 0e0b5be856fff602513f940d00fe954faecdd905 Mon Sep 17 00:00:00 2001 From: IGI-111 Date: Thu, 27 Oct 2016 22:03:29 +0200 Subject: [PATCH] Added true terminal restoration (#66) Using the "alternate screen" capability, the RawTerminal trait restores the terminal in its previous state by sending the proper escape codes. --- src/raw.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/raw.rs b/src/raw.rs index 20a07f9..39a0391 100644 --- a/src/raw.rs +++ b/src/raw.rs @@ -54,6 +54,8 @@ pub struct RawTerminal { #[cfg(not(target_os = "redox"))] impl Drop for RawTerminal { fn drop(&mut self) { + write!(self, csi!("r")).unwrap(); + write!(self, csi!("?1049l")).unwrap(); use termios::set_terminal_attr; set_terminal_attr(&mut self.prev_ios as *mut _); } @@ -100,7 +102,7 @@ pub trait IntoRawMode: Write + Sized { impl IntoRawMode for W { #[cfg(not(target_os = "redox"))] - fn into_raw_mode(self) -> io::Result> { + fn into_raw_mode(mut self) -> io::Result> { use termios::{cfmakeraw, get_terminal_attr, set_terminal_attr}; let (mut ios, exit) = get_terminal_attr(); @@ -116,6 +118,7 @@ impl IntoRawMode for W { if set_terminal_attr(&mut ios as *mut _) != 0 { Err(io::Error::new(io::ErrorKind::Other, "Unable to set Termios attribute.")) } else { + write!(self, csi!("?1049h")).unwrap(); let res = RawTerminal { prev_ios: prev_ios, output: self,