Merge pull request #16602 from zeertzjq/tui-end-streamed-paste

This commit is contained in:
James McCoy 2021-12-13 09:36:02 -05:00 committed by GitHub
commit f37c5f180a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 0 deletions

View File

@ -114,6 +114,12 @@ static void tinput_done_event(void **argv)
static void tinput_wait_enqueue(void **argv)
{
TermInput *input = argv[0];
if (rbuffer_size(input->key_buffer) == 0 && input->paste == 3) {
const String keys = { .data = "", .size = 0 };
String copy = copy_string(keys);
multiqueue_put(main_loop.events, tinput_paste_event, 3,
copy.data, copy.size, (intptr_t)input->paste);
}
RBUFFER_UNTIL_EMPTY(input->key_buffer, buf, len) {
const String keys = { .data = buf, .size = len };
if (input->paste) {

View File

@ -765,6 +765,44 @@ describe('TUI', function()
]])
end)
it('paste: streamed paste with isolated "stop paste" code', function()
child_session:request('nvim_exec_lua', [[
_G.paste_phases = {}
vim.paste = (function(overridden)
return function(lines, phase)
table.insert(_G.paste_phases, phase)
overridden(lines, phase)
end
end)(vim.paste)
]], {})
feed_data('i')
feed_data('\027[200~pasted') -- phase 1
screen:expect([[
pasted{1: } |
{4:~ }|
{4:~ }|
{4:~ }|
{5:[No Name] [+] }|
{3:-- INSERT --} |
{3:-- TERMINAL --} |
]])
feed_data(' from terminal') -- phase 2
screen:expect([[
pasted from terminal{1: } |
{4:~ }|
{4:~ }|
{4:~ }|
{5:[No Name] [+] }|
{3:-- INSERT --} |
{3:-- TERMINAL --} |
]])
-- Send isolated "stop paste" sequence.
feed_data('\027[201~') -- phase 3
screen:expect_unchanged()
local _, rv = child_session:request('nvim_exec_lua', [[return _G.paste_phases]], {})
eq({1, 2, 3}, rv)
end)
it('allows termguicolors to be set at runtime', function()
screen:set_option('rgb', true)
screen:set_default_attr_ids({