diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-03-19 23:03:01 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-03-19 23:03:01 -0500 |
commit | d81b604ed963ac571bbeefa033b7744ad3f51d5e (patch) | |
tree | 8e0901e3974aec7400a0b46275277249fc2e4263 /src/ios.rs | |
parent | 1fa0019d580450ab106d2a1f3ed9c622218c0dbf (diff) | |
download | rust-term-d81b604ed963ac571bbeefa033b7744ad3f51d5e.tar.gz rust-term-d81b604ed963ac571bbeefa033b7744ad3f51d5e.zip |
add a scope guard sort of thing to allow restoring terminal state
Diffstat (limited to 'src/ios.rs')
-rw-r--r-- | src/ios.rs | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -1,11 +1,30 @@ use core::libc::c_int; +enum struct_termios {} + +pub struct PreserveTermios { + priv state: *struct_termios, +} + +pub fn PreserveTermios () -> ~PreserveTermios { + ~PreserveTermios { state: unsafe { c::get() } } +} + +impl Drop for PreserveTermios { + fn finalize (&self) { + unsafe { c::set(self.state) } + } +} + #[link_name = "termios_wrapper"] extern mod c { fn cooked () -> c_int; fn cbreak () -> c_int; fn raw () -> c_int; fn echo (enable: c_int) -> c_int; + + fn get() -> *struct_termios; + fn set(t: *struct_termios); } pub fn cooked () -> bool { |