From 6d2e4f1e5e52a66f783305d3e18c665a4bcde1e0 Mon Sep 17 00:00:00 2001 From: Nick the Sick Date: Mon, 9 Jun 2025 14:27:13 +0200 Subject: [PATCH] fix: preserve marks across a shift+enter #1672 --- .../KeyboardShortcutsExtension.ts | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/core/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts b/packages/core/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts index 4067820453..902fb9bc21 100644 --- a/packages/core/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts +++ b/packages/core/src/extensions/KeyboardShortcuts/KeyboardShortcutsExtension.ts @@ -434,7 +434,7 @@ export const KeyboardShortcutsExtension = Extension.create<{ ]); const handleEnter = (withShift = false) => { - return this.editor.commands.first(({ commands }) => [ + return this.editor.commands.first(({ commands, tr }) => [ // Removes a level of nesting if the block is empty & indented, while the selection is also empty & at the start // of the block. () => @@ -486,9 +486,21 @@ export const KeyboardShortcutsExtension = Extension.create<{ // both enter and shift+enter. blockHardBreakShortcut === "enter" ) { - return commands.insertContent({ - type: "hardBreak", - }); + const marks = + tr.storedMarks || + tr.selection.$head + .marks() + .filter((m) => + this.editor.extensionManager.splittableMarks.includes( + m.type.name, + ), + ); + + tr.insert( + tr.selection.head, + tr.doc.type.schema.nodes.hardBreak.create(), + ).ensureMarks(marks); + return true; } return false;