adjust functor to move by dfa so that we cannot go to the last char of the file if (last char is a newline and is preceded by a non-newline), but otherwise we can go to the last char of the file.
This commit is contained in:
@@ -737,4 +737,9 @@ struct
|
|||||||
end
|
end
|
||||||
| [] => true
|
| [] => true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
(* Prerequisite: lineGap is moved to cursorIdx *)
|
||||||
|
fun isOnNewlineAfterChr (buffer, cursorIdx) =
|
||||||
|
cursorIdx > 0 andalso not (isPrevChrStartOfLine (buffer, cursorIdx))
|
||||||
|
andalso isCursorAtStartOfLine (buffer, cursorIdx)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -63,12 +63,26 @@ struct
|
|||||||
val cursorIdx = Fn.fMove (buffer, cursorIdx, count)
|
val cursorIdx = Fn.fMove (buffer, cursorIdx, count)
|
||||||
|
|
||||||
val textLength = #textLength buffer
|
val textLength = #textLength buffer
|
||||||
val cursorIdx =
|
|
||||||
if cursorIdx >= textLength - 1 then Int.max (textLength - 1, 0)
|
|
||||||
else cursorIdx
|
|
||||||
in
|
in
|
||||||
NormalFinish.buildTextAndClear
|
if cursorIdx >= textLength - 1 then
|
||||||
(app, buffer, cursorIdx, searchList, [], bufferModifyTime)
|
let
|
||||||
|
val cursorIdx = Int.max (textLength - 1, 0)
|
||||||
|
val buffer = LineGap.goToIdx (cursorIdx, buffer)
|
||||||
|
in
|
||||||
|
if Cursor.isOnNewlineAfterChr (buffer, cursorIdx) then
|
||||||
|
let
|
||||||
|
val cursorIdx = cursorIdx - 1
|
||||||
|
in
|
||||||
|
NormalFinish.buildTextAndClear
|
||||||
|
(app, buffer, cursorIdx, searchList, [], bufferModifyTime)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
NormalFinish.buildTextAndClear
|
||||||
|
(app, buffer, cursorIdx, searchList, [], bufferModifyTime)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
NormalFinish.buildTextAndClear
|
||||||
|
(app, buffer, cursorIdx, searchList, [], bufferModifyTime)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user