about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--text.lua6
-rw-r--r--text_tests.lua16
2 files changed, 21 insertions, 1 deletions
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}