diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2019-09-09 08:29:49 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-09 08:29:49 -0700 |
commit | 05c668f684e111880b4d15de9ec63c2ba3264ef3 (patch) | |
tree | 99bdf949a49e2b7bb1a1ca54923b27c13cd3faae | |
parent | 9e0ce1a158417e34a0b4b6690e1f6a1816c6e725 (diff) | |
download | rneovim-05c668f684e111880b4d15de9ec63c2ba3264ef3.tar.gz rneovim-05c668f684e111880b4d15de9ec63c2ba3264ef3.tar.bz2 rneovim-05c668f684e111880b4d15de9ec63c2ba3264ef3.zip |
paste: fix normal-mode paste by different approach #10976
Forcing insert-mode after the first paste-chunk seems to work, as an
alternative to a9e2bae0eb69 (insert-before-cursor).
NB: Dot-repeat needs to match the original action. Since a9e2bae0eb69
changed paste to insert-before-cursor, dot-repeat must also. But that
makes dot-repeat unpleasant/unusual.
-rw-r--r-- | runtime/doc/provider.txt | 2 | ||||
-rw-r--r-- | src/nvim/lua/vim.lua | 10 | ||||
-rw-r--r-- | test/functional/terminal/tui_spec.lua | 8 |
3 files changed, 13 insertions, 7 deletions
diff --git a/runtime/doc/provider.txt b/runtime/doc/provider.txt index 6fa3377a14..0083bb63a4 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 before the cursor. Lines break at <NL>, <CR> and <CR><NL>. +Paste inserts text after 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 010c3b98ee..f0f24e4d16 100644 --- a/src/nvim/lua/vim.lua +++ b/src/nvim/lua/vim.lua @@ -191,8 +191,14 @@ 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 ~= 'c' then - vim.api.nvim_put(lines, 'c', false, true) + elseif mode ~= 'c' then -- Else: discard remaining cmdline-mode chunks. + if phase < 2 and mode ~= 'i' and mode ~= 'R' then + vim.api.nvim_put(lines, 'c', true, true) + -- XXX: Normal-mode: workaround bad cursor-placement after first chunk. + vim.api.nvim_command('normal! a') + else + vim.api.nvim_put(lines, 'c', false, true) + end 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 2bd114b505..5bd39c72f3 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 = { @@ -485,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 --} | @@ -512,7 +512,7 @@ describe('TUI', function() | {4:~ }| {5: }| - {8:paste: Error executing lua: vim.lua:195: Vim:E21: }| + {8:paste: Error executing lua: vim.lua:196: Vim:E21: }| {8:Cannot make changes, 'modifiable' is off} | {10:Press ENTER or type command to continue}{1: } | {3:-- TERMINAL --} | |