about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--main.lua48
-rw-r--r--text.lua49
2 files changed, 49 insertions, 48 deletions
diff --git a/main.lua b/main.lua
index 589de0a..a00790d 100644
--- a/main.lua
+++ b/main.lua
@@ -294,6 +294,54 @@ function App.keychord_pressed(chord)
       Selection1 = deepcopy(src.selection)
       patch(Lines, event.before, event.after)
     end
+  -- clipboard
+  elseif chord == 'C-c' then
+    local s = Text.selection()
+    if s then
+      App.setClipboardText(s)
+    end
+  elseif chord == 'C-x' then
+    local s = Text.cut_selection()
+    if s then
+      App.setClipboardText(s)
+    end
+  elseif chord == 'C-v' then
+    -- We don't have a good sense of when to scroll, so we'll be conservative
+    -- and sometimes scroll when we didn't quite need to.
+    local before_line = Cursor1.line
+    local before = snapshot(before_line)
+    local clipboard_data = App.getClipboardText()
+    local num_newlines = 0  -- hack 1
+    for _,code in utf8.codes(clipboard_data) do
+      local c = utf8.char(code)
+      if c == '\n' then
+        Text.insert_return()
+        num_newlines = num_newlines+1
+      else
+        Text.insert_at_cursor(utf8.char(code))
+      end
+    end
+    -- hack 1: if we have too many newlines we definitely need to scroll
+    for i=before_line,Cursor1.line do
+      Lines[i].screen_line_starting_pos = nil
+      Text.populate_screen_line_starting_pos(i)
+    end
+    if Cursor1.line-Screen_top1.line+1 + num_newlines > App.screen.height/Line_height then
+      Screen_top1.line = Cursor1.line
+      Screen_top1.pos = 1
+      Text.scroll_up_while_cursor_on_screen()
+    end
+    -- hack 2: if we have too much text wrapping we definitely need to scroll
+    local clipboard_text = App.newText(love.graphics.getFont(), clipboard_data)
+    local clipboard_width = App.width(clipboard_text)
+--?     print(Cursor_y, Cursor_y*Line_width, Cursor_y*Line_width+Cursor_x, Cursor_y*Line_width+Cursor_x+clipboard_width, Line_width*App.screen.height/Line_height)
+    if Cursor_y*Line_width+Cursor_x + clipboard_width > Line_width*App.screen.height/Line_height then
+      Screen_top1.line = Cursor1.line
+      Screen_top1.pos = 1
+      Text.scroll_up_while_cursor_on_screen()
+    end
+    record_undo_event({before=before, after=snapshot(before_line, Cursor1.line)})
+  -- dispatch to drawing or text
   elseif love.mouse.isDown('1') or chord:sub(1,2) == 'C-' then
     Drawing.keychord_pressed(chord)
   elseif chord == 'escape' and love.mouse.isDown('1') then
diff --git a/text.lua b/text.lua
index dfad9ab..5c468b2 100644
--- a/text.lua
+++ b/text.lua
@@ -427,7 +427,7 @@ function test_insert_from_clipboard()
   App.screen.check(y, 'ghi', 'F - test_insert_from_clipboard/baseline/screen:3')
   -- after hitting the enter key the screen scrolls down
   App.clipboard = 'xy\nz'
-  App.run_after_keychord('M-v')
+  App.run_after_keychord('C-v')
   check_eq(Screen_top1.line, 1, 'F - test_insert_from_clipboard/screen_top')
   check_eq(Cursor1.line, 2, 'F - test_insert_from_clipboard/cursor:line')
   check_eq(Cursor1.pos, 2, 'F - test_insert_from_clipboard/cursor:pos')
@@ -1379,53 +1379,6 @@ function Text.keychord_pressed(chord)
     end
     save_to_disk(Lines, Filename)
     record_undo_event({before=before, after=snapshot(Cursor1.line)})
-  -- paste
-  elseif chord == 'M-c' then
-    local s = Text.selection()
-    if s then
-      App.setClipboardText(s)
-    end
-  elseif chord == 'M-x' then
-    local s = Text.cut_selection()
-    if s then
-      App.setClipboardText(s)
-    end
-  elseif chord == 'M-v' then
-    -- We don't have a good sense of when to scroll, so we'll be conservative
-    -- and sometimes scroll when we didn't quite need to.
-    local before_line = Cursor1.line
-    local before = snapshot(before_line)
-    local clipboard_data = App.getClipboardText()
-    local num_newlines = 0  -- hack 1
-    for _,code in utf8.codes(clipboard_data) do
-      local c = utf8.char(code)
-      if c == '\n' then
-        Text.insert_return()
-        num_newlines = num_newlines+1
-      else
-        Text.insert_at_cursor(utf8.char(code))
-      end
-    end
-    -- hack 1: if we have too many newlines we definitely need to scroll
-    for i=before_line,Cursor1.line do
-      Lines[i].screen_line_starting_pos = nil
-      Text.populate_screen_line_starting_pos(i)
-    end
-    if Cursor1.line-Screen_top1.line+1 + num_newlines > App.screen.height/Line_height then
-      Screen_top1.line = Cursor1.line
-      Screen_top1.pos = 1
-      Text.scroll_up_while_cursor_on_screen()
-    end
-    -- hack 2: if we have too much text wrapping we definitely need to scroll
-    local clipboard_text = App.newText(love.graphics.getFont(), clipboard_data)
-    local clipboard_width = App.width(clipboard_text)
---?     print(Cursor_y, Cursor_y*Line_width, Cursor_y*Line_width+Cursor_x, Cursor_y*Line_width+Cursor_x+clipboard_width, Line_width*App.screen.height/Line_height)
-    if Cursor_y*Line_width+Cursor_x + clipboard_width > Line_width*App.screen.height/Line_height then
-      Screen_top1.line = Cursor1.line
-      Screen_top1.pos = 1
-      Text.scroll_up_while_cursor_on_screen()
-    end
-    record_undo_event({before=before, after=snapshot(before_line, Cursor1.line)})
   --== shortcuts that move the cursor
   elseif chord == 'left' then
     if Selection1.line then