From 839d2df3eaa1bf29f00ebec8eeba4b8c8a158852 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Thu, 19 May 2022 21:52:38 -0700 Subject: bugfix As usual, binary search is hard to get right. This time I was never actually selecting between left and right when they were just one character apart. --- manual_tests | 1 + text.lua | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/manual_tests b/manual_tests index b59fced..8cfc115 100644 --- a/manual_tests +++ b/manual_tests @@ -2,6 +2,7 @@ file load: cursor_line = 1 first line is a drawing -> cursor_line = 2 click on text -> cursor moves +click on first character of text -> cursor on first character of text click on drawing -> cursor doesn't move create drawing -> cursor bumps down below drawing backspace diff --git a/text.lua b/text.lua index 7a442e8..97dcf7c 100644 --- a/text.lua +++ b/text.lua @@ -298,20 +298,25 @@ function Text.nearest_cursor_pos(line, x, hint) left = hint end end - while left < right-1 do +--? print('--') + while true do local curr = math.floor((left+right)/2) local currxmin = Text.cursor_x(line, curr) local currxmax = Text.cursor_x(line, curr+1) +--? print(x, left, right, curr, currxmin, currxmax) if currxmin <= x and x < currxmax then return curr end + if left >= right-1 then + return right + end if currxmin > x then right = curr else left = curr end end - return right + assert(false) end function Text.cursor_x(line_data, cursor_pos) -- cgit 1.4.1-2-gfad0