aboutsummaryrefslogtreecommitdiffstats
path: root/src/eval.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/eval.rs')
-rw-r--r--src/eval.rs32
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);
}