From a6f36b6db285e5c5a89ef27c3988cc13e38282c9 Mon Sep 17 00:00:00 2001 From: gwenn <gtreguier@gmail.com> Date: Sat, 12 Nov 2016 14:36:23 +0100 Subject: [PATCH] Fix Ctrl-Z (#20) --- src/lib.rs | 4 +--- src/tty/test.rs | 5 +++++ src/tty/unix.rs | 8 ++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 957bcf90..952ddcd3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -43,8 +43,6 @@ use std::io::{self, Write}; use std::mem; use std::path::Path; use std::result; -#[cfg(unix)] -use nix::sys::signal; use tty::{RawMode, RawReader, Terminal, Term}; use completion::{Completer, longest_common_prefix}; @@ -937,7 +935,7 @@ fn readline_edit<C: Completer>(prompt: &str, #[cfg(unix)] KeyPress::Ctrl('Z') => { try!(original_mode.disable_raw_mode()); - try!(signal::raise(signal::SIGSTOP)); + try!(tty::suspend()); try!(s.term.enable_raw_mode()); // TODO original_mode may have changed try!(s.refresh_line()) } diff --git a/src/tty/test.rs b/src/tty/test.rs index 0b85e560..19ce23ba 100644 --- a/src/tty/test.rs +++ b/src/tty/test.rs @@ -140,3 +140,8 @@ impl Term for DummyTerminal { Ok(()) } } + +#[cfg(unix)] +pub fn suspend() -> Result<()> { + Ok(()) +} diff --git a/src/tty/unix.rs b/src/tty/unix.rs index f2d6fde0..a19bb3b9 100644 --- a/src/tty/unix.rs +++ b/src/tty/unix.rs @@ -325,6 +325,14 @@ impl Term for PosixTerminal { } } +#[cfg(unix)] +pub fn suspend() -> Result<()> { + // For macos: + try!(signal::kill(nix::unistd::getppid(), signal::SIGTSTP)); + try!(signal::kill(nix::unistd::getpid(), signal::SIGTSTP)); + Ok(()) +} + #[cfg(all(unix,test))] mod test { #[test] -- GitLab