fix bugs in new function for moving cursor upwards, taking care to calculate column different if on first line (where there is no preceding newline) vs any line other than the first
This commit is contained in:
@@ -126,19 +126,24 @@ struct
|
|||||||
val startOfLine = Cursor.vi0 (buffer, cursorIdx)
|
val startOfLine = Cursor.vi0 (buffer, cursorIdx)
|
||||||
val column = cursorIdx - startOfLine
|
val column = cursorIdx - startOfLine
|
||||||
|
|
||||||
val cursorLineNumber = LineGap.idxToLineNumber (cursorIdx, buffer)
|
val cursorLineNumber =
|
||||||
|
if Cursor.isNextChrEndOfLine (buffer, cursorIdx) then
|
||||||
|
LineGap.idxToLineNumber (cursorIdx + 1, buffer)
|
||||||
|
else
|
||||||
|
LineGap.idxToLineNumber (cursorIdx, buffer)
|
||||||
val newCursorLineNumber = Int.max (cursorLineNumber - count, 0)
|
val newCursorLineNumber = Int.max (cursorLineNumber - count, 0)
|
||||||
|
|
||||||
val buffer = LineGap.goToLine (newCursorLineNumber, buffer)
|
val buffer = LineGap.goToLine (newCursorLineNumber, buffer)
|
||||||
val lineIdx = LineGap.lineNumberToIdx (newCursorLineNumber, buffer)
|
val lineIdx = LineGap.lineNumberToIdx (newCursorLineNumber, buffer)
|
||||||
val buffer = LineGap.goToIdx (lineIdx, buffer)
|
val buffer = LineGap.goToIdx (lineIdx, buffer)
|
||||||
val lineIdx =
|
val lineIdx =
|
||||||
if Cursor.isNextChrEndOfLine (buffer, lineIdx) then cursorIdx
|
if Cursor.isNextChrEndOfLine (buffer, lineIdx) then lineIdx
|
||||||
else lineIdx + 1
|
else lineIdx + 1
|
||||||
|
|
||||||
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 column = if newCursorLineNumber = 0 then column - 1 else column
|
||||||
val cursorIdx = Int.min (endOfLineIdx, lineIdx + column)
|
val cursorIdx = Int.min (endOfLineIdx, lineIdx + column)
|
||||||
|
|
||||||
val buffer = LineGap.goToIdx (cursorIdx, buffer)
|
val buffer = LineGap.goToIdx (cursorIdx, buffer)
|
||||||
|
|||||||
@@ -303,22 +303,6 @@ struct
|
|||||||
in
|
in
|
||||||
Expect.isTrue isSkipped
|
Expect.isTrue isSkipped
|
||||||
end)
|
end)
|
||||||
, test "moves to 0 of buffer when on first line" (fn _ =>
|
|
||||||
let
|
|
||||||
(* arrange *)
|
|
||||||
val str = "hello \nworld \ntime to go\n"
|
|
||||||
val buffer = LineGap.fromString str
|
|
||||||
val app = TestUtils.init buffer
|
|
||||||
val app = AppWith.idx (app, 5)
|
|
||||||
|
|
||||||
(* act *)
|
|
||||||
val {cursorIdx, ...} = TestUtils.update (app, CHAR_EVENT #"k")
|
|
||||||
|
|
||||||
(* assert *)
|
|
||||||
val isAtStart = cursorIdx = 0
|
|
||||||
in
|
|
||||||
Expect.isTrue isAtStart
|
|
||||||
end)
|
|
||||||
, test "leaves cursor at same idx when already at start of buffer" (fn _ =>
|
, test "leaves cursor at same idx when already at start of buffer" (fn _ =>
|
||||||
let
|
let
|
||||||
(* arrange *)
|
(* arrange *)
|
||||||
|
|||||||
Reference in New Issue
Block a user