about summary refs log tree commit diff stats
path: root/text.lua
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2022-06-02 18:35:18 -0700
committerKartik K. Agaram <vc@akkartik.com>2022-06-02 18:35:18 -0700
commit283c4e58046410ca44bd5d5e7480d2d14e721976 (patch)
tree00d70345b5cf481bc71999d1f055f9130a56adc0 /text.lua
parent4f76ea37d7a24e6562fb8640935750c50de62e69 (diff)
downloadtext.love-283c4e58046410ca44bd5d5e7480d2d14e721976.tar.gz
bugfix: pasting newlines
Diffstat (limited to 'text.lua')
-rw-r--r--text.lua33
1 files changed, 21 insertions, 12 deletions
diff --git a/text.lua b/text.lua
index 493cbea..a502994 100644
--- a/text.lua
+++ b/text.lua
@@ -1250,18 +1250,8 @@ function Text.keychord_pressed(chord)
   if chord == 'return' then
     local before_line = Cursor1.line
     local before = snapshot(before_line)
-    local byte_offset = utf8.offset(Lines[Cursor1.line].data, Cursor1.pos)
-    table.insert(Lines, Cursor1.line+1, {mode='text', data=string.sub(Lines[Cursor1.line].data, byte_offset)})
-    local scroll_down = (Cursor_y + math.floor(15*Zoom)) > App.screen.height
-    Lines[Cursor1.line].data = string.sub(Lines[Cursor1.line].data, 1, byte_offset-1)
-    Lines[Cursor1.line].fragments = nil
-    Cursor1.line = Cursor1.line+1
-    Cursor1.pos = 1
+    Text.insert_return()
     save_to_disk(Lines, Filename)
-    if scroll_down then
-      Screen_top1.line = Cursor1.line
-      Text.scroll_up_while_cursor_on_screen()
-    end
     record_undo_event({before=before, after=snapshot(before_line, Cursor1.line)})
   elseif chord == 'tab' then
     local before = snapshot(Cursor1.line)
@@ -1384,7 +1374,12 @@ function Text.keychord_pressed(chord)
     local before = snapshot(before_line)
     local s = love.system.getClipboardText()
     for _,code in utf8.codes(s) do
-      Text.insert_at_cursor(utf8.char(code))
+      local c = utf8.char(code)
+      if c == '\n' then
+        Text.insert_return()
+      else
+        Text.insert_at_cursor(utf8.char(code))
+      end
     end
     record_undo_event({before=before, after=snapshot(before_line, Cursor1.line)})
   --== shortcuts that move the cursor
@@ -1492,6 +1487,20 @@ function Text.keychord_pressed(chord)
   end
 end
 
+function Text.insert_return()
+  local byte_offset = utf8.offset(Lines[Cursor1.line].data, Cursor1.pos)
+  table.insert(Lines, Cursor1.line+1, {mode='text', data=string.sub(Lines[Cursor1.line].data, byte_offset)})
+  local scroll_down = (Cursor_y + math.floor(15*Zoom)) > App.screen.height
+  Lines[Cursor1.line].data = string.sub(Lines[Cursor1.line].data, 1, byte_offset-1)
+  Lines[Cursor1.line].fragments = nil
+  Cursor1.line = Cursor1.line+1
+  Cursor1.pos = 1
+  if scroll_down then
+    Screen_top1.line = Cursor1.line
+    Text.scroll_up_while_cursor_on_screen()
+  end
+end
+
 function Text.pageup()
   -- duplicate some logic from love.draw
   local top2 = Text.to2(Screen_top1)