From 7107347b986e63427a68ddc80cf8a78bffacba19 Mon Sep 17 00:00:00 2001 From: gwenn <gtreguier@gmail.com> Date: Sun, 10 Jul 2016 08:54:55 +0200 Subject: [PATCH] Use Stdin directly only on unix --- src/lib.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 14c35d79..e2eb47a2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -202,7 +202,7 @@ type Mode = termios::Termios; #[cfg(unix)] fn enable_raw_mode() -> Result<Mode> { use nix::sys::termios::{BRKINT, CS8, ECHO, ICANON, ICRNL, IEXTEN, INPCK, ISIG, ISTRIP, IXON, - /*OPOST, */VMIN, VTIME}; + /* OPOST, */ VMIN, VTIME}; if !is_a_tty(libc::STDIN_FILENO) { return Err(from_errno(Errno::ENOTTY)); } @@ -745,8 +745,20 @@ fn readline_edit(prompt: &str, kill_ring.reset(); let mut s = State::new(&mut stdout, prompt, MAX_LINE, get_columns(), history.len()); - let stdin = io::stdin(); // FIXME: ReadConsoleInputW on windows platform - let mut chars = stdin.lock().chars(); + + let stdin = if cfg!(target_os = "unix") { + io::stdin() + } else { + // FIXME: ReadConsoleInputW on windows platform + unimplemented!() + }; + let stdin_lock = if cfg!(target_os = "unix") { + stdin.lock() + } else { + unimplemented!() + }; + let mut chars = stdin_lock.chars(); + loop { let c = chars.next().unwrap(); if c.is_err() && SIGWINCH.compare_and_swap(true, false, atomic::Ordering::SeqCst) { -- GitLab