aboutsummaryrefslogtreecommitdiffstats
path: root/src/term.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/term.rs')
-rw-r--r--src/term.rs23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/term.rs b/src/term.rs
index 001138f..bb29025 100644
--- a/src/term.rs
+++ b/src/term.rs
@@ -93,15 +93,13 @@ impl Reader {
return Some(KeyCharacter(str::shift_char(&mut self.buf)));
}
- let mut buf = ~"";
- loop {
- let c = io::stdin().read_char();
- if c as int == -1 {
- return None;
- }
-
- str::push_char(&mut buf, c);
+ let first = util::timed_read(-1);
+ if first.is_none() {
+ return None;
+ }
+ let mut buf = str::from_char(*first.get_ref());
+ loop {
if !self.escapes.has_prefix(buf) {
return match self.escapes.find(buf) {
&Some(k) => { Some(k) }
@@ -112,6 +110,15 @@ impl Reader {
}
}
}
+
+ match util::timed_read(1000000) {
+ Some(next) => { str::push_char(&mut buf, next) }
+ None => {
+ str::push_str(&mut self.buf, buf);
+ let next = str::shift_char(&mut self.buf);
+ return Some(KeyCharacter(next));
+ }
+ }
}
}
}