diff options
-rw-r--r-- | src/nvim/api/vim.c | 14 | ||||
-rw-r--r-- | src/nvim/lua/vim.lua | 2 | ||||
-rw-r--r-- | test/functional/api/vim_spec.lua | 31 |
3 files changed, 34 insertions, 13 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index d3e368d01b..02000907f9 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -1206,7 +1206,7 @@ Dictionary nvim_get_namespaces(void) return retval; } -/// Inserts text at cursor. +/// Puts text at cursor. /// /// Compare |:put| and |p| which are always linewise. /// @@ -1216,10 +1216,11 @@ Dictionary nvim_get_namespaces(void) /// - "c" |characterwise| mode /// - "l" |linewise| mode /// - "" guess by contents -/// @param direction Behave like |P| instead of |p| +/// @param after Insert after cursor (like |p|), or before (like |P|). +/// @param follow Place cursor at end of inserted text. /// @param[out] err Error details, if any -void nvim_put(ArrayOf(String) lines, String type, Boolean direction, - Error *err) +void nvim_put(ArrayOf(String) lines, String type, Boolean after, + Boolean follow, Error *err) FUNC_API_SINCE(6) { yankreg_T *reg = xcalloc(sizeof(yankreg_T), 1); @@ -1249,9 +1250,10 @@ void nvim_put(ArrayOf(String) lines, String type, Boolean direction, finish_yankreg_from_object(reg, false); bool VIsual_was_active = VIsual_active; - int flags = PUT_CURSEND; msg_silent++; // Avoid "N more lines" message. - do_put(0, reg, direction ? BACKWARD : FORWARD, 1, flags); + do_put(0, reg, + after ? FORWARD : BACKWARD, 1, + follow ? PUT_CURSEND : 0); msg_silent--; VIsual_active = VIsual_was_active; diff --git a/src/nvim/lua/vim.lua b/src/nvim/lua/vim.lua index 6759e4436b..0b94417b3e 100644 --- a/src/nvim/lua/vim.lua +++ b/src/nvim/lua/vim.lua @@ -100,7 +100,7 @@ local function _paste(lines) local mode = call('mode', {}) local curline = call('line', {'.'}) -- vim.api.nvim_set_option('paste', true) - vim.api.nvim_put(lines, 'c', false) + vim.api.nvim_put(lines, 'c', true, true) -- vim.api.nvim_set_option('paste', false) -- TODO: do not redraw (slow!) until paste is finished. -- if eof then diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua index 20046147b8..3f3d9b74bb 100644 --- a/test/functional/api/vim_spec.lua +++ b/test/functional/api/vim_spec.lua @@ -369,34 +369,53 @@ describe('API', function() describe('nvim_put', function() it('inserts text', function() -- linewise - nvim('put', {'line 1','line 2','line 3'}, 'l', false) + nvim('put', {'line 1','line 2','line 3'}, 'l', true, true) expect([[ line 1 line 2 line 3]]) + eq({0,4,1,0}, funcs.getpos('.')) command('%delete _') -- charwise - nvim('put', {'line 1','line 2','line 3'}, 'c', false) + nvim('put', {'line 1','line 2','line 3'}, 'c', true, false) expect([[ line 1 line 2 line 3]]) - command('1') + eq({0,1,1,0}, funcs.getpos('.')) -- follow=false -- blockwise - nvim('put', {'AA','BB'}, 'b', false) + nvim('put', {'AA','BB'}, 'b', true, true) expect([[ lAAine 1 lBBine 2 line 3]]) + eq({0,2,4,0}, funcs.getpos('.')) command('%delete _') -- Empty lines list. - nvim('put', {}, 'c', false) + nvim('put', {}, 'c', true, true) + eq({0,1,1,0}, funcs.getpos('.')) expect([[]]) -- Single empty line. - nvim('put', {''}, 'c', false) + nvim('put', {''}, 'c', true, true) + eq({0,1,1,0}, funcs.getpos('.')) expect([[ ]]) + nvim('put', {'AB'}, 'c', true, true) + -- after=false, follow=true + nvim('put', {'line 1','line 2'}, 'c', false, true) + expect([[ + Aline 1 + line 2B]]) + eq({0,2,7,0}, funcs.getpos('.')) + command('%delete _') + nvim('put', {'AB'}, 'c', true, true) + -- after=false, follow=false + nvim('put', {'line 1','line 2'}, 'c', false, false) + expect([[ + Aline 1 + line 2B]]) + eq({0,1,2,0}, funcs.getpos('.')) eq('', nvim('eval', 'v:errmsg')) end) end) |