summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrabite <rabite@posteo.de>2019-05-07 21:42:45 +0200
committerrabite <rabite@posteo.de>2019-05-07 23:48:32 +0200
commit54e0a4246feb6b384c21f0390884b379d3bdfa81 (patch)
treea05b55090ddf88bf4b5b9241685439f439258043
parentd248d0789fe3260265c6d6519d6d0c255fdc09ed (diff)
flush stdin after reading input
-rw-r--r--src/term.rs10
-rw-r--r--src/widget.rs8
2 files changed, 14 insertions, 4 deletions
diff --git a/src/term.rs b/src/term.rs
index fb84ae3..35105fd 100644
--- a/src/term.rs
+++ b/src/term.rs
@@ -1,4 +1,4 @@
-use std::io::{Stdout, Write, BufWriter};
+use std::io::{Stdout, Write, BufWriter, BufRead};
use std::sync::{Arc, Mutex, RwLock};
use termion;
@@ -142,6 +142,14 @@ pub trait ScreenExt: Write {
impl ScreenExt for Screen {}
impl ScreenExt for TermMode {}
+pub fn flush_stdin() {
+ let stdin = std::io::stdin();
+ let mut stdin = stdin.lock();
+
+ // Not 100% sure if it's OK to just call consume like this
+ stdin.consume(10);
+}
+
pub fn xsize() -> u16 {
let (xsize, _) = termion::terminal_size().unwrap();
xsize
diff --git a/src/widget.rs b/src/widget.rs
index 3cbdf8c..c106f7e 100644
--- a/src/widget.rs
+++ b/src/widget.rs
@@ -528,9 +528,11 @@ fn event_thread(rx_global: Receiver<Events>,
fn input_thread(tx: Sender<Events>, rx_input_request: Receiver<()>) {
std::thread::spawn(move || {
for input in stdin().events() {
- let input = input.unwrap();
- tx.send(Events::InputEvent(input)).unwrap();
- rx_input_request.recv().unwrap();
+ term::flush_stdin();
+ input.map(|input| {
+ tx.send(Events::InputEvent(input)).unwrap();
+ rx_input_request.recv().unwrap();
+ }).map_err(|e| e.into()).log();
}
});
}