From a9e2bae0eb6942829dbedfc9c422060da020d8e4 Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Sun, 8 Sep 2019 16:39:06 -0700 Subject: paste: insert before cursor always Inserting "after" the cursor in Normal-mode, for big paste-streams, is not reliable: sometimes the text "after" the cursor ends up in the middle of the pasted text. Maybe the cursor position is not updated? To avoid weird behavior, always paste "before". Maybe nvim_put() or vim.paste() can be fixed more properly later. --- runtime/doc/provider.txt | 2 +- src/nvim/lua/vim.lua | 2 +- test/functional/terminal/tui_spec.lua | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/runtime/doc/provider.txt b/runtime/doc/provider.txt index 0083bb63a4..6fa3377a14 100644 --- a/runtime/doc/provider.txt +++ b/runtime/doc/provider.txt @@ -239,7 +239,7 @@ GUIs can paste by calling |nvim_paste()|. PASTE BEHAVIOR ~ -Paste inserts text after the cursor. Lines break at , , and . +Paste inserts text before the cursor. Lines break at , and . When pasting a huge amount of text, screen-updates are throttled and the message area shows a "..." pulse. diff --git a/src/nvim/lua/vim.lua b/src/nvim/lua/vim.lua index cc10118906..010c3b98ee 100644 --- a/src/nvim/lua/vim.lua +++ b/src/nvim/lua/vim.lua @@ -192,7 +192,7 @@ paste = (function() vim.api.nvim_input(line1) vim.api.nvim_set_option('paste', false) elseif mode ~= 'c' then - vim.api.nvim_put(lines, 'c', (mode ~= 'i' and mode ~= 'R'), true) + vim.api.nvim_put(lines, 'c', false, true) end if phase ~= -1 and (now - tdots >= 100) then local dots = ('.'):rep(tick % 4) diff --git a/test/functional/terminal/tui_spec.lua b/test/functional/terminal/tui_spec.lua index 01e73a2378..2bd114b505 100644 --- a/test/functional/terminal/tui_spec.lua +++ b/test/functional/terminal/tui_spec.lua @@ -485,9 +485,9 @@ describe('TUI', function() feed_data('\n') -- screen:expect{grid=[[ foo | - typed input...line A | + typed input..line A | line B | - {1: } | + {1:.} | {5:[No Name] [+] }| | {3:-- TERMINAL --} | -- cgit