diff --git a/text.lua b/text.lua index 555d2c4..4e6c072 100644 --- a/text.lua +++ b/text.lua @@ -206,7 +206,11 @@ function Text.keychord_pressed(State, chord) end State.cursor1.line = State.cursor1.line-1 end - if Text.lt1(State.cursor1, State.screen_top1) then + if State.screen_top1.line > #State.lines then + Text.populate_screen_line_starting_pos(State, #State.lines) + local line_cache = State.line_cache[#State.line_cache] + State.screen_top1 = {line=#State.lines, pos=line_cache.screen_line_starting_pos[#line_cache.screen_line_starting_pos]} + elseif Text.lt1(State.cursor1, State.screen_top1) then local top2 = Text.to2(State, State.screen_top1) top2 = Text.previous_screen_line(State, top2, State.left, State.right) State.screen_top1 = Text.to1(State, top2) diff --git a/text_tests.lua b/text_tests.lua index 91c5364..9983e2d 100644 --- a/text_tests.lua +++ b/text_tests.lua @@ -42,6 +42,22 @@ function test_backspace_to_delete_drawing() check_eq(Editor_state.cursor1.line, 1, 'F - test_backspace_to_delete_drawing/cursor') end +function test_backspace_from_start_of_final_line() + io.write('\ntest_backspace_from_start_of_final_line') + -- display final line of text with cursor at start of it + App.screen.init{width=120, height=60} + Editor_state = edit.initialize_test_state() + Editor_state.lines = load_array{'abc', 'def'} + Editor_state.screen_top1 = {line=2, pos=1} + Editor_state.cursor1 = {line=2, pos=1} + Text.redraw_all(Editor_state) + -- backspace scrolls up + edit.run_after_keychord(Editor_state, 'backspace') + check_eq(#Editor_state.lines, 1, 'F - test_backspace_from_start_of_final_line/#lines') + check_eq(Editor_state.cursor1.line, 1, 'F - test_backspace_from_start_of_final_line/cursor') + check_eq(Editor_state.screen_top1.line, 1, 'F - test_backspace_from_start_of_final_line/screen_top') +end + function test_insert_first_character() io.write('\ntest_insert_first_character') App.screen.init{width=120, height=60}