fix: insert list body text after hidden separators

This commit is contained in:
Valdemar Lorenzen
2026-10-19 13:34:18 +02:00
parent ac28b6dd61
commit bbee699cc8
4 changed files with 72 additions and 4 deletions
+1 -1
View File
@@ -145,7 +145,7 @@ final class NotesController: NSViewController, NSTextViewDelegate {
guard textView === editor, editor.isEditable,
commandSelector == #selector(NSResponder.insertNewline(_:)) else { return false }
let source = editor.markdownString as NSString
let selection = editor.markdownRange(for: editor.selectedRange())
let selection = editor.markdownInsertionRange(for: editor.selectedRange())
var start = 0, end = 0
source.getLineStart(&start, end: nil, contentsEnd: &end,
for: NSRange(location: selection.location, length: 0))
+10 -3
View File
@@ -202,6 +202,12 @@ final class NotesTextView: NSTextView, @MainActor NSLayoutManagerDelegate {
replaceSource(NSAttributedString(string: text, attributes: textTypingAttributes), range: range, semantic: true)
}
func markdownInsertionRange(for rendered: NSRange) -> NSRange {
guard rendered.length == 0 else { return markdownRange(for: rendered) }
let body = listWhitespaceBoundary(from: rendered.location, forward: true)
return markdownRange(for: NSRange(location: body, length: 0))
}
override func insertText(_ insertString: Any, replacementRange: NSRange) {
let replacement: NSAttributedString
if let attributed = insertString as? NSAttributedString {
@@ -210,7 +216,7 @@ final class NotesTextView: NSTextView, @MainActor NSLayoutManagerDelegate {
replacement = NSAttributedString(string: text, attributes: textTypingAttributes)
} else { return }
let range = replacementRange.location == NSNotFound ? selectedRange() : replacementRange
replaceSource(replacement, range: markdownRange(for: range), semantic: false)
replaceSource(replacement, range: markdownInsertionRange(for: range), semantic: false)
}
private func replaceSource(_ replacement: NSAttributedString, range: NSRange, semantic: Bool) {
@@ -252,7 +258,8 @@ final class NotesTextView: NSTextView, @MainActor NSLayoutManagerDelegate {
if semantic { breakUndoCoalescing() }
}
refreshTasks()
setSelectedRange(renderedRange(for: NSRange(location: range.location + replacement.length, length: 0)))
let caret = renderedRange(for: NSRange(location: range.location + replacement.length, length: 0))
setSelectedRange(NSRange(location: listWhitespaceBoundary(from: caret.location, forward: true), length: 0))
}
override func deleteBackward(_ sender: Any?) {
@@ -434,7 +441,7 @@ final class NotesTextView: NSTextView, @MainActor NSLayoutManagerDelegate {
reader.importsGraphics = importsGraphics
guard reader.readSelection(from: pboard, type: type) else { return false }
replaceSource(Self.serialize(reader.attributedString(), keepingMetadata: true),
range: markdownRange(for: selectedRange()), semantic: true)
range: markdownInsertionRange(for: selectedRange()), semantic: true)
return true
}