mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
TUI/paste: always flush on paste mode-change
Flush input before entering, not only when leaving, paste mode. Else there could be pending input which will erroneously be sent to the paste handler.
This commit is contained in:
parent
6d277f43a2
commit
68ea9a7c8a
@ -96,17 +96,19 @@ end
|
||||
-- Default paste function.
|
||||
local function _paste(data)
|
||||
-- local eof = (data == {''})
|
||||
local curline = vim.api.nvim_call_function('line', {'.'})
|
||||
local curline = vim.api.nvim_call_function('line', {'.'}) - 1
|
||||
vim.api.nvim_buf_set_lines(
|
||||
0,
|
||||
curline,
|
||||
curline,
|
||||
false,
|
||||
data)
|
||||
vim.api.nvim_call_function('cursor', {curline + #data, 1})
|
||||
vim.api.nvim_call_function(
|
||||
'cursor',
|
||||
{curline + #data, 9999999})
|
||||
-- TODO: do not redraw (slow!) until paste is finished.
|
||||
-- if eof then
|
||||
-- vim.api.nvim_command('redraw')
|
||||
-- end
|
||||
vim.api.nvim_command('redraw')
|
||||
return 0
|
||||
end
|
||||
|
||||
|
@ -16,8 +16,6 @@
|
||||
#include "nvim/os/input.h"
|
||||
#include "nvim/event/rstream.h"
|
||||
|
||||
#define PASTE_KEY "<Paste>"
|
||||
#define PASTEPOST_KEY "<PastePost>"
|
||||
#define KEY_BUFFER_SIZE 0xfff
|
||||
|
||||
#ifdef INCLUDE_GENERATED_DECLARATIONS
|
||||
@ -401,9 +399,7 @@ static bool handle_bracketed_paste(TermInput *input)
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!enable) {
|
||||
tinput_flush(input, true);
|
||||
}
|
||||
tinput_flush(input, true);
|
||||
input->paste_enabled = enable;
|
||||
return true;
|
||||
}
|
||||
|
@ -146,10 +146,8 @@ describe('TUI', function()
|
||||
]], attrs)
|
||||
end)
|
||||
|
||||
it('automatically sends <Paste> for bracketed paste sequences', function()
|
||||
it('bracketed Paste', function()
|
||||
-- Pasting can be really slow in the TUI, specially in ASAN.
|
||||
-- This will be fixed later but for now we require a high timeout.
|
||||
screen.timeout = 60000
|
||||
feed_data('i\027[200~')
|
||||
screen:expect([[
|
||||
{1: } |
|
||||
@ -157,29 +155,30 @@ describe('TUI', function()
|
||||
{4:~ }|
|
||||
{4:~ }|
|
||||
{5:[No Name] }|
|
||||
{3:-- INSERT (paste) --} |
|
||||
{3:-- INSERT --} |
|
||||
{3:-- TERMINAL --} |
|
||||
]])
|
||||
feed_data('pasted from terminal')
|
||||
screen:expect([[
|
||||
pasted from terminal{1: } |
|
||||
{4:~ }|
|
||||
{4:~ }|
|
||||
{4:~ }|
|
||||
{5:[No Name] [+] }|
|
||||
{3:-- INSERT (paste) --} |
|
||||
{3:-- TERMINAL --} |
|
||||
]])
|
||||
feed_data('\027[201~')
|
||||
screen:expect([[
|
||||
pasted from terminal{1: } |
|
||||
{4:~ }|
|
||||
|
|
||||
{4:~ }|
|
||||
{4:~ }|
|
||||
{5:[No Name] [+] }|
|
||||
{3:-- INSERT --} |
|
||||
{3:-- TERMINAL --} |
|
||||
]])
|
||||
feed_data('\027[201~') -- End paste.
|
||||
feed_data('\027\000') -- ESC: go to Normal mode.
|
||||
screen:expect([[
|
||||
pasted from termina{1:l} |
|
||||
|
|
||||
{4:~ }|
|
||||
{4:~ }|
|
||||
{5:[No Name] [+] }|
|
||||
|
|
||||
{3:-- TERMINAL --} |
|
||||
]])
|
||||
end)
|
||||
|
||||
it('handles pasting a specific amount of text', function()
|
||||
|
Loading…
Reference in New Issue
Block a user