diff options
Diffstat (limited to 'src/term.rs')
-rw-r--r-- | src/term.rs | 23 |
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)); + } + } } } } |