pass 'maxLength' value to TextScroll function so that we can prevent scrolling past the bottom of the file (unless we want to od so by centtering the screen)

This commit is contained in:
2025-09-19 23:17:28 +01:00
parent d3fa4d08bf
commit 090e7ccea2
4 changed files with 28 additions and 10 deletions

View File

@@ -29,7 +29,8 @@ struct
val cursorLine = LineGap.idxToLineNumber (cursorIdx, buffer) val cursorLine = LineGap.idxToLineNumber (cursorIdx, buffer)
val startLine = val startLine =
TextScroll.getStartLine (prevLineNumber, cursorLine, windowHeight) TextScroll.getStartLine
(prevLineNumber, cursorLine, windowHeight, #lineLength buffer)
(* move buffer to new startLine as required by TextBuilder.build *) (* move buffer to new startLine as required by TextBuilder.build *)
val buffer = LineGap.goToLine (startLine, buffer) val buffer = LineGap.goToLine (startLine, buffer)

View File

@@ -74,7 +74,8 @@ struct
(buffer, bufferIdx, windowWidth, prevScrollColumn) (buffer, bufferIdx, windowWidth, prevScrollColumn)
val bufferLine = val bufferLine =
TextScroll.getStartLine (prevLineNumber, bufferLine, windowHeight) TextScroll.getStartLine
(prevLineNumber, bufferLine, windowHeight, #lineLength buffer)
val buffer = LineGap.goToLine (bufferLine, buffer) val buffer = LineGap.goToLine (bufferLine, buffer)
val drawMsg = NormalModeTextBuilder.build val drawMsg = NormalModeTextBuilder.build
@@ -129,6 +130,11 @@ struct
val buffer = LineGap.goToIdx (lineIdx, buffer) val buffer = LineGap.goToIdx (lineIdx, buffer)
val endOfLineIdx = Cursor.viDlr (buffer, lineIdx, 1) val endOfLineIdx = Cursor.viDlr (buffer, lineIdx, 1)
val endOfLineIdx =
if endOfLineIdx >= #textLength buffer - 2 then
Int.max (0, #textLength buffer - 2)
else
endOfLineIdx
val cursorIdx = Int.min (endOfLineIdx, lineIdx + column) val cursorIdx = Int.min (endOfLineIdx, lineIdx + column)
@@ -141,7 +147,11 @@ struct
val startLine = val startLine =
TextScroll.getStartLine TextScroll.getStartLine
(prevLineNumber, newCursorLineNumber, windowHeight) ( prevLineNumber
, newCursorLineNumber
, windowHeight
, #lineLength buffer
)
val buffer = LineGap.goToLine (startLine, buffer) val buffer = LineGap.goToLine (startLine, buffer)
@@ -223,7 +233,7 @@ struct
val newCursorLineNumber = cursorLineNumber + count val newCursorLineNumber = cursorLineNumber + count
val newCursorLineNumber = val newCursorLineNumber =
if cursorLineNumber >= #lineLength buffer - 2 then if cursorLineNumber >= #lineLength buffer - 2 then
Int.max (0, #lineLength buffer - 2) Int.max (0, #lineLength buffer - 1)
else else
newCursorLineNumber newCursorLineNumber
in in
@@ -270,7 +280,8 @@ struct
val cursorLine = LineGap.idxToLineNumber (cursorIdx, buffer) val cursorLine = LineGap.idxToLineNumber (cursorIdx, buffer)
val startLine = val startLine =
TextScroll.getStartLine (prevLineNumber, cursorLine, windowHeight) TextScroll.getStartLine
(prevLineNumber, cursorLine, windowHeight, #lineLength buffer)
val buffer = LineGap.goToLine (startLine, buffer) val buffer = LineGap.goToLine (startLine, buffer)
@@ -331,7 +342,8 @@ struct
val cursorLine = LineGap.idxToLineNumber (cursorIdx, buffer) val cursorLine = LineGap.idxToLineNumber (cursorIdx, buffer)
val startLine = val startLine =
TextScroll.getStartLine (prevLineNumber, cursorLine, windowHeight) TextScroll.getStartLine
(prevLineNumber, cursorLine, windowHeight, #lineLength buffer)
val buffer = LineGap.goToLine (startLine, buffer) val buffer = LineGap.goToLine (startLine, buffer)

View File

@@ -52,7 +52,8 @@ struct
val buffer = LineGap.goToIdx (cursorIdx, buffer) val buffer = LineGap.goToIdx (cursorIdx, buffer)
val cursorLine = LineGap.idxToLineNumber (cursorIdx, buffer) val cursorLine = LineGap.idxToLineNumber (cursorIdx, buffer)
val startLine = val startLine =
TextScroll.getStartLine (prevLineNumber, cursorLine, windowHeight) TextScroll.getStartLine
(prevLineNumber, cursorLine, windowHeight, #lineLength buffer)
val buffer = LineGap.goToLine (startLine, buffer) val buffer = LineGap.goToLine (startLine, buffer)
val remainingWindowHeight = windowHeight - (TextConstants.ySpace * 2) val remainingWindowHeight = windowHeight - (TextConstants.ySpace * 2)
@@ -122,7 +123,8 @@ struct
val buffer = LineGap.goToIdx (cursorIdx, buffer) val buffer = LineGap.goToIdx (cursorIdx, buffer)
val cursorLine = LineGap.idxToLineNumber (cursorIdx, buffer) val cursorLine = LineGap.idxToLineNumber (cursorIdx, buffer)
val startLine = val startLine =
TextScroll.getStartLine (prevLineNumber, cursorLine, newWindowHeight) TextScroll.getStartLine
(prevLineNumber, cursorLine, newWindowHeight, #lineLength buffer)
val buffer = LineGap.goToLine (startLine, buffer) val buffer = LineGap.goToLine (startLine, buffer)
val remainingWindowHeight = newWindowHeight - (TextConstants.ySpace * 2) val remainingWindowHeight = newWindowHeight - (TextConstants.ySpace * 2)

View File

@@ -37,7 +37,7 @@ struct
fun getScrollColumnFromString (cursorIdx, windowWidth, prevScrollColumn) = fun getScrollColumnFromString (cursorIdx, windowWidth, prevScrollColumn) =
calculateScrollColumn (0, cursorIdx, windowWidth, prevScrollColumn) calculateScrollColumn (0, cursorIdx, windowWidth, prevScrollColumn)
fun getStartLine (prevLineNumber, cursorLine, windowHeight) = fun getStartLine (prevLineNumber, cursorLine, windowHeight, totalLines) =
if cursorLine <= (prevLineNumber + 3) then if cursorLine <= (prevLineNumber + 3) then
(* cursorLine is prior to or same as prevLineNumber, (* cursorLine is prior to or same as prevLineNumber,
* so use cursorLine to calculate the start line we want. *) * so use cursorLine to calculate the start line we want. *)
@@ -50,7 +50,10 @@ struct
if cursorLine > prevLineNumber + (howManyLinesWeCanFit - 3) then if cursorLine > prevLineNumber + (howManyLinesWeCanFit - 3) then
(* cursorLine is after the visible part of the screen (* cursorLine is after the visible part of the screen
* so return the mimimum line where cursorLine is visible *) * so return the mimimum line where cursorLine is visible *)
cursorLine - howManyLinesWeCanFit + 3 if cursorLine >= totalLines - 3 then
Int.max (totalLines - howManyLinesWeCanFit, 0)
else
cursorLine - howManyLinesWeCanFit + 3
else else
prevLineNumber prevLineNumber
end end