diff --git a/examples/print.rs b/examples/print.rs index 5c456b4..08af981 100644 --- a/examples/print.rs +++ b/examples/print.rs @@ -6,13 +6,11 @@ use ants::{ fn main() { raw_mode::enter().unwrap(); print!("Press Ctrl+q to exit.\r\n"); - let mut events = Events::new(); - loop { - if let Some(event) = events.next() { - print!("{:?}\r\n", event); - if let Event::Key(Key::Char('q'), Mod::Ctrl) = event { - break; - } + + for event in Events::new() { + print!("{:?}\r\n", event); + if let Event::Key(Key::Char('q'), Mod::Ctrl) = event { + break; } } raw_mode::exit().unwrap(); diff --git a/src/event.rs b/src/event.rs index a17abb7..14856e5 100644 --- a/src/event.rs +++ b/src/event.rs @@ -116,9 +116,17 @@ impl Iterator for Events { type Item = Event; fn next(&mut self) -> Option { - self.source.read_to_end(&mut self.buffer).ok()?; if self.buffer.is_empty() { - return None; + let mut buf = [0]; + while let Ok(0) = self.source.read(&mut buf) { + // there has to be a better way to make this blocking... + std::thread::sleep(std::time::Duration::from_millis(5)); + } + // TODO handle read errors + self.buffer.push(buf[0]); + while let Ok(1) = self.source.read(&mut buf) { + self.buffer.push(buf[0]); + } } Some(self.parse())