From 54e0a4246feb6b384c21f0390884b379d3bdfa81 Mon Sep 17 00:00:00 2001 From: rabite Date: Tue, 7 May 2019 21:42:45 +0200 Subject: flush stdin after reading input --- src/term.rs | 10 +++++++++- src/widget.rs | 8 +++++--- 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, fn input_thread(tx: Sender, 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(); } }); } -- cgit v1.2.3