Add "r" (resize) event as the first event when appending

This ensures the appended events are can rely on their assumed terminal
window size.

Addresses part of #636.
This commit is contained in:
Marcin Kulik
2025-06-01 09:43:05 +02:00
parent f29f112f0c
commit ed88e7fc36
4 changed files with 11 additions and 15 deletions

View File

@@ -33,7 +33,7 @@ impl cli::Convert {
match format { match format {
Format::AsciicastV3 => Box::new(AsciicastV3Encoder::new(false)), Format::AsciicastV3 => Box::new(AsciicastV3Encoder::new(false)),
Format::AsciicastV2 => Box::new(AsciicastV2Encoder::new(false, 0)), Format::AsciicastV2 => Box::new(AsciicastV2Encoder::new(false, 0)),
Format::Raw => Box::new(RawEncoder::new(false)), Format::Raw => Box::new(RawEncoder::new()),
Format::Txt => Box::new(TextEncoder::new()), Format::Txt => Box::new(TextEncoder::new()),
} }
} }

View File

@@ -289,7 +289,7 @@ impl cli::Session {
Format::Raw => { Format::Raw => {
let writer = Box::new(file); let writer = Box::new(file);
let encoder = Box::new(RawEncoder::new(append)); let encoder = Box::new(RawEncoder::new());
FileWriterStarter { FileWriterStarter {
writer, writer,

View File

@@ -16,7 +16,8 @@ impl AsciicastV2Encoder {
impl super::Encoder for AsciicastV2Encoder { impl super::Encoder for AsciicastV2Encoder {
fn header(&mut self, header: &Header) -> Vec<u8> { fn header(&mut self, header: &Header) -> Vec<u8> {
if self.append { if self.append {
Vec::new() let size = (header.term_cols, header.term_rows);
self.inner.event(&Event::resize(0, size))
} else { } else {
self.inner.header(header) self.inner.header(header)
} }
@@ -47,7 +48,8 @@ impl AsciicastV3Encoder {
impl super::Encoder for AsciicastV3Encoder { impl super::Encoder for AsciicastV3Encoder {
fn header(&mut self, header: &Header) -> Vec<u8> { fn header(&mut self, header: &Header) -> Vec<u8> {
if self.append { if self.append {
Vec::new() let size = (header.term_cols, header.term_rows);
self.inner.event(&Event::resize(0, size))
} else { } else {
self.inner.header(header) self.inner.header(header)
} }

View File

@@ -1,22 +1,16 @@
use crate::asciicast::{Event, EventData, Header}; use crate::asciicast::{Event, EventData, Header};
pub struct RawEncoder { pub struct RawEncoder;
append: bool,
}
impl RawEncoder { impl RawEncoder {
pub fn new(append: bool) -> Self { pub fn new() -> Self {
RawEncoder { append } RawEncoder
} }
} }
impl super::Encoder for RawEncoder { impl super::Encoder for RawEncoder {
fn header(&mut self, header: &Header) -> Vec<u8> { fn header(&mut self, header: &Header) -> Vec<u8> {
if self.append { format!("\x1b[8;{};{}t", header.term_rows, header.term_cols).into_bytes()
Vec::new()
} else {
format!("\x1b[8;{};{}t", header.term_rows, header.term_cols).into_bytes()
}
} }
fn event(&mut self, event: Event) -> Vec<u8> { fn event(&mut self, event: Event) -> Vec<u8> {
@@ -40,7 +34,7 @@ mod tests {
#[test] #[test]
fn encoder() { fn encoder() {
let mut enc = RawEncoder::new(false); let mut enc = RawEncoder::new();
let header = Header { let header = Header {
term_cols: 100, term_cols: 100,