flush stdin after reading input

This commit is contained in:
rabite 2019-05-07 21:42:45 +02:00
parent d248d0789f
commit 54e0a4246f
2 changed files with 14 additions and 4 deletions

View File

@ -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

View File

@ -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();
}
});
}