From c13ef69a9e3bdd7d7f47eda92078b5bfcf73a646 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Thu, 25 Sep 2025 10:31:02 +0100 Subject: [PATCH] pass failing test for 'dk' by paying attention to newlines --- fcore/normal-mode/make-normal-delete.sml | 26 ++++++++++++++++-------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/fcore/normal-mode/make-normal-delete.sml b/fcore/normal-mode/make-normal-delete.sml index 8849dfe..848e612 100644 --- a/fcore/normal-mode/make-normal-delete.sml +++ b/fcore/normal-mode/make-normal-delete.sml @@ -506,17 +506,17 @@ struct end else let + (* make sure the cursorIdx will be at the first column + * of current line, after deleting from buffer. *) + val buffer = LineGap.goToIdx (lineIdx, buffer) + val newCursorIdx = + if Cursor.isOnNewlineAfterChr (buffer, lineIdx) then lineIdx + 1 + else lineIdx + val buffer = LineGap.goToIdx (endOfLine, buffer) val initialMsg = Fn.initMsgs (lineIdx, length, buffer) val buffer = LineGap.delete (lineIdx, length, buffer) - (* make sure the cursorIdx is at the first column - * of the previous line, after deleting from buffer *) - val buffer = LineGap.goToIdx (lineIdx, buffer) - val newCursorIdx = Cursor.viH (buffer, lineIdx, 1) - val buffer = LineGap.goToIdx (newCursorIdx, buffer) - val newCursorIdx = Cursor.vi0 (buffer, newCursorIdx) - val buffer = if #textLength buffer = 0 then LineGap.append ("\n", buffer) else buffer @@ -543,7 +543,7 @@ struct let val endOfLine = Cursor.viDlr (buffer, cursorIdx, 1) - (* edge case: if we are on a newline (if endOfLine = cursorIdx) + (* edge case: if cursor is on a newline (if endOfLine = cursorIdx) * then we only want to delete 1 character at this line, * which is the newline the cursor is at. * Otherwise, we want to delete 2 chars by default. *) @@ -554,7 +554,15 @@ struct end else let - val endOfLine = Cursor.viDlr (buffer, cursorIdx, 1) + 1 + val endOfLine = Cursor.viDlr (buffer, cursorIdx, 1) + + (* 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 endOfLine = + if endOfLine = cursorIdx then endOfLine else endOfLine + 1 + val buffer = LineGap.goToLine (newCursorLineNumber, buffer) val lineIdx = LineGap.lineNumberToIdx (newCursorLineNumber, buffer)