From 0dea44f93ce925baedf0f2d39d799f36671986b6 Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Sun, 8 Sep 2019 13:48:46 -0700 Subject: paste/cmdline: discard all chunks after first line Problem: If multiple paste "chunks" are streamed, chunks after the first line are pasted into the buffer. Solution: Check for cmdline-mode for all chunks in a paste-stream. --- src/nvim/lua/vim.lua | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'src/nvim/lua') diff --git a/src/nvim/lua/vim.lua b/src/nvim/lua/vim.lua index e76dd9d062..7d5dc0bffc 100644 --- a/src/nvim/lua/vim.lua +++ b/src/nvim/lua/vim.lua @@ -191,10 +191,8 @@ paste = (function() local line1, _ = string.gsub(lines[1], '[\r\n\012\027]', ' ') -- Scrub. vim.api.nvim_input(line1) vim.api.nvim_set_option('paste', false) - elseif mode == 'i' or mode == 'R' then - vim.api.nvim_put(lines, 'c', false, true) - else - vim.api.nvim_put(lines, 'c', true, true) + elseif mode ~= 'c' then + vim.api.nvim_put(lines, 'c', (mode ~= 'i' and mode ~= 'R'), true) end if phase ~= -1 and (now - tdots >= 100) then local dots = ('.'):rep(tick % 4) -- cgit From acd2729573171995e8a66be7e09ba4e2fc5d9c69 Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Sun, 8 Sep 2019 15:37:24 -0700 Subject: paste: do not clobber msg area for small pastes --- src/nvim/lua/vim.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/nvim/lua') diff --git a/src/nvim/lua/vim.lua b/src/nvim/lua/vim.lua index 7d5dc0bffc..cc10118906 100644 --- a/src/nvim/lua/vim.lua +++ b/src/nvim/lua/vim.lua @@ -203,8 +203,7 @@ paste = (function() vim.api.nvim_command(('echo "%s"'):format(dots)) end if phase == -1 or phase == 3 then - vim.api.nvim_command('redraw') - vim.api.nvim_command('echo ""') + vim.api.nvim_command('redraw'..(tick > 1 and '|echo ""' or '')) end return true -- Paste will not continue if not returning `true`. end -- cgit 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. --- src/nvim/lua/vim.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/nvim/lua') 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) -- cgit