From 0a25aaec542009523deadc45d4a4059988638501 Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jackpot51@gmail.com> Date: Sun, 26 Mar 2017 15:39:57 -0600 Subject: [PATCH] Add ransid input events --- src/terminal/console.rs | 4 +++ src/terminal/main.rs | 54 ++++++++++++++++++++--------------------- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/src/terminal/console.rs b/src/terminal/console.rs index 345d03d..62d70ac 100644 --- a/src/terminal/console.rs +++ b/src/terminal/console.rs @@ -272,6 +272,7 @@ impl Console { let console_w = self.console.w; let grid = &mut self.grid; let window = &mut self.window; + let input = &mut self.input; let changed = &mut self.changed; let mut str_buf = [0; 4]; self.console.write(buf, |event| { @@ -290,6 +291,9 @@ impl Console { } changed.insert(y); }, + ransid::Event::Input { data } => { + input.extend(data); + }, ransid::Event::Rect { x, y, w, h, color } => { { let block = &mut grid[y * console_w + x]; diff --git a/src/terminal/main.rs b/src/terminal/main.rs index a3e2cc1..94c80b1 100644 --- a/src/terminal/main.rs +++ b/src/terminal/main.rs @@ -75,20 +75,6 @@ fn handle(console: &mut Console, master_fd: RawFd, process: &mut Child) { _ => () } } - - if ! console.input.is_empty() { - if let Err(err) = master.write(&console.input) { - let term_stderr = io::stderr(); - let mut term_stderr = term_stderr.lock(); - - let _ = term_stderr.write(b"failed to write stdin: "); - let _ = term_stderr.write(err.description().as_bytes()); - let _ = term_stderr.write(b"\n"); - return false; - } - let _ = master.flush(); - console.input.clear(); - } } else if event_id == master_fd { let mut packet = [0; 4096]; let count = master.read(&mut packet).expect("terminal: failed to read master PTY"); @@ -108,6 +94,20 @@ fn handle(console: &mut Console, master_fd: RawFd, process: &mut Child) { println!("Unknown event {}", event_id); } + if ! console.input.is_empty() { + if let Err(err) = master.write(&console.input) { + let term_stderr = io::stderr(); + let mut term_stderr = term_stderr.lock(); + + let _ = term_stderr.write(b"failed to write stdin: "); + let _ = term_stderr.write(err.description().as_bytes()); + let _ = term_stderr.write(b"\n"); + return false; + } + let _ = master.flush(); + console.input.clear(); + } + true }; @@ -172,6 +172,19 @@ fn handle(console: &mut Console, master_fd: RawFd, process: &mut Child) { } } + let mut packet = [0; 4096]; + match master.read(&mut packet) { + Ok(0) => break 'events, + Ok(count) => { + console.write(&packet[..count], true).expect("terminal: failed to write to console"); + console.redraw(); + }, + Err(err) => match err.kind() { + ErrorKind::WouldBlock => (), + _ => panic!("terminal: failed to read master PTY: {:?}", err) + } + } + if ! console.input.is_empty() { if let Err(err) = master.write(&console.input) { let term_stderr = io::stderr(); @@ -186,19 +199,6 @@ fn handle(console: &mut Console, master_fd: RawFd, process: &mut Child) { console.input.clear(); } - let mut packet = [0; 4096]; - match master.read(&mut packet) { - Ok(0) => break 'events, - Ok(count) => { - console.write(&packet[..count], true).expect("terminal: failed to write to console"); - console.redraw(); - }, - Err(err) => match err.kind() { - ErrorKind::WouldBlock => (), - _ => panic!("terminal: failed to read master PTY: {:?}", err) - } - } - match process.try_wait() { Ok(status) => match status { Some(_code) => break 'events, -- GitLab