From 0ae94b0de59618bb86a55edcaa8e961abb192f2d Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sun, 26 Mar 2023 08:17:31 -0700 Subject: [PATCH] bugfix --- drawing_tests.lua | 31 +++++++++++++++++++++++++++++++ edit.lua | 10 ++++++---- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/drawing_tests.lua b/drawing_tests.lua index 91c4825..0c4de54 100644 --- a/drawing_tests.lua +++ b/drawing_tests.lua @@ -426,6 +426,37 @@ function test_name_point() check_eq(p2.name, 'A', 'save') end +function test_name_point_then_hit_backspace() + -- create a drawing with a line + App.screen.init{width=Test_margin_left+256, height=300} -- drawing coordinates 1:1 with pixels + Editor_state = edit.initialize_test_state() + Editor_state.filename = 'foo' + Editor_state.lines = load_array{'```lines', '```', ''} + Text.redraw_all(Editor_state) + Editor_state.current_drawing_mode = 'line' + edit.draw(Editor_state) + -- draw a line + edit.run_after_mouse_press(Editor_state, Editor_state.left+5, Editor_state.top+Drawing_padding_top+6, 1) + edit.run_after_mouse_release(Editor_state, Editor_state.left+35, Editor_state.top+Drawing_padding_top+36, 1) + local drawing = Editor_state.lines[1] + check_eq(#drawing.shapes, 1, 'baseline/#shapes') + check_eq(#drawing.points, 2, 'baseline/#points') + check_eq(drawing.shapes[1].mode, 'line', 'baseline/shape:1') + local p1 = drawing.points[drawing.shapes[1].p1] + local p2 = drawing.points[drawing.shapes[1].p2] + check_eq(p1.x, 5, 'baseline/p1:x') + check_eq(p1.y, 6, 'baseline/p1:y') + check_eq(p2.x, 35, 'baseline/p2:x') + check_eq(p2.y, 36, 'baseline/p2:y') + check_nil(p2.name, 'baseline/p2:name') + -- enter 'name' mode without moving the mouse + edit.run_after_keychord(Editor_state, 'C-n') + check_eq(Editor_state.current_drawing_mode, 'name', 'mode:1') + -- hit backspace + edit.run_after_keychord(Editor_state, 'backspace') + -- no crash +end + function test_move_point() -- create a drawing with a line App.screen.init{width=Test_margin_left+256, height=300} -- drawing coordinates 1:1 with pixels diff --git a/edit.lua b/edit.lua index c05a2e5..38c2883 100644 --- a/edit.lua +++ b/edit.lua @@ -491,10 +491,12 @@ function edit.keychord_press(State, chord, key) record_undo_event(State, {before=before, after=snapshot(State, State.lines.current_drawing_index)}) elseif chord == 'backspace' then local len = utf8.len(p.name) - local byte_offset = Text.offset(p.name, len-1) - if len == 1 then byte_offset = 0 end - p.name = string.sub(p.name, 1, byte_offset) - record_undo_event(State, {before=before, after=snapshot(State, State.lines.current_drawing_index)}) + if len > 0 then + local byte_offset = Text.offset(p.name, len-1) + if len == 1 then byte_offset = 0 end + p.name = string.sub(p.name, 1, byte_offset) + record_undo_event(State, {before=before, after=snapshot(State, State.lines.current_drawing_index)}) + end end end schedule_save(State)