From f77324afe7984526359ee1f4cf450795c967c9d5 Mon Sep 17 00:00:00 2001 From: hunter-dev Date: Mon, 31 Aug 2026 00:41:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BB=A3=E7=A0=81=E5=9D=97?= =?UTF-8?q?=E5=A4=8D=E5=88=B6=E9=99=84=E5=B8=A6=20`=20=E5=9B=B4=E6=A0=8F?= =?UTF-8?q?=EF=BC=9A=E7=BA=AF=E5=86=85=E5=AE=B9=E5=A4=8D=E5=88=B6=EF=BC=88?= =?UTF-8?q?transformCopiedText=3Dfalse=20+=20copy=20=E6=8B=A6=E6=88=AA=20+?= =?UTF-8?q?=20=E5=A4=8D=E5=88=B6=E6=8C=89=E9=92=AE=E6=94=B9=E7=BA=AF?= =?UTF-8?q?=E5=86=85=E5=AE=B9=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../features/editor/CodeBlockView.tsx | 14 ++-- .../renderer/features/editor/TiptapEditor.tsx | 25 +++++++- apps/desktop/tests/e2e/codecopy-check.spec.ts | 64 +++++++++++++++++++ apps/desktop/tests/e2e/fix-regression.spec.ts | 7 +- 4 files changed, 98 insertions(+), 12 deletions(-) create mode 100644 apps/desktop/tests/e2e/codecopy-check.spec.ts diff --git a/apps/desktop/src/renderer/features/editor/CodeBlockView.tsx b/apps/desktop/src/renderer/features/editor/CodeBlockView.tsx index f617497..50de0d5 100644 --- a/apps/desktop/src/renderer/features/editor/CodeBlockView.tsx +++ b/apps/desktop/src/renderer/features/editor/CodeBlockView.tsx @@ -30,20 +30,18 @@ export function CodeBlockView({ node, updateAttributes, selected }: NodeViewProp const language = (node.attrs.language as string) || ''; const codeClass = language ? `language-${language} hljs` : 'hljs'; const [copied, setCopied] = useState(false); - // FR-E5 扩展:复制时携带 Markdown 代码围栏(```language),方便粘贴到其他 Markdown 应用 - const copyWithFence = async () => { + // 复制按钮:复制纯代码内容(不带 Markdown 围栏) + const copyPlain = async () => { const code = node.textContent ?? ''; - const lang = language && language !== 'plaintext' ? language : ''; - const text = lang ? '```' + lang + '\n' + code + '\n```' : '```\n' + code + '\n```'; try { - await navigator.clipboard.writeText(text); + await navigator.clipboard.writeText(code); setCopied(true); setTimeout(() => setCopied(false), 1500); } catch { // 剪贴板不可用时回退到 execCommand try { const ta = document.createElement('textarea'); - ta.value = text; + ta.value = code; ta.style.position = 'fixed'; ta.style.opacity = '0'; document.body.appendChild(ta); @@ -59,8 +57,8 @@ export function CodeBlockView({ node, updateAttributes, selected }: NodeViewProp