From c3e62dab9e15cd05620c8a71b349026997802428 Mon Sep 17 00:00:00 2001 From: theimpostor Date: Fri, 23 Aug 2024 06:52:18 -0500 Subject: Ensure chunking writer output is buffered --- main.go | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 806075e..36c6dbc 100644 --- a/main.go +++ b/main.go @@ -117,9 +117,9 @@ func identifyTerm() { } } -// Breaks up every 250 bytes with a screen dcs end + start sequence +// Inserts screen dcs end + start sequence into long sequences // Based on: https://github.com/chromium/hterm/blob/6846a85f9579a8dfdef4405cc50d9fb17d8944aa/etc/osc52.sh#L23 -const chunkSize = 250 +const chunkSize = 252 type chunkingWriter struct { bytesWritten int64 @@ -189,18 +189,17 @@ func copy(fnames []string) error { defer closetty(tty) // Open buffered output, using default max OSC52 length as buffer size - var out *bufio.Writer - if isScreen { - // TODO: stdout or tty? - out = bufio.NewWriterSize(&chunkingWriter{writer: os.Stdout}, 1000000) - } else { - out = bufio.NewWriterSize(tty, 1000000) - } + out := bufio.NewWriterSize(tty, 1000000) // Start OSC52 fmt.Fprint(out, oscOpen) - b64 := base64.NewEncoder(base64.StdEncoding, out) + var b64 io.WriteCloser + if !isScreen { + b64 = base64.NewEncoder(base64.StdEncoding, out) + } else { + b64 = base64.NewEncoder(base64.StdEncoding, &chunkingWriter{writer: out}) + } for _, fname := range fnames { encode(fname, b64) } -- cgit v1.2.3