about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2023-09-17 09:24:52 -0700
committerKartik K. Agaram <vc@akkartik.com>2023-09-17 09:24:52 -0700
commit5c5a8a88abab1a5e3c68888d156bf539f2a743fa (patch)
treeee90ad127879a529e8cbd22673ae987b661ccd7d
parente1168f4eff674c2571746aefcc438ed77d5e2941 (diff)
parentc43d884b6ffb94803bee9f9e788e4b3a2f74f23b (diff)
downloadtext.love-5c5a8a88abab1a5e3c68888d156bf539f2a743fa.tar.gz
Merge lines.love
-rw-r--r--source_edit.lua29
1 files changed, 20 insertions, 9 deletions
diff --git a/source_edit.lua b/source_edit.lua
index 506aa41..310853a 100644
--- a/source_edit.lua
+++ b/source_edit.lua
@@ -111,10 +111,11 @@ function edit.check_locs(State)
   -- if State is inconsistent (i.e. file changed by some other program),
   --   throw away all cursor state entirely
   if edit.invalid1(State, State.screen_top1)
-      or edit.invalid1(State, State.cursor1)
+      or edit.invalid_cursor1(State)
       or not edit.cursor_on_text(State)
       or not Text.le1(State.screen_top1, State.cursor1) then
     State.screen_top1 = {line=1, pos=1}
+    State.cursor1 = {line=1, pos=1}
     edit.put_cursor_on_next_text_line(State)
   end
 end
@@ -126,6 +127,16 @@ function edit.invalid1(State, loc1)
   return loc1.pos > #State.lines[loc1.line].data
 end
 
+-- cursor loc in particular differs from other locs in one way:
+-- pos might occur just after end of line
+function edit.invalid_cursor1(State)
+  local cursor1 = State.cursor1
+  if cursor1.line > #State.lines then return true end
+  local l = State.lines[cursor1.line]
+  if l.mode ~= 'text' then return false end  -- pos is irrelevant to validity for a drawing line
+  return cursor1.pos > #State.lines[cursor1.line].data + 1
+end
+
 function edit.cursor_on_text(State)
   return State.cursor1.line <= #State.lines
       and State.lines[State.cursor1.line].mode == 'text'
@@ -133,14 +144,14 @@ end
 
 function edit.put_cursor_on_next_text_line(State)
   while true do
-  if State.cursor1.line >= #State.lines then
-    break
-  end
-  if State.lines[State.cursor1.line].mode == 'text' then
-    break
-  end
-  State.cursor1.line = State.cursor1.line+1
-  State.cursor1.pos = 1
+    if State.cursor1.line >= #State.lines then
+      break
+    end
+    if State.lines[State.cursor1.line].mode == 'text' then
+      break
+    end
+    State.cursor1.line = State.cursor1.line+1
+    State.cursor1.pos = 1
   end
 end