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