aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/api/vim.c14
-rw-r--r--src/nvim/lua/vim.lua2
-rw-r--r--test/functional/api/vim_spec.lua31
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)