mirror of
https://github.com/neovim/neovim.git
synced 2025-10-08 19:06:31 +00:00
API: nvim_put: always PUT_CURSEND
Fixes strange behavior where sometimes the buffer contents of a series of paste chunks (vim._paste) would be out-of-order. Now the tui_spec.lua screen-tests are much more reliable. But they still sometimes fail because of off-by-one cursor (caused by "typeahead race" resulting in wrong mode; fixed later in this patch-series).
This commit is contained in:
@@ -1249,13 +1249,7 @@ void nvim_put(ArrayOf(String) lines, String type, Boolean direction,
|
|||||||
finish_yankreg_from_object(reg, false);
|
finish_yankreg_from_object(reg, false);
|
||||||
|
|
||||||
bool VIsual_was_active = VIsual_active;
|
bool VIsual_was_active = VIsual_active;
|
||||||
int flags = 0;
|
int flags = PUT_CURSEND;
|
||||||
if (State & INSERT) {
|
|
||||||
flags |= PUT_CURSEND;
|
|
||||||
} else if (VIsual_active) {
|
|
||||||
// TODO: fix VIsual when cursor is before, or emulate the delete as well
|
|
||||||
flags |= lt(VIsual, curwin->w_cursor) ? PUT_CURSEND : 0;
|
|
||||||
}
|
|
||||||
msg_silent++; // Avoid "N more lines" message.
|
msg_silent++; // Avoid "N more lines" message.
|
||||||
do_put(0, reg, direction ? BACKWARD : FORWARD, 1, flags);
|
do_put(0, reg, direction ? BACKWARD : FORWARD, 1, flags);
|
||||||
msg_silent--;
|
msg_silent--;
|
||||||
|
@@ -382,6 +382,7 @@ describe('API', function()
|
|||||||
line 1
|
line 1
|
||||||
line 2
|
line 2
|
||||||
line 3]])
|
line 3]])
|
||||||
|
command('1')
|
||||||
-- blockwise
|
-- blockwise
|
||||||
nvim('put', {'AA','BB'}, 'b', false)
|
nvim('put', {'AA','BB'}, 'b', false)
|
||||||
expect([[
|
expect([[
|
||||||
|
@@ -190,9 +190,16 @@ describe('TUI', function()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
it('paste: exactly 64 bytes #10311', function()
|
it('paste: exactly 64 bytes #10311', function()
|
||||||
|
local expected = string.rep('z', 64)
|
||||||
-- "bracketed paste"
|
-- "bracketed paste"
|
||||||
feed_data('i\027[200~'..string.rep('z', 64)..'\027[201~')
|
feed_data('i\027[200~'..expected..'\027[201~')
|
||||||
feed_data(' end')
|
feed_data(' end')
|
||||||
|
expected = expected..' end'
|
||||||
|
retry(nil, nil, function()
|
||||||
|
local _, buflines = child_session:request(
|
||||||
|
'nvim_buf_get_lines', 0, 0, -1, false)
|
||||||
|
eq({expected}, buflines)
|
||||||
|
end)
|
||||||
screen:expect([[
|
screen:expect([[
|
||||||
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz|
|
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz|
|
||||||
zzzzzzzzzzzzzz end{1: } |
|
zzzzzzzzzzzzzz end{1: } |
|
||||||
@@ -210,9 +217,13 @@ describe('TUI', function()
|
|||||||
for i = 1, 3000 do
|
for i = 1, 3000 do
|
||||||
t[i] = 'item ' .. tostring(i)
|
t[i] = 'item ' .. tostring(i)
|
||||||
end
|
end
|
||||||
local expected = table.concat(t, '\n')
|
|
||||||
-- "bracketed paste"
|
-- "bracketed paste"
|
||||||
feed_data('i\027[200~'..expected..'\027[201~')
|
feed_data('i\027[200~'..table.concat(t, '\n')..'\027[201~')
|
||||||
|
retry(nil, nil, function()
|
||||||
|
local _, buflines = child_session:request(
|
||||||
|
'nvim_buf_get_lines', 0, 0, -1, false)
|
||||||
|
eq(t, buflines)
|
||||||
|
end)
|
||||||
feed_data(' end')
|
feed_data(' end')
|
||||||
screen:expect([[
|
screen:expect([[
|
||||||
item 2997 |
|
item 2997 |
|
||||||
|
Reference in New Issue
Block a user