Merge lines.love

This commit is contained in:
Kartik K. Agaram 2023-03-17 11:02:10 -07:00
commit 4dbc097f83
4 changed files with 43 additions and 2 deletions

View File

@ -74,6 +74,22 @@ function edit.initialize_state(top, left, right, font_height, line_height) -- c
return result
end -- App.initialize_state
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 not Text.le1(State.screen_top1, State.cursor1) then
State.screen_top1 = {line=1, pos=1}
State.cursor1 = {line=1, pos=1}
end
end
function edit.invalid1(State, loc1)
return loc1.line > #State.lines
or loc1.pos > #State.lines[loc1.line].data
end
function edit.draw(State)
App.color(Text_color)
assert(#State.lines == #State.line_cache)

View File

@ -32,6 +32,7 @@ function run.initialize(arg)
load_from_disk(Editor_state)
Text.redraw_all(Editor_state)
end
edit.check_locs(Editor_state)
love.window.setTitle('text.love - '..Editor_state.filename)
if #arg > 1 then
@ -108,6 +109,7 @@ function run.file_drop(file)
Editor_state.lines = load_from_file(file)
file:close()
Text.redraw_all(Editor_state)
edit.check_locs(Editor_state)
love.window.setTitle('text.love - '..Editor_state.filename)
end

View File

@ -87,6 +87,7 @@ function source.initialize_edit_side()
Editor_state.screen_top1 = {line=1, pos=1}
Editor_state.cursor1 = {line=1, pos=1}
end
edit.check_locs(Editor_state)
-- We currently start out with side B collapsed.
-- Other options:

View File

@ -115,10 +115,32 @@ function edit.initialize_state(top, left, right, font_height, line_height) -- c
return result
end -- App.initialize_state
function edit.fixup_cursor(State)
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 not edit.cursor_on_text(State)
or not Text.le1(State.screen_top1, State.cursor1) then
State.screen_top1 = {line=1, pos=1}
edit.put_cursor_on_first_text_line(State)
end
end
function edit.invalid1(State, loc1)
return loc1.line > #State.lines
or loc1.pos > #State.lines[loc1.line].data
end
function edit.cursor_on_text(State)
return State.cursor1.line <= #State.lines
and State.lines[State.cursor1.line].mode == 'text'
end
function edit.put_cursor_on_first_text_line(State)
for i,line in ipairs(State.lines) do
if line.mode == 'text' then
State.cursor1.line = i
State.cursor1 = {line=i, pos=1}
break
end
end