From 8e68c699f50121db306ff552d16ea3e10bd77b19 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Tue, 21 Jun 2022 09:53:38 -0700 Subject: bugfix: delete selection before pasting --- main.lua | 3 +++ text.lua | 3 --- text_tests.lua | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/main.lua b/main.lua index 712d44c..fcc65ee 100644 --- a/main.lua +++ b/main.lua @@ -410,6 +410,9 @@ function App.textinput(t) end function App.keychord_pressed(chord) + if Selection1.line and not App.shift_down() and chord ~= 'C-c' and chord ~= 'C-x' and chord ~= 'backspace' and backspace ~= 'delete' then + Text.delete_selection() + end if Search_term then if chord == 'escape' then Search_term = nil diff --git a/text.lua b/text.lua index 84f3000..e80cd03 100644 --- a/text.lua +++ b/text.lua @@ -142,9 +142,6 @@ function Text.textinput(t) assert(not App.ctrl_down()) if App.alt_down() then return end assert(not App.cmd_down()) - if Selection1.line then - Text.delete_selection() - end local before = snapshot(Cursor1.line) --? print(Screen_top1.line, Screen_top1.pos, Cursor1.line, Cursor1.pos, Screen_bottom1.line, Screen_bottom1.pos) Text.insert_at_cursor(t) diff --git a/text_tests.lua b/text_tests.lua index 4221aa6..0119223 100644 --- a/text_tests.lua +++ b/text_tests.lua @@ -261,6 +261,44 @@ function test_copy_does_not_reset_selection() check(Selection1.line, 'F - test_copy_does_not_reset_selection') end +function test_cut() + io.write('\ntest_cut') + -- display a line of text with some part selected + App.screen.init{width=80, height=80} + Lines = load_array{'abc'} + Line_width = 75 + Cursor1 = {line=1, pos=1} + Selection1 = {line=1, pos=2} + Screen_top1 = {line=1, pos=1} + Screen_bottom1 = {} + App.draw() + -- press a key + App.run_after_keychord('C-x') + check_eq(App.clipboard, 'a', 'F - test_cut/clipboard') + -- selected text is deleted + check_eq(Lines[1].data, 'bc', 'F - test_cut/data') +end + +function test_paste_replaces_selection() + io.write('\ntest_paste_replaces_selection') + -- display a line of text with a selection + App.screen.init{width=80, height=80} + Lines = load_array{'abc', 'def'} + Line_width = 75 + Cursor1 = {line=2, pos=1} + Selection1 = {line=1, pos=1} + Screen_top1 = {line=1, pos=1} + Screen_bottom1 = {} + App.draw() + -- set clipboard + App.clipboard = 'xyz' + -- paste selection + App.run_after_keychord('C-v') + -- selection is reset since shift key is not pressed + -- selection includes the newline, so it's also deleted + check_eq(Lines[1].data, 'xyzdef', 'F - test_paste_replaces_selection') +end + function test_edit_wrapping_text() io.write('\ntest_edit_wrapping_text') App.screen.init{width=50, height=60} -- cgit 1.4.1-2-gfad0