From 05abecc70d88d1271172d832f1b1ea2b81b6604a Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Thu, 25 Sep 2025 14:44:39 +0100 Subject: [PATCH] pass a failing test for 'dk' motion by decrementing newCursorLineNumber if the end of the deletion range is on a newline, and it is also the last char in the buffer --- fcore/normal-mode/make-normal-delete.sml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/fcore/normal-mode/make-normal-delete.sml b/fcore/normal-mode/make-normal-delete.sml index 8c9b862..4f604c2 100644 --- a/fcore/normal-mode/make-normal-delete.sml +++ b/fcore/normal-mode/make-normal-delete.sml @@ -559,16 +559,20 @@ struct else let val endOfLine = Cursor.viDlr (buffer, cursorIdx, 1) + val buffer = LineGap.goToIdx (endOfLine, buffer) + val endsOnNewline = Cursor.isCursorAtStartOfLine (buffer, endOfLine) (* edge case: if cursor is on a newline, * then we don't want to delete the newline * as we are already deleting the newline * at the start of this range *) - val buffer = LineGap.goToIdx (endOfLine, buffer) - val endOfLine = - if Cursor.isCursorAtStartOfLine (buffer, endOfLine) then endOfLine - else endOfLine + 1 + val endOfLine = if endsOnNewline then endOfLine else endOfLine + 1 + val newCursorLineNumber = + if endsOnNewline andalso endOfLine = #textLength buffer - 1 then + newCursorLineNumber - 1 + else + newCursorLineNumber val buffer = LineGap.goToLine (newCursorLineNumber, buffer) val lineIdx = LineGap.lineNumberToIdx (newCursorLineNumber, buffer)