diff options
-rw-r--r-- | main.lua | 15 | ||||
-rw-r--r-- | text.lua | 6 | ||||
-rw-r--r-- | text_tests.lua | 22 |
3 files changed, 40 insertions, 3 deletions
diff --git a/main.lua b/main.lua index df68da5..d4fd32a 100644 --- a/main.lua +++ b/main.lua @@ -407,6 +407,9 @@ function App.textinput(t) Text.textinput(t) end schedule_save() + if not App.shift_down() then + Selection1 = {} + end end function App.keychord_pressed(chord) @@ -438,15 +441,19 @@ function App.keychord_pressed(chord) Search_term = '' Search_backup = {cursor={line=Cursor1.line, pos=Cursor1.pos}, screen_top={line=Screen_top1.line, pos=Screen_top1.pos}} assert(Search_text == nil) + Selection1 = {} elseif chord == 'C-=' then initialize_font_settings(Font_height+2) Text.redraw_all() + Selection1 = {} elseif chord == 'C--' then initialize_font_settings(Font_height-2) Text.redraw_all() + Selection1 = {} elseif chord == 'C-0' then initialize_font_settings(20) Text.redraw_all() + Selection1 = {} elseif chord == 'C-z' then for _,line in ipairs(Lines) do line.y = nil end -- just in case we scroll local event = undo_event() @@ -459,6 +466,7 @@ function App.keychord_pressed(chord) Text.redraw_all() -- if we're scrolling, reclaim all fragments to avoid memory leaks schedule_save() end + Selection1 = {} elseif chord == 'C-y' then for _,line in ipairs(Lines) do line.y = nil end -- just in case we scroll local event = redo_event() @@ -471,6 +479,7 @@ function App.keychord_pressed(chord) Text.redraw_all() -- if we're scrolling, reclaim all fragments to avoid memory leaks schedule_save() end + Selection1 = {} -- clipboard elseif chord == 'C-c' then for _,line in ipairs(Lines) do line.y = nil end -- just in case we scroll @@ -478,6 +487,7 @@ function App.keychord_pressed(chord) if s then App.setClipboardText(s) end + Selection1 = {} elseif chord == 'C-x' then for _,line in ipairs(Lines) do line.y = nil end -- just in case we scroll local s = Text.cut_selection() @@ -485,6 +495,7 @@ function App.keychord_pressed(chord) App.setClipboardText(s) end schedule_save() + Selection1 = {} elseif chord == 'C-v' then for _,line in ipairs(Lines) do line.y = nil end -- just in case we scroll -- We don't have a good sense of when to scroll, so we'll be conservative @@ -506,6 +517,7 @@ function App.keychord_pressed(chord) end schedule_save() record_undo_event({before=before, after=snapshot(before_line, Cursor1.line)}) + Selection1 = {} -- dispatch to drawing or text elseif App.mouse_down(1) or chord:sub(1,2) == 'C-' then -- DON'T reset line.y here @@ -553,7 +565,4 @@ function App.keychord_pressed(chord) end function App.keyreleased(key, scancode) - if not App.shift_down() then - Selection1 = {} - end end diff --git a/text.lua b/text.lua index f7f2e80..2888c1f 100644 --- a/text.lua +++ b/text.lua @@ -175,6 +175,7 @@ function Text.keychord_pressed(chord) end schedule_save() record_undo_event({before=before, after=snapshot(before_line, Cursor1.line)}) + Selection1 = {} elseif chord == 'tab' then local before = snapshot(Cursor1.line) --? print(Screen_top1.line, Screen_top1.pos, Cursor1.line, Cursor1.pos, Screen_bottom1.line, Screen_bottom1.pos) @@ -186,10 +187,12 @@ function Text.keychord_pressed(chord) end schedule_save() record_undo_event({before=before, after=snapshot(Cursor1.line)}) + Selection1 = {} elseif chord == 'backspace' then if Selection1.line then Text.delete_selection() schedule_save() + Selection1 = {} return end local before @@ -228,10 +231,12 @@ function Text.keychord_pressed(chord) assert(Text.le1(Screen_top1, Cursor1)) schedule_save() record_undo_event({before=before, after=snapshot(Cursor1.line)}) + Selection1 = {} elseif chord == 'delete' then if Selection1.line then Text.delete_selection() schedule_save() + Selection1 = {} return end local before @@ -264,6 +269,7 @@ function Text.keychord_pressed(chord) end schedule_save() record_undo_event({before=before, after=snapshot(Cursor1.line)}) + Selection1 = {} --== shortcuts that move the cursor elseif chord == 'left' then if Selection1.line then diff --git a/text_tests.lua b/text_tests.lua index 95fbd78..7c0ce7d 100644 --- a/text_tests.lua +++ b/text_tests.lua @@ -186,6 +186,28 @@ function test_click_on_wrapping_line_containing_non_ascii() check_eq(Cursor1.pos, 15, 'F - test_click_on_wrapping_line_containing_non_ascii/cursor') -- one more than the number of UTF-8 code-points end +function test_select_text() + io.write('\ntest_select_text') + -- display a line of text + App.screen.init{width=80, height=80} + Lines = load_array{'abc def'} + Line_width = 75 + Cursor1 = {line=1, pos=1} + Screen_top1 = {line=1, pos=1} + Screen_bottom1 = {} + App.draw() + -- select a letter + App.fake_key_press('lshift') + App.run_after_keychord('S-right') + App.fake_key_release('lshift') + App.keyreleased('lshift') + -- selection persists even after shift is released + check_eq(Selection1.line, 1, 'F - test_select_text/selection:line') + check_eq(Selection1.pos, 1, 'F - test_select_text/selection:pos') + check_eq(Cursor1.line, 1, 'F - test_select_text/cursor:line') + check_eq(Cursor1.pos, 2, 'F - test_select_text/cursor:pos') +end + function test_edit_after_click_resets_selection() io.write('\ntest_edit_after_click_resets_selection') -- display a line of text |