diff options
-rw-r--r-- | runtime/doc/provider.txt | 2 | ||||
-rw-r--r-- | src/nvim/lua/vim.lua | 7 | ||||
-rw-r--r-- | test/functional/terminal/tui_spec.lua | 19 |
3 files changed, 16 insertions, 12 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 <NL>, <CR>, and <CR><NL>. +Paste inserts text before the cursor. Lines break at <NL>, <CR> and <CR><NL>. 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 e76dd9d062..010c3b98ee 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 + elseif mode ~= 'c' then vim.api.nvim_put(lines, 'c', false, true) - else - vim.api.nvim_put(lines, 'c', true, true) end if phase ~= -1 and (now - tdots >= 100) then local dots = ('.'):rep(tick % 4) @@ -205,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 diff --git a/test/functional/terminal/tui_spec.lua b/test/functional/terminal/tui_spec.lua index e0d29d27ff..2bd114b505 100644 --- a/test/functional/terminal/tui_spec.lua +++ b/test/functional/terminal/tui_spec.lua @@ -319,7 +319,7 @@ describe('TUI', function() {1:x} | {4:~ }| {5:[No Name] [+] 3,1 All}| - | + :set ruler | {3:-- TERMINAL --} | ]] local expected_attr = { @@ -353,7 +353,11 @@ describe('TUI', function() expect_child_buf_lines({''}) -- CRLF input feed_data('\027[200~'..table.concat(expected_lf,'\r\n')..'\027[201~') - screen:expect{grid=expected_grid1, attr_ids=expected_attr} + screen:expect{ + grid=expected_grid1:gsub( + ':set ruler *', + '3 fewer lines; before #1 0 seconds ago '), + attr_ids=expected_attr} expect_child_buf_lines(expected_crlf) end) @@ -363,7 +367,10 @@ describe('TUI', function() feed_data('\027[D') -- <Left> to place cursor between quotes. wait_for_mode('c') -- "bracketed paste" - feed_data('\027[200~line 1\nline 2\n\027[201~') + feed_data('\027[200~line 1\nline 2\n') + wait_for_mode('c') + feed_data('line 3\nline 4\n\027[201~') + wait_for_mode('c') screen:expect{grid=[[ foo | | @@ -478,9 +485,9 @@ describe('TUI', function() feed_data('\n') -- <CR> screen:expect{grid=[[ foo | - typed input...line A | + typed input..line A | line B | - {1: } | + {1:.} | {5:[No Name] [+] }| | {3:-- TERMINAL --} | @@ -505,7 +512,7 @@ describe('TUI', function() | {4:~ }| {5: }| - {8:paste: Error executing lua: vim.lua:197: Vim:E21: }| + {8:paste: Error executing lua: vim.lua:195: Vim:E21: }| {8:Cannot make changes, 'modifiable' is off} | {10:Press ENTER or type command to continue}{1: } | {3:-- TERMINAL --} | |