Upgrade to nix 0.9
diff --git a/Cargo.toml b/Cargo.toml
index 4a1c1bd..aedced4 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -21,7 +21,7 @@
unicode-segmentation = "1.0"
[target.'cfg(unix)'.dependencies]
-nix = "0.8"
+nix = "0.9"
[target.'cfg(windows)'.dependencies]
winapi = "0.2"
diff --git a/src/error.rs b/src/error.rs
index 2ac7ef4..db70cae 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -36,7 +36,7 @@
#[cfg(unix)]
ReadlineError::Char(ref err) => err.fmt(f),
#[cfg(unix)]
- ReadlineError::Errno(ref err) => write!(f, "Errno: {}", err.errno().desc()),
+ ReadlineError::Errno(ref err) => err.fmt(f),
#[cfg(windows)]
ReadlineError::WindowResize => write!(f, "WindowResize"),
#[cfg(windows)]
@@ -54,7 +54,7 @@
#[cfg(unix)]
ReadlineError::Char(ref err) => err.description(),
#[cfg(unix)]
- ReadlineError::Errno(ref err) => err.errno().desc(),
+ ReadlineError::Errno(ref err) => err.description(),
#[cfg(windows)]
ReadlineError::WindowResize => "WindowResize",
#[cfg(windows)]
diff --git a/src/lib.rs b/src/lib.rs
index 6116ca4..bd94189 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -806,7 +806,7 @@
prompt: &str,
initial: Option<(&str, &str)>,
editor: &mut Editor<H>,
- original_mode: tty::Mode,
+ original_mode: &tty::Mode,
) -> Result<String> {
let completer = editor.helper.as_ref().map(|h| h.completer());
let hinter = editor.helper.as_ref().map(|h| h.hinter() as &Hinter);
@@ -1078,12 +1078,12 @@
Ok(s.line.into_string())
}
-struct Guard(tty::Mode);
+struct Guard<'m>(&'m tty::Mode);
#[allow(unused_must_use)]
-impl Drop for Guard {
+impl<'m> Drop for Guard<'m> {
fn drop(&mut self) {
- let Guard(mode) = *self;
+ let Guard(ref mode) = *self;
mode.disable_raw_mode();
}
}
@@ -1096,8 +1096,8 @@
editor: &mut Editor<H>,
) -> Result<String> {
let original_mode = try!(editor.term.enable_raw_mode());
- let guard = Guard(original_mode);
- let user_input = readline_edit(prompt, initial, editor, original_mode);
+ let guard = Guard(&original_mode);
+ let user_input = readline_edit(prompt, initial, editor, &original_mode);
if editor.config.auto_add_history() {
if let Ok(ref line) = user_input {
editor.add_history_entry(line.as_ref());
diff --git a/src/tty/mod.rs b/src/tty/mod.rs
index 95cd762..b6f10af 100644
--- a/src/tty/mod.rs
+++ b/src/tty/mod.rs
@@ -7,7 +7,7 @@
use line_buffer::LineBuffer;
/// Terminal state
-pub trait RawMode: Copy + Sized {
+pub trait RawMode: Sized {
/// Disable RAW mode for the terminal.
fn disable_raw_mode(&self) -> Result<()>;
}
diff --git a/src/tty/unix.rs b/src/tty/unix.rs
index 6e5280a..7fc3c6e 100644
--- a/src/tty/unix.rs
+++ b/src/tty/unix.rs
@@ -9,6 +9,7 @@
use nix::poll;
use nix::sys::signal;
use nix::sys::termios;
+use nix::sys::termios::SetArg;
use unicode_segmentation::UnicodeSegmentation;
use unicode_width::UnicodeWidthStr;
@@ -65,7 +66,7 @@
impl RawMode for Mode {
/// Disable RAW mode for the terminal.
fn disable_raw_mode(&self) -> Result<()> {
- try!(termios::tcsetattr(STDIN_FILENO, termios::TCSADRAIN, self));
+ try!(termios::tcsetattr(STDIN_FILENO, SetArg::TCSADRAIN, self));
Ok(())
}
}
@@ -264,7 +265,7 @@
let mut key = consts::char_to_key_press(c);
if key == KeyPress::Esc {
let mut fds = [
- poll::PollFd::new(STDIN_FILENO, poll::POLLIN, poll::EventFlags::empty()),
+ poll::PollFd::new(STDIN_FILENO, poll::POLLIN),
];
match poll::poll(&mut fds, self.timeout_ms) {
Ok(n) if n == 0 => {
@@ -569,23 +570,24 @@
fn enable_raw_mode(&self) -> Result<Mode> {
use nix::errno::Errno::ENOTTY;
use nix::sys::termios::{CS8, BRKINT, ECHO, ICANON, ICRNL, IEXTEN, INPCK, ISIG, ISTRIP,
- IXON, /* OPOST, */ VMIN, VTIME};
+ IXON, /* OPOST, */};
+ use nix::sys::termios::SpecialCharacterIndices;
if !self.stdin_isatty {
try!(Err(nix::Error::from_errno(ENOTTY)));
}
let original_mode = try!(termios::tcgetattr(STDIN_FILENO));
- let mut raw = original_mode;
+ let mut raw = original_mode.clone();
// disable BREAK interrupt, CR to NL conversion on input,
// input parity check, strip high bit (bit 8), output flow control
- raw.c_iflag &= !(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+ raw.input_flags &= !(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
// we don't want raw output, it turns newlines into straight linefeeds
// raw.c_oflag = raw.c_oflag & !(OPOST); // disable all output processing
- raw.c_cflag |= CS8; // character-size mark (8 bits)
- // disable echoing, canonical mode, extended input processing and signals
- raw.c_lflag &= !(ECHO | ICANON | IEXTEN | ISIG);
- raw.c_cc[VMIN] = 1; // One character-at-a-time input
- raw.c_cc[VTIME] = 0; // with blocking read
- try!(termios::tcsetattr(STDIN_FILENO, termios::TCSADRAIN, &raw));
+ raw.control_flags |= CS8; // character-size mark (8 bits)
+ // disable echoing, canonical mode, extended input processing and signals
+ raw.local_flags &= !(ECHO | ICANON | IEXTEN | ISIG);
+ raw.control_chars[SpecialCharacterIndices::VMIN as usize] = 1; // One character-at-a-time input
+ raw.control_chars[SpecialCharacterIndices::VTIME as usize] = 0; // with blocking read
+ try!(termios::tcsetattr(STDIN_FILENO, SetArg::TCSADRAIN, &raw));
Ok(original_mode)
}
@@ -601,8 +603,9 @@
#[cfg(unix)]
pub fn suspend() -> Result<()> {
+ use nix::unistd::Pid;
// suspend the whole process group
- try!(signal::kill(0, signal::SIGTSTP));
+ try!(signal::kill(Pid::from_raw(0), signal::SIGTSTP));
Ok(())
}