~akkartik/luaML.love

c7c54a00b69eeffe1b21cc0db47a764089bdf8bc — Kartik K. Agaram a month ago 57deb76
consistently schedule_save after all mutations
4 files changed, 15 insertions(+), 15 deletions(-)

M edit.lua
M source_edit.lua
M source_text.lua
M text.lua
M edit.lua => edit.lua +3 -3
@@ 184,8 184,8 @@ function edit.draw(State)
                       if State.cursor1.line >= line_index then
                         State.cursor1.line = State.cursor1.line+1
                       end
                       schedule_save(State)
                       record_undo_event(State, {before=Drawing.before, after=snapshot(State, line_index-1, line_index+1)})
                       schedule_save(State)
                     end,
        })
      end


@@ 295,11 295,11 @@ function edit.mouse_release(State, x,y, mouse_button)
  State.mouse_down = nil
  if State.lines.current_drawing then
    Drawing.mouse_release(State, x,y, mouse_button)
    schedule_save(State)
    if Drawing.before then
      record_undo_event(State, {before=Drawing.before, after=snapshot(State, State.lines.current_drawing_index)})
      Drawing.before = nil
    end
    schedule_save(State)
  else
--?     print_and_log('edit.mouse_release: no current drawing')
    if y < State.top then


@@ 490,8 490,8 @@ function edit.keychord_press(State, chord, key)
    if Text.cursor_out_of_screen(State) then
      Text.snap_cursor_to_bottom_of_screen(State, State.left, State.right)
    end
    schedule_save(State)
    record_undo_event(State, {before=before, after=snapshot(State, before_line, State.cursor1.line)})
    schedule_save(State)
  -- dispatch to drawing or text
  elseif App.mouse_down(1) or chord:sub(1,2) == 'C-' then
    local drawing_index, drawing = Drawing.current_drawing(State)

M source_edit.lua => source_edit.lua +3 -3
@@ 189,8 189,8 @@ function edit.draw(State, hide_cursor, show_line_numbers)
                       if State.cursor1.line >= line_index then
                         State.cursor1.line = State.cursor1.line+1
                       end
                       schedule_save(State)
                       record_undo_event(State, {before=Drawing.before, after=snapshot(State, line_index-1, line_index+1)})
                       schedule_save(State)
                     end,
        })
      end


@@ 299,11 299,11 @@ function edit.mouse_release(State, x,y, mouse_button)
  State.mouse_down = nil
  if State.lines.current_drawing then
    Drawing.mouse_release(State, x,y, mouse_button)
    schedule_save(State)
    if Drawing.before then
      record_undo_event(State, {before=Drawing.before, after=snapshot(State, State.lines.current_drawing_index)})
      Drawing.before = nil
    end
    schedule_save(State)
  else
--?     print_and_log('edit.mouse_release: no current drawing')
    if y < State.top then


@@ 491,8 491,8 @@ function edit.keychord_press(State, chord, key)
    if Text.cursor_out_of_screen(State) then
      Text.snap_cursor_to_bottom_of_screen(State, State.left, State.right)
    end
    schedule_save(State)
    record_undo_event(State, {before=before, after=snapshot(State, before_line, State.cursor1.line)})
    schedule_save(State)
  -- dispatch to drawing or text
  elseif App.mouse_down(1) or chord:sub(1,2) == 'C-' then
    local drawing_index, drawing = Drawing.current_drawing(State)

M source_text.lua => source_text.lua +4 -4
@@ 234,8 234,8 @@ function Text.keychord_press(State, chord)
    if State.cursor_y > App.screen.height - State.line_height then
      Text.snap_cursor_to_bottom_of_screen(State, State.left, State.right)
    end
    schedule_save(State)
    record_undo_event(State, {before=before, after=snapshot(State, before_line, State.cursor1.line)})
    schedule_save(State)
  elseif chord == 'tab' then
    local before = snapshot(State, State.cursor1.line)
--?     print(State.screen_top1.line, State.screen_top1.pos, State.cursor1.line, State.cursor1.pos)


@@ 245,8 245,8 @@ function Text.keychord_press(State, chord)
      Text.snap_cursor_to_bottom_of_screen(State, State.left, State.right)
--?       print('=>', State.screen_top1.line, State.screen_top1.pos, State.cursor1.line, State.cursor1.pos)
    end
    schedule_save(State)
    record_undo_event(State, {before=before, after=snapshot(State, State.cursor1.line)})
    schedule_save(State)
  elseif chord == 'backspace' then
    if State.selection1.line then
      Text.delete_selection(State, State.left, State.right)


@@ 293,8 293,8 @@ function Text.keychord_press(State, chord)
    end
    Text.clear_screen_line_cache(State, State.cursor1.line)
    assert(Text.le1(State.screen_top1, State.cursor1), ('screen_top (line=%d,pos=%d) is below cursor (line=%d,pos=%d)'):format(State.screen_top1.line, State.screen_top1.pos, State.cursor1.line, State.cursor1.pos))
    schedule_save(State)
    record_undo_event(State, {before=before, after=snapshot(State, State.cursor1.line)})
    schedule_save(State)
  elseif chord == 'delete' then
    if State.selection1.line then
      Text.delete_selection(State, State.left, State.right)


@@ 327,8 327,8 @@ function Text.keychord_press(State, chord)
      table.remove(State.line_cache, State.cursor1.line+1)
    end
    Text.clear_screen_line_cache(State, State.cursor1.line)
    schedule_save(State)
    record_undo_event(State, {before=before, after=snapshot(State, State.cursor1.line)})
    schedule_save(State)
  --== shortcuts that move the cursor
  elseif chord == 'left' then
    Text.left(State)

M text.lua => text.lua +5 -5
@@ 151,7 151,7 @@ end
-- Don't handle any keys here that would trigger text_input above.
function Text.keychord_press(State, chord)
--?   print('chord', chord, State.selection1.line, State.selection1.pos)
  --== shortcuts that mutate text
  --== shortcuts that mutate text (must schedule_save)
  if chord == 'return' then
    local before_line = State.cursor1.line
    local before = snapshot(State, before_line)


@@ 160,8 160,8 @@ function Text.keychord_press(State, chord)
    if State.cursor_y > App.screen.height - State.line_height then
      Text.snap_cursor_to_bottom_of_screen(State, State.left, State.right)
    end
    schedule_save(State)
    record_undo_event(State, {before=before, after=snapshot(State, before_line, State.cursor1.line)})
    schedule_save(State)
  elseif chord == 'tab' then
    local before = snapshot(State, State.cursor1.line)
--?     print(State.screen_top1.line, State.screen_top1.pos, State.cursor1.line, State.cursor1.pos)


@@ 171,8 171,8 @@ function Text.keychord_press(State, chord)
      Text.snap_cursor_to_bottom_of_screen(State, State.left, State.right)
--?       print('=>', State.screen_top1.line, State.screen_top1.pos, State.cursor1.line, State.cursor1.pos)
    end
    schedule_save(State)
    record_undo_event(State, {before=before, after=snapshot(State, State.cursor1.line)})
    schedule_save(State)
  elseif chord == 'backspace' then
    if State.selection1.line then
      Text.delete_selection(State, State.left, State.right)


@@ 219,8 219,8 @@ function Text.keychord_press(State, chord)
    end
    Text.clear_screen_line_cache(State, State.cursor1.line)
    assert(Text.le1(State.screen_top1, State.cursor1), ('screen_top (line=%d,pos=%d) is below cursor (line=%d,pos=%d)'):format(State.screen_top1.line, State.screen_top1.pos, State.cursor1.line, State.cursor1.pos))
    schedule_save(State)
    record_undo_event(State, {before=before, after=snapshot(State, State.cursor1.line)})
    schedule_save(State)
  elseif chord == 'delete' then
    if State.selection1.line then
      Text.delete_selection(State, State.left, State.right)


@@ 253,8 253,8 @@ function Text.keychord_press(State, chord)
      table.remove(State.line_cache, State.cursor1.line+1)
    end
    Text.clear_screen_line_cache(State, State.cursor1.line)
    schedule_save(State)
    record_undo_event(State, {before=before, after=snapshot(State, State.cursor1.line)})
    schedule_save(State)
  --== shortcuts that move the cursor
  elseif chord == 'left' then
    Text.left(State)