aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-03-19 23:30:49 -0500
committerJesse Luehrs <doy@tozt.net>2013-03-19 23:30:49 -0500
commit7a0d31af21d363ca5fef535d69a37b4e11c5b1cb (patch)
tree50a98b4f0ce6447fa447bedcfbdc749e1fc95eef
parentd81b604ed963ac571bbeefa033b7744ad3f51d5e (diff)
downloadrust-term-7a0d31af21d363ca5fef535d69a37b4e11c5b1cb.tar.gz
rust-term-7a0d31af21d363ca5fef535d69a37b4e11c5b1cb.zip
better api
-rw-r--r--src/ios.rs9
-rw-r--r--test/termios2.rs3
2 files changed, 8 insertions, 4 deletions
diff --git a/src/ios.rs b/src/ios.rs
index 2e5bd17..d510319 100644
--- a/src/ios.rs
+++ b/src/ios.rs
@@ -2,11 +2,11 @@ use core::libc::c_int;
enum struct_termios {}
-pub struct PreserveTermios {
+struct PreserveTermios {
priv state: *struct_termios,
}
-pub fn PreserveTermios () -> ~PreserveTermios {
+fn PreserveTermios () -> ~PreserveTermios {
~PreserveTermios { state: unsafe { c::get() } }
}
@@ -42,3 +42,8 @@ pub fn raw () -> bool {
pub fn echo (enable: bool) -> bool {
unsafe { c::echo(enable as c_int) as bool }
}
+
+pub fn preserve<T> (body: &fn () -> T) -> T {
+ let _guard = PreserveTermios();
+ body()
+}
diff --git a/test/termios2.rs b/test/termios2.rs
index 13d14d3..6b70464 100644
--- a/test/termios2.rs
+++ b/test/termios2.rs
@@ -12,8 +12,7 @@ fn loop_chars () {
}
fn main () {
- {
- let preserve = term::ios::PreserveTermios();
+ do term::ios::preserve {
term::ios::raw();
loop_chars();
}