From cf0ba7c15431221e90f6aee87ea5b69ef0b18ea4 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sat, 3 Jun 2023 10:43:20 -0700 Subject: [PATCH] handle wrapping lines --- edit.lua | 4 ++-- text_tests.lua | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/edit.lua b/edit.lua index ddd17c1..5918165 100644 --- a/edit.lua +++ b/edit.lua @@ -232,8 +232,8 @@ function edit.mouse_press(State, x,y, mouse_button) State.old_selection1 = State.selection1 State.mousepress_shift = App.shift_down() State.selection1 = { - line=1, - pos=1, + line=State.screen_top1.line, + pos=State.screen_top1.pos, } return end diff --git a/text_tests.lua b/text_tests.lua index d5368a8..a01ad3e 100644 --- a/text_tests.lua +++ b/text_tests.lua @@ -847,6 +847,23 @@ function test_select_text_using_mouse_starting_above_text() check_eq(Editor_state.selection1.pos, 1, 'selection:pos') end +function test_select_text_using_mouse_starting_above_text_wrapping_line() + -- first screen line starts in the middle of a line + App.screen.init{width=50, height=60} + Editor_state = edit.initialize_test_state() + Editor_state.lines = load_array{'abc', 'defgh', 'xyz'} + Text.redraw_all(Editor_state) + Editor_state.cursor1 = {line=2, pos=5} + Editor_state.screen_top1 = {line=2, pos=3} + Editor_state.screen_bottom1 = {} + -- press mouse above first line of text + edit.run_after_mouse_press(Editor_state, Editor_state.left+8,5, 1) + -- selection is at screen top + check(Editor_state.selection1.line ~= nil, 'selection:line-not-nil') + check_eq(Editor_state.selection1.line, 2, 'selection:line') + check_eq(Editor_state.selection1.pos, 3, 'selection:pos') +end + function test_select_text_using_mouse_and_shift() App.screen.init{width=50, height=60} Editor_state = edit.initialize_test_state()