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