about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--main.lua3
-rw-r--r--text.lua3
-rw-r--r--text_tests.lua38
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}
'n210' href='#n210'>210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243