From abad09a6c1f60cafd6964e31f09d77790fd699a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mindaugas=20Kasparavic=CC=8Cius?= Date: Fri, 14 Aug 2026 20:56:48 +0300 Subject: [PATCH] =?UTF-8?q?Either=20side=20of=20the=20diff,=20onto=20the?= =?UTF-8?q?=20clipboard=20=E2=80=94=20and=20the=20.har=20that=20crashed=20?= =?UTF-8?q?it?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Copying a SIDE is not copying the diff: each slot now carries a copy control that puts that file's own text on the clipboard verbatim, reachable from the slot, Edit ▸ Copy Left/Right Side, the palette and CmdOrCtrl+Shift+1/2 — Shift over the digit that OPENS that side. A side with no text to give — a spreadsheet carries sheets, a streamed file only a path — shows no control at all rather than one that refuses. utils/ sideText.js answers that once for both the button and the action, so no surface can offer what another declines. Two files sat at their exact ratchets and forced the extraction rather than a raised cap: diffStore (747/747) hands its copy actions to stores/diffCopy.js, the way snippetStore already hands off tags, colour and history; buildMenus (87/87) hands its Edit section to editSection(). Both ratchets TIGHTEN — 747→710 and 87→67. The crash a .har produced took three faults, and all three are fixed: - .har was in no extension map, so it fell through to content sniffing. - Sniffing sees a 50k prefix, which cuts a multi-MB capture into JSON that no longer parses; HTML_RE then matched the
/ diff --git a/src/renderer/src/components/FileSlotsRow.vue b/src/renderer/src/components/FileSlotsRow.vue index a473c342..7654f4c7 100644 --- a/src/renderer/src/components/FileSlotsRow.vue +++ b/src/renderer/src/components/FileSlotsRow.vue @@ -16,6 +16,7 @@ const store = useDiffStore() :file="store.left" :awaiting="!store.left && !!store.right" @pick="store.pick('left')" + @copy="store.copySide('left')" />