aboutsummaryrefslogtreecommitdiffstats
path: root/examples/shell.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/shell.rs')
-rw-r--r--examples/shell.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/examples/shell.rs b/examples/shell.rs
new file mode 100644
index 0000000..682c008
--- /dev/null
+++ b/examples/shell.rs
@@ -0,0 +1,41 @@
+use futures::future::Future as _;
+use futures::stream::Stream as _;
+use std::io::Write as _;
+
+mod input;
+
+fn main() {
+ let mut argv = std::env::args();
+ argv.next().unwrap();
+ let cmd = argv.next().unwrap();
+ let args: Vec<_> = argv.collect();
+
+ let process = tokio_pty_process_stream::Process::new(
+ &cmd,
+ &args,
+ input::evented_stdin::Stdin::new(),
+ );
+
+ let _raw = crossterm::RawScreen::into_raw_mode().unwrap();
+ tokio::run(
+ process
+ .for_each(|ev| {
+ match ev {
+ tokio_pty_process_stream::Event::CommandStart {
+ ..
+ } => {}
+ tokio_pty_process_stream::Event::Output { data } => {
+ let stdout = std::io::stdout();
+ let mut stdout = stdout.lock();
+ stdout.write_all(&data).unwrap();
+ stdout.flush().unwrap();
+ }
+ tokio_pty_process_stream::Event::CommandExit {
+ ..
+ } => {}
+ }
+ futures::future::ok(())
+ })
+ .map_err(|e| panic!(e)),
+ );
+}