fix 'MakeNormalDelete.removeChr' by accounting for case when we are deleting from last line but the last line does not end with its own newline
This commit is contained in:
@@ -51,7 +51,9 @@ struct
|
||||
* beyond current line's length,
|
||||
* then clip the length, to ensure we don't delete the newline *)
|
||||
val high = cursorIdx + count
|
||||
val high = Int.min (lineEnd - 1, high)
|
||||
val high =
|
||||
if Cursor.isOnNewlineAfterChr (buffer, lineEnd) then lineEnd
|
||||
else Int.min (lineEnd - 1, high)
|
||||
val length = high - cursorIdx
|
||||
|
||||
val initialMsg = Fn.initMsgs (cursorIdx, length, buffer)
|
||||
@@ -62,15 +64,23 @@ struct
|
||||
val lineEndAfterDelete = Cursor.viDlr (buffer, lineStart, 1)
|
||||
|
||||
val cursorIdx = Int.min (lineEndAfterDelete, cursorIdx)
|
||||
|
||||
in
|
||||
if cursorIdx >= #textLength buffer - 1 then
|
||||
(* special case: when buffer does not end with newline
|
||||
* and we are deleting from the last line *)
|
||||
let
|
||||
val cursorIdx = #textLength buffer - 1
|
||||
val buffer = LineGap.goToIdx (cursorIdx, buffer)
|
||||
val cursorIdx =
|
||||
if Cursor.isOnNewlineAfterChr (buffer, cursorIdx) then
|
||||
if cursorIdx < #textLength buffer - 1 then cursorIdx + 1
|
||||
else cursorIdx - 1
|
||||
cursorIdx - 1
|
||||
else
|
||||
cursorIdx
|
||||
in
|
||||
finishAfterDeletingBuffer
|
||||
(app, cursorIdx, buffer, time, initialMsg)
|
||||
end
|
||||
else
|
||||
finishAfterDeletingBuffer (app, cursorIdx, buffer, time, initialMsg)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user