aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-04-01 03:39:34 -0500
committerJesse Luehrs <doy@tozt.net>2013-04-01 03:39:34 -0500
commit297f9bba6c646ea9aa55e9181f377cc75c06bdb8 (patch)
treefe7f3979983f0157ca79608991f089390c91e636
parentade235fb2daa6e9eaee95e96bce9b90e9443d31e (diff)
downloadrust-term-297f9bba6c646ea9aa55e9181f377cc75c06bdb8.tar.gz
rust-term-297f9bba6c646ea9aa55e9181f377cc75c06bdb8.zip
clean up keypad mode too
-rw-r--r--src/term.rs13
-rw-r--r--test/rl.rs2
2 files changed, 12 insertions, 3 deletions
diff --git a/src/term.rs b/src/term.rs
index 3f99e40..9e98688 100644
--- a/src/term.rs
+++ b/src/term.rs
@@ -81,11 +81,12 @@ enum Keypress {
struct Reader {
priv escapes: ~Trie<Keypress>,
priv buf: ~str,
+ priv cleanup: bool,
}
-pub fn Reader () -> Reader {
+pub fn Reader (cleanup: bool) -> Reader {
io::print(escape("smkx"));
- Reader { escapes: build_escapes_trie(), buf: ~"" }
+ Reader { escapes: build_escapes_trie(), buf: ~"", cleanup: cleanup }
}
impl Reader {
@@ -153,6 +154,14 @@ impl Reader {
}
}
+impl Drop for Reader {
+ fn finalize (&self) {
+ if self.cleanup {
+ io::print(escape("rmkx"));
+ }
+ }
+}
+
// XXX this whole thing needs to be able to deal with caps that don't exist
fn build_escapes_trie () -> ~Trie<Keypress> {
let mut trie = ~Trie();
diff --git a/test/rl.rs b/test/rl.rs
index 2cc246c..96c0df3 100644
--- a/test/rl.rs
+++ b/test/rl.rs
@@ -3,7 +3,7 @@ use term::{KeyCharacter,KeyEscape,KeyUp,KeyDown,KeyLeft,KeyRight};
fn term_app (body: &fn (r: &mut term::Reader, w: &term::Writer)) {
let writer = term::Writer(true);
- let mut reader = term::Reader();
+ let mut reader = term::Reader(true);
do term::ios::preserve {
writer.alternate_screen(true);
body(&mut reader, &writer);