From 14c08f9bd9a45d2f05727ea47b128afdbdff1d24 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Thu, 8 Jun 2023 01:02:54 -0700 Subject: several bugfixes in saving/loading cursor position --- edit.lua | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'edit.lua') diff --git a/edit.lua b/edit.lua index 442b986..ef1cda4 100644 --- a/edit.lua +++ b/edit.lua @@ -109,7 +109,7 @@ 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} @@ -124,6 +124,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' -- cgit 1.4.1-2-gfad0