diff options
Diffstat (limited to 'src/eval.rs')
-rw-r--r-- | src/eval.rs | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/src/eval.rs b/src/eval.rs index a7e09c4..e29d10f 100644 --- a/src/eval.rs +++ b/src/eval.rs @@ -12,7 +12,7 @@ pub enum Error { #[snafu(display("failed to find command `{}`: {}", cmd, source))] Command { cmd: String, - source: crate::process::Error, + source: tokio_pty_process_stream::Error, }, #[snafu(display("failed to run builtin command `{}`: {}", cmd, source))] @@ -24,7 +24,7 @@ pub enum Error { #[snafu(display("failed to run executable `{}`: {}", cmd, source))] ProcessExecution { cmd: String, - source: crate::process::Error, + source: tokio_pty_process_stream::Error, }, } @@ -35,18 +35,14 @@ pub fn eval(line: &str) -> Eval { Eval::new(line) } -pub enum CommandEvent { - CommandStart(String, Vec<String>), - Output(Vec<u8>), - CommandExit(std::process::ExitStatus), -} - pub struct Eval { line: String, stream: Option< Box< - dyn futures::stream::Stream<Item = CommandEvent, Error = Error> - + Send, + dyn futures::stream::Stream< + Item = tokio_pty_process_stream::Event, + Error = Error, + > + Send, >, >, manage_screen: bool, @@ -69,7 +65,7 @@ impl Eval { #[must_use = "streams do nothing unless polled"] impl futures::stream::Stream for Eval { - type Item = CommandEvent; + type Item = tokio_pty_process_stream::Event; type Error = Error; fn poll(&mut self) -> futures::Poll<Option<Self::Item>, Self::Error> { @@ -80,17 +76,19 @@ impl futures::stream::Stream for Eval { let builtin_stream = crate::builtins::Builtin::new(&cmd, &args); let stream: Box< dyn futures::stream::Stream< - Item = CommandEvent, + Item = tokio_pty_process_stream::Event, Error = Error, > + Send, > = if let Ok(s) = builtin_stream { Box::new(s.context(BuiltinExecution { cmd })) } else { - let process_stream = - crate::process::Process::new(&cmd, &args) - .context(Command { cmd: cmd.clone() })? - .set_raw(self.manage_screen); - Box::new(process_stream.context(ProcessExecution { cmd })) + let input = crate::async_stdin::Stdin::new(); + let process = tokio_pty_process_stream::ResizingProcess::new( + tokio_pty_process_stream::Process::new( + &cmd, &args, input, + ), + ); + Box::new(process.context(ProcessExecution { cmd })) }; self.stream = Some(stream); } |