diff --git a/tools/tui/graphics/command.go b/tools/tui/graphics/command.go index c93cb4f31..c2df9a9b2 100644 --- a/tools/tui/graphics/command.go +++ b/tools/tui/graphics/command.go @@ -11,6 +11,7 @@ import ( "strconv" "strings" + "kitty/tools/tty" "kitty/tools/tui/loop" "kitty/tools/utils" ) @@ -199,6 +200,9 @@ func (self GraphicsCommand) String() string { return ans + ")" } +var debugprintln = tty.DebugPrintln +var _ = debugprintln + func (self *GraphicsCommand) serialize_to(buf io.StringWriter, chunk string) (err error) { var ws func(string) if self.EncodeSerializedDataFunc == nil { @@ -264,7 +268,7 @@ func (self *GraphicsCommand) WriteWithPayloadTo(o io.StringWriter, payload []byt return self.serialize_to(o, "") } if len(payload) <= compression_threshold { - return self.serialize_to(o, base64.StdEncoding.EncodeToString(payload)) + return self.serialize_to(o, base64.RawStdEncoding.EncodeToString(payload)) } gc := *self if self.Format() != GRT_format_png { @@ -274,12 +278,13 @@ func (self *GraphicsCommand) WriteWithPayloadTo(o io.StringWriter, payload []byt payload = compressed } } - data := base64.StdEncoding.EncodeToString(payload) + const chunk_size = 128 * 1024 + data := base64.RawStdEncoding.EncodeToString(payload) for len(data) > 0 && err == nil { chunk := data - if len(data) > 4096 { - chunk = data[:4096] - data = data[4096:] + if len(data) > chunk_size { + chunk = data[:chunk_size] + data = data[chunk_size:] } else { data = "" } diff --git a/tools/tui/graphics/command_test.go b/tools/tui/graphics/command_test.go index b8e1f1c1d..a7554490b 100644 --- a/tools/tui/graphics/command_test.go +++ b/tools/tui/graphics/command_test.go @@ -27,7 +27,7 @@ func TestGraphicsCommandSerialization(t *testing.T) { test_serialize := func(payload string, vals ...string) { expected := "\033_G" + strings.Join(vals, ",") if payload != "" { - expected += ";" + base64.StdEncoding.EncodeToString([]byte(payload)) + expected += ";" + base64.RawStdEncoding.EncodeToString([]byte(payload)) } expected += "\033\\" if diff := cmp.Diff(expected, gc.AsAPC([]byte(payload))); diff != "" { @@ -62,7 +62,7 @@ func TestGraphicsCommandSerialization(t *testing.T) { if len(data) > 0 { t.Fatalf("Unparsed remnant: %#v", string(data)) } - decoded, err := base64.StdEncoding.DecodeString(encoded.String()) + decoded, err := base64.RawStdEncoding.DecodeString(encoded.String()) if err != nil { t.Fatalf("Encoded data not valid base-64 with error: %v", err) } @@ -89,7 +89,7 @@ func TestGraphicsCommandSerialization(t *testing.T) { if diff := cmp.Diff(gc.AsAPC(nil), q.AsAPC(nil)); diff != "" { t.Fatalf("Parsing failed:\n%s", diff) } - if diff := cmp.Diff(q.response_message, base64.StdEncoding.EncodeToString([]byte("abcd"))); diff != "" { + if diff := cmp.Diff(q.response_message, base64.RawStdEncoding.EncodeToString([]byte("abcd"))); diff != "" { t.Fatalf("Failed to parse payload:\n%s", diff) }