aboutsummaryrefslogtreecommitdiffstats
path: root/src/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/record.rs58
-rw-r--r--src/cmd/stream.rs58
-rw-r--r--src/cmd/watch.rs18
3 files changed, 69 insertions, 65 deletions
diff --git a/src/cmd/record.rs b/src/cmd/record.rs
index 2d9116c..d25df4e 100644
--- a/src/cmd/record.rs
+++ b/src/cmd/record.rs
@@ -68,7 +68,8 @@ enum FileState {
struct RecordSession {
file: FileState,
- process: crate::resize::ResizingProcess<crate::async_stdin::Stdin>,
+ process:
+ tokio_pty_process_stream::ResizingProcess<crate::async_stdin::Stdin>,
stdout: tokio::io::Stdout,
buffer: crate::term::Buffer,
sent_local: usize,
@@ -85,7 +86,7 @@ impl RecordSession {
args: &[String],
) -> Self {
let input = crate::async_stdin::Stdin::new();
- let process = crate::resize::ResizingProcess::new(
+ let process = tokio_pty_process_stream::ResizingProcess::new(
tokio_pty_process_stream::Process::new(cmd, args, input),
);
@@ -157,47 +158,40 @@ impl RecordSession {
}
fn poll_read_process(&mut self) -> component_future::Poll<(), Error> {
- match component_future::try_ready!(self.process.poll()) {
- Some(crate::resize::Event::Process(e)) => {
- match e {
- tokio_pty_process_stream::Event::CommandStart {
- ..
- } => {
- if self.raw_screen.is_none() {
- self.raw_screen = Some(
- crossterm::RawScreen::into_raw_mode()
- .context(crate::error::ToRawMode)?,
- );
- }
- }
- tokio_pty_process_stream::Event::CommandExit {
- ..
- } => {
- self.done = true;
- }
- tokio_pty_process_stream::Event::Output { data } => {
- self.record_bytes(&data);
- if let FileState::Open { writer } = &mut self.file {
- writer
- .frame(&data)
- .context(crate::error::WriteTtyrec)?;
- }
- }
+ match component_future::try_ready!(self
+ .process
+ .poll()
+ .context(crate::error::Subprocess))
+ {
+ Some(tokio_pty_process_stream::Event::CommandStart {
+ ..
+ }) => {
+ if self.raw_screen.is_none() {
+ self.raw_screen = Some(
+ crossterm::RawScreen::into_raw_mode()
+ .context(crate::error::ToRawMode)?,
+ );
}
- Ok(component_future::Async::DidWork)
}
- Some(crate::resize::Event::Resize(_)) => {
- Ok(component_future::Async::DidWork)
+ Some(tokio_pty_process_stream::Event::CommandExit { .. }) => {
+ self.done = true;
}
+ Some(tokio_pty_process_stream::Event::Output { data }) => {
+ self.record_bytes(&data);
+ if let FileState::Open { writer } = &mut self.file {
+ writer.frame(&data).context(crate::error::WriteTtyrec)?;
+ }
+ }
+ Some(tokio_pty_process_stream::Event::Resize { .. }) => {}
None => {
if !self.done {
unreachable!()
}
// don't return final event here - wait until we are done
// writing all data to the file (see poll_write_file)
- Ok(component_future::Async::DidWork)
}
}
+ Ok(component_future::Async::DidWork)
}
fn poll_write_terminal(&mut self) -> component_future::Poll<(), Error> {
diff --git a/src/cmd/stream.rs b/src/cmd/stream.rs
index 9d2cf83..b4f1a26 100644
--- a/src/cmd/stream.rs
+++ b/src/cmd/stream.rs
@@ -119,7 +119,8 @@ struct StreamSession<
S: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + 'static,
> {
client: crate::client::Client<S>,
- process: crate::resize::ResizingProcess<crate::async_stdin::Stdin>,
+ process:
+ tokio_pty_process_stream::ResizingProcess<crate::async_stdin::Stdin>,
stdout: tokio::io::Stdout,
buffer: crate::term::Buffer,
sent_local: usize,
@@ -148,7 +149,7 @@ impl<S: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + 'static>
// let input = tokio::io::stdin();
let input = crate::async_stdin::Stdin::new();
- let process = crate::resize::ResizingProcess::new(
+ let process = tokio_pty_process_stream::ResizingProcess::new(
tokio_pty_process_stream::Process::new(cmd, args, input),
);
@@ -235,34 +236,33 @@ impl<S: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + 'static>
}
fn poll_read_process(&mut self) -> component_future::Poll<(), Error> {
- match component_future::try_ready!(self.process.poll()) {
- Some(crate::resize::Event::Process(e)) => {
- match e {
- tokio_pty_process_stream::Event::CommandStart {
- ..
- } => {
- if self.raw_screen.is_none() {
- self.raw_screen = Some(
- crossterm::RawScreen::into_raw_mode()
- .context(crate::error::ToRawMode)?,
- );
- }
- }
- tokio_pty_process_stream::Event::CommandExit {
- ..
- } => {
- self.done = true;
- }
- tokio_pty_process_stream::Event::Output { data } => {
- self.record_bytes(&data);
- }
+ match component_future::try_ready!(self
+ .process
+ .poll()
+ .context(crate::error::Subprocess))
+ {
+ Some(tokio_pty_process_stream::Event::CommandStart {
+ ..
+ }) => {
+ if self.raw_screen.is_none() {
+ self.raw_screen = Some(
+ crossterm::RawScreen::into_raw_mode()
+ .context(crate::error::ToRawMode)?,
+ );
}
- Ok(component_future::Async::DidWork)
}
- Some(crate::resize::Event::Resize(size)) => {
- self.client
- .send_message(crate::protocol::Message::resize(&size));
- Ok(component_future::Async::DidWork)
+ Some(tokio_pty_process_stream::Event::CommandExit { .. }) => {
+ self.done = true;
+ }
+ Some(tokio_pty_process_stream::Event::Output { data }) => {
+ self.record_bytes(&data);
+ }
+ Some(tokio_pty_process_stream::Event::Resize {
+ size: (rows, cols),
+ }) => {
+ self.client.send_message(crate::protocol::Message::resize(
+ &crate::term::Size { rows, cols },
+ ));
}
None => {
if !self.done {
@@ -270,9 +270,9 @@ impl<S: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + 'static>
}
// don't return final event here - wait until we are done
// sending all data to the server (see poll_write_server)
- Ok(component_future::Async::DidWork)
}
}
+ Ok(component_future::Async::DidWork)
}
fn poll_write_terminal(&mut self) -> component_future::Poll<(), Error> {
diff --git a/src/cmd/watch.rs b/src/cmd/watch.rs
index 67e3507..0e4e197 100644
--- a/src/cmd/watch.rs
+++ b/src/cmd/watch.rs
@@ -190,7 +190,12 @@ struct WatchSession<
key_reader: crate::key_reader::KeyReader,
list_client: crate::client::Client<S>,
- resizer: crate::resize::Resizer,
+ resizer: Box<
+ dyn futures::stream::Stream<
+ Item = (u16, u16),
+ Error = crate::error::Error,
+ > + Send,
+ >,
state: State<S>,
raw_screen: Option<crossterm::RawScreen>,
needs_redraw: bool,
@@ -212,7 +217,11 @@ impl<S: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + 'static>
key_reader: crate::key_reader::KeyReader::new(),
list_client,
- resizer: crate::resize::Resizer::new(),
+ resizer: Box::new(
+ tokio_terminal_resize::resizes()
+ .flatten_stream()
+ .context(crate::error::Resize),
+ ),
state: State::new(),
raw_screen: None,
needs_redraw: true,
@@ -577,8 +586,9 @@ impl<S: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + 'static>
];
fn poll_resizer(&mut self) -> component_future::Poll<(), Error> {
- let size = component_future::try_ready!(self.resizer.poll()).unwrap();
- self.resize(size)?;
+ let (rows, cols) =
+ component_future::try_ready!(self.resizer.poll()).unwrap();
+ self.resize(crate::term::Size { rows, cols })?;
Ok(component_future::Async::DidWork)
}