From 5031858f348b2e1dafe6898aa5dddc01a4eed2ef Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 2 May 2026 10:11:53 +0000 Subject: [PATCH] Fix QueueDnDData: include full DnD header in every payload chunk Agent-Logs-Url: https://github.com/kovidgoyal/kitty/sessions/e6b64599-e39b-468d-8dbf-8e209fb5cde5 Co-authored-by: kovidgoyal <1308621+kovidgoyal@users.noreply.github.com> --- tools/tui/loop/api.go | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/tools/tui/loop/api.go b/tools/tui/loop/api.go index 891ba5438..54d8936bf 100644 --- a/tools/tui/loop/api.go +++ b/tools/tui/loop/api.go @@ -670,13 +670,13 @@ func (self *Loop) DrawSizedText(text string, spec SizedText) { } func (self *Loop) QueueDnDData(cmd DndCommand) IdType { - b := strings.Builder{} - b.Grow(64) + meta := strings.Builder{} + meta.Grow(64) as_base64 := cmd.Type == 'r' || cmd.Type == 'p' - fmt.Fprintf(&b, "\x1b]%d;t=%c", kitty.DndCode, cmd.Type) + fmt.Fprintf(&meta, "t=%c", cmd.Type) add := func(key byte, val int) { if val != 0 { - fmt.Fprintf(&b, ":%c=%d", key, val) + fmt.Fprintf(&meta, ":%c=%d", key, val) } } add('o', cmd.Operation) @@ -684,11 +684,12 @@ func (self *Loop) QueueDnDData(cmd DndCommand) IdType { add('y', cmd.Y) add('X', cmd.Xp) add('Y', cmd.Yp) + metaStr := meta.String() + osc_prefix := fmt.Sprintf("\x1b]%d;", kitty.DndCode) payload := utils.UnsafeBytesToString(cmd.Payload) payload_sz := len(payload) if payload_sz == 0 { - b.WriteString("\x1b\\") - return self.QueueWriteString(b.String()) + return self.QueueWriteString(osc_prefix + metaStr + "\x1b\\") } if as_base64 { payload_sz = base64.RawStdEncoding.EncodedLen(payload_sz) @@ -702,12 +703,7 @@ func (self *Loop) QueueDnDData(cmd DndCommand) IdType { end := i + chunk_size is_last := end >= len(payload) end = min(end, len(payload)) - if i == 0 { - fmt.Fprintf(&b, ":m=%d;", utils.IfElse(is_last, 0, 1)) - self.QueueWriteString(b.String()) - } else { - self.QueueWriteString(fmt.Sprintf("\x1b]%d;m=%d;", kitty.DndCode, utils.IfElse(is_last, 0, 1))) - } + self.QueueWriteString(fmt.Sprintf("%s%s:m=%d;", osc_prefix, metaStr, utils.IfElse(is_last, 0, 1))) self.QueueWriteString(payload[i:end]) ans = self.QueueWriteString("\x1b\\") }