add function to get the appropriate scroll column

This commit is contained in:
2025-09-11 16:17:56 +01:00
parent e85ac5e806
commit 77439acef6
4 changed files with 30 additions and 1 deletions

View File

@@ -14,6 +14,10 @@ struct
let
val {windowWidth, windowHeight, startLine, searchString, ...} = app
(* calculate scroll column *)
val buffer = LineGap.goToIdx (cursorIdx, buffer)
val visualScrollColumn = TextScroll.getScrollColumn (buffer, cursorIdx, windowWidth)
(* move LineGap to first line displayed on screen *)
val buffer = LineGap.goToLine (startLine, buffer)

View File

@@ -4,5 +4,7 @@ struct
val xSpace3 = xSpace * 3
val ySpace = 25
val scale: Real32.real = 2.0
val textLineWidth = xSpace * 80
val textLineCount = 80
val textLineWidth = xSpace * textLineCount
end

22
fcore/text-scroll.sml Normal file
View File

@@ -0,0 +1,22 @@
structure TextScroll =
struct
structure TC = TextConstants
(* Preqreuisite: move buffer to cursorIdx *)
fun getScrollColumn (buffer, cursorIdx, windowWidth) =
let
val startOfLine = Cursor.vi0 (buffer, cursorIdx)
val columnDifference = cursorIdx - startOfLine
in
if columnDifference = 0 then
0
else
let
val howManyColumnsCanWeFit =
if windowWidth >= TC.textLineWidth then TC.textLineCount
else windowWidth div TC.xSpace
in
columnDifference mod howManyColumnsCanWeFit
end
end
end

View File

@@ -40,6 +40,7 @@ in
end
fcore/cursor.sml
fcore/text-window.sml
fcore/text-scroll.sml
fcore/normal-mode/normal-finish.sml
fcore/normal-mode/normal-search-finish.sml