Save resize events in asciicast file

This commit is contained in:
Marcin Kulik
2023-10-30 13:40:53 +01:00
parent cd0a0171f2
commit 3ff3c545e8
5 changed files with 24 additions and 0 deletions

View File

@@ -6,6 +6,7 @@ pub trait Writer {
fn header(&mut self, header: &Header) -> io::Result<()>; fn header(&mut self, header: &Header) -> io::Result<()>;
fn output(&mut self, time: f64, data: &[u8]) -> io::Result<()>; fn output(&mut self, time: f64, data: &[u8]) -> io::Result<()>;
fn input(&mut self, time: f64, data: &[u8]) -> io::Result<()>; fn input(&mut self, time: f64, data: &[u8]) -> io::Result<()>;
fn resize(&mut self, time: f64, size: (u16, u16)) -> io::Result<()>;
} }
pub struct Header { pub struct Header {

View File

@@ -75,6 +75,10 @@ where
fn input(&mut self, time: f64, data: &[u8]) -> io::Result<()> { fn input(&mut self, time: f64, data: &[u8]) -> io::Result<()> {
self.write_event(Event::input(time, data)) self.write_event(Event::input(time, data))
} }
fn resize(&mut self, time: f64, size: (u16, u16)) -> io::Result<()> {
self.write_event(Event::resize(time, size))
}
} }
pub fn open<R: BufRead>( pub fn open<R: BufRead>(
@@ -145,6 +149,14 @@ impl Event {
data: String::from_utf8_lossy(data).to_string(), data: String::from_utf8_lossy(data).to_string(),
} }
} }
pub fn resize(time: f64, size: (u16, u16)) -> Self {
Event {
time,
code: EventCode::Resize,
data: format!("{}x{}", size.0, size.1),
}
}
} }
impl Display for EventCode { impl Display for EventCode {

View File

@@ -22,4 +22,8 @@ impl<W: Write> super::Writer for Writer<W> {
fn input(&mut self, _time: f64, _data: &[u8]) -> io::Result<()> { fn input(&mut self, _time: f64, _data: &[u8]) -> io::Result<()> {
Ok(()) Ok(())
} }
fn resize(&mut self, time: f64, size: (u16, u16)) -> io::Result<()> {
Ok(())
}
} }

View File

@@ -15,6 +15,7 @@ pub trait Recorder {
fn start(&mut self, size: (u16, u16)) -> io::Result<()>; fn start(&mut self, size: (u16, u16)) -> io::Result<()>;
fn output(&mut self, data: &[u8]); fn output(&mut self, data: &[u8]);
fn input(&mut self, data: &[u8]); fn input(&mut self, data: &[u8]);
fn resize(&mut self, size: (u16, u16));
} }
pub fn exec<S: AsRef<str>, R: Recorder>( pub fn exec<S: AsRef<str>, R: Recorder>(
@@ -193,6 +194,7 @@ fn copy<R: Recorder>(
if signal == SIGWINCH { if signal == SIGWINCH {
let winsize = get_tty_size(tty_fd, winsize_override); let winsize = get_tty_size(tty_fd, winsize_override);
set_pty_size(master_fd, &winsize); set_pty_size(master_fd, &winsize);
recorder.resize((winsize.ws_col, winsize.ws_row));
} }
} }
} }
@@ -333,6 +335,7 @@ mod tests {
} }
fn input(&mut self, _data: &[u8]) {} fn input(&mut self, _data: &[u8]) {}
fn resize(&mut self, _size: (u16, u16)) {}
} }
impl TestRecorder { impl TestRecorder {

View File

@@ -79,4 +79,8 @@ impl pty::Recorder for Recorder {
// TODO use notifier for error reporting // TODO use notifier for error reporting
} }
} }
fn resize(&mut self, size: (u16, u16)) {
let _ = self.writer.resize(self.elapsed_time(), size);
}
} }