mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.1.0822: peeking and flushing output slows down execution (#25629)
Problem: Peeking and flushing output slows down execution.
Solution: Do not update the mode message when global_busy is set. Do not
flush when only peeking for a character. (Ken Takata)
cb574f4154
This commit is contained in:
parent
9f32deba56
commit
bf70a33f5e
@ -3287,5 +3287,5 @@ static void win_put_linebuf(win_T *wp, int row, int coloff, int endcol, int clea
|
||||
}
|
||||
|
||||
grid_adjust(&grid, &row, &coloff);
|
||||
grid_put_linebuf(grid, row, coloff, 0, endcol, clear_width, wp->w_p_rl, bg_attr, wrap, false);
|
||||
grid_put_linebuf(grid, row, coloff, 0, endcol, clear_width, wp->w_p_rl, bg_attr, wrap);
|
||||
}
|
||||
|
@ -2861,8 +2861,10 @@ int inchar(uint8_t *buf, int maxlen, long wait_time)
|
||||
}
|
||||
|
||||
// Always flush the output characters when getting input characters
|
||||
// from the user.
|
||||
// from the user and not just peeking.
|
||||
if (wait_time == -1L || wait_time > 10L) {
|
||||
ui_flush();
|
||||
}
|
||||
|
||||
// Fill up to a third of the buffer, because each character may be
|
||||
// tripled below.
|
||||
|
@ -481,11 +481,8 @@ void grid_line_flush(void)
|
||||
return;
|
||||
}
|
||||
|
||||
int row = grid_line_row;
|
||||
|
||||
bool invalid_row = grid != &default_grid && grid_invalid_row(grid, row) && grid_line_first == 0;
|
||||
grid_put_linebuf(grid, row, grid_line_coloff, grid_line_first, grid_line_last, grid_line_last,
|
||||
false, 0, false, invalid_row);
|
||||
grid_put_linebuf(grid, grid_line_row, grid_line_coloff, grid_line_first, grid_line_last,
|
||||
grid_line_last, false, 0, false);
|
||||
}
|
||||
|
||||
/// flush grid line but only if on a valid row
|
||||
@ -620,7 +617,7 @@ static int grid_char_needs_redraw(ScreenGrid *grid, int col, size_t off_to, int
|
||||
/// If "wrap" is true, then hint to the UI that "row" contains a line
|
||||
/// which has wrapped into the next row.
|
||||
void grid_put_linebuf(ScreenGrid *grid, int row, int coloff, int col, int endcol, int clear_width,
|
||||
bool rl, int bg_attr, bool wrap, bool invalid_row)
|
||||
bool rl, int bg_attr, bool wrap)
|
||||
{
|
||||
bool redraw_next; // redraw_this for next character
|
||||
bool clear_next = false;
|
||||
@ -639,6 +636,7 @@ void grid_put_linebuf(ScreenGrid *grid, int row, int coloff, int col, int endcol
|
||||
return;
|
||||
}
|
||||
|
||||
bool invalid_row = grid != &default_grid && grid_invalid_row(grid, row) && col == 0;
|
||||
size_t off_to = grid->line_offset[row] + (size_t)coloff;
|
||||
const size_t max_off_to = grid->line_offset[row] + (size_t)grid->cols;
|
||||
|
||||
|
@ -77,8 +77,7 @@ describe('vim.ui_attach', function()
|
||||
}
|
||||
|
||||
feed '<c-y>'
|
||||
-- There is an intermediate state where the 'showmode' message disappears.
|
||||
screen:expect_unchanged(true)
|
||||
screen:expect_unchanged()
|
||||
expect_events {
|
||||
{ "popupmenu_hide" };
|
||||
}
|
||||
|
@ -1775,30 +1775,36 @@ describe('extmark decorations', function()
|
||||
]])
|
||||
|
||||
-- When only one highlight group has an underline attribute, it should always take effect.
|
||||
for _, d in ipairs({-5, 5}) do
|
||||
meths.buf_clear_namespace(0, ns, 0, -1)
|
||||
meths.buf_set_extmark(0, ns, 0, 0, { end_col = 9, hl_group = 'TestUL', priority = 20 })
|
||||
meths.buf_set_extmark(0, ns, 0, 3, { end_col = 6, hl_group = 'TestBold', priority = 30 })
|
||||
screen:expect([[
|
||||
aaabbbaa^a |
|
||||
{0:~ }|
|
||||
|
|
||||
]])
|
||||
meths.buf_set_extmark(0, ns, 0, 0, { end_col = 9, hl_group = 'TestUL', priority = 25 + d })
|
||||
meths.buf_set_extmark(0, ns, 0, 3, { end_col = 6, hl_group = 'TestBold', priority = 25 - d })
|
||||
screen:expect([[
|
||||
{1:aaa}{5:bbb}{1:aa^a} |
|
||||
{0:~ }|
|
||||
|
|
||||
]])
|
||||
end
|
||||
for _, d in ipairs({-5, 5}) do
|
||||
meths.buf_clear_namespace(0, ns, 0, -1)
|
||||
meths.buf_set_extmark(0, ns, 0, 0, { end_col = 9, hl_group = 'TestUL', priority = 30 })
|
||||
meths.buf_set_extmark(0, ns, 0, 3, { end_col = 6, hl_group = 'TestBold', priority = 20 })
|
||||
screen:expect_unchanged(true)
|
||||
meths.buf_clear_namespace(0, ns, 0, -1)
|
||||
meths.buf_set_extmark(0, ns, 0, 0, { end_col = 9, hl_group = 'TestUC', priority = 20 })
|
||||
meths.buf_set_extmark(0, ns, 0, 3, { end_col = 6, hl_group = 'TestBold', priority = 30 })
|
||||
screen:expect([[
|
||||
aaabbbaa^a |
|
||||
{0:~ }|
|
||||
|
|
||||
]])
|
||||
meths.buf_set_extmark(0, ns, 0, 0, { end_col = 9, hl_group = 'TestUC', priority = 25 + d })
|
||||
meths.buf_set_extmark(0, ns, 0, 3, { end_col = 6, hl_group = 'TestBold', priority = 25 - d })
|
||||
screen:expect([[
|
||||
{2:aaa}{6:bbb}{2:aa^a} |
|
||||
{0:~ }|
|
||||
|
|
||||
]])
|
||||
meths.buf_clear_namespace(0, ns, 0, -1)
|
||||
meths.buf_set_extmark(0, ns, 0, 0, { end_col = 9, hl_group = 'TestUC', priority = 30 })
|
||||
meths.buf_set_extmark(0, ns, 0, 3, { end_col = 6, hl_group = 'TestBold', priority = 20 })
|
||||
screen:expect_unchanged(true)
|
||||
end
|
||||
end)
|
||||
|
||||
it('highlight is combined with syntax and sign linehl #20004', function()
|
||||
|
@ -9284,9 +9284,11 @@ describe('float window', function()
|
||||
end
|
||||
|
||||
-- Also test with global NormalNC highlight
|
||||
meths.set_option_value('winhighlight', '', {win = win})
|
||||
command('hi link NormalNC Visual')
|
||||
screen:expect_unchanged(true)
|
||||
exec_lua([[
|
||||
vim.api.nvim_set_option_value('winhighlight', '', {win = ...})
|
||||
vim.api.nvim_set_hl(0, 'NormalNC', {link = 'Visual'})
|
||||
]], win)
|
||||
screen:expect_unchanged()
|
||||
command('hi clear NormalNC')
|
||||
|
||||
command('hi SpecialRegion guifg=Red blend=0')
|
||||
|
@ -169,10 +169,10 @@ describe("folded lines", function()
|
||||
end
|
||||
-- CursorLine is applied correctly with screenrow motions #22232
|
||||
feed("jgk")
|
||||
screen:expect_unchanged(true)
|
||||
screen:expect_unchanged()
|
||||
-- CursorLine is applied correctly when closing a fold when cursor is not at fold start
|
||||
feed("zo4Gzc")
|
||||
screen:expect_unchanged(true)
|
||||
screen:expect_unchanged()
|
||||
command("set cursorlineopt=line")
|
||||
if multigrid then
|
||||
screen:expect([[
|
||||
|
@ -2929,7 +2929,16 @@ it(':substitute with inccommand, allows :redraw before first separator is typed
|
||||
meths.open_win(float_buf, false, {
|
||||
relative = 'editor', height = 1, width = 5, row = 3, col = 0, focusable = false,
|
||||
})
|
||||
feed(':%s')
|
||||
feed(':')
|
||||
screen:expect([[
|
||||
foo bar baz |
|
||||
bar baz fox |
|
||||
bar foo baz |
|
||||
{16: }{15: }|
|
||||
{15:~ }|
|
||||
:^ |
|
||||
]])
|
||||
feed('%s')
|
||||
screen:expect([[
|
||||
foo bar baz |
|
||||
bar baz fox |
|
||||
|
@ -69,6 +69,9 @@ describe('UI receives option updates', function()
|
||||
eq({'mouse_on'}, evs)
|
||||
end)
|
||||
command("set mouse=")
|
||||
screen:expect(function()
|
||||
eq({'mouse_on', 'mouse_off'}, evs)
|
||||
end)
|
||||
command("set mouse&")
|
||||
screen:expect(function()
|
||||
eq({'mouse_on', 'mouse_off', 'mouse_on'}, evs)
|
||||
|
@ -337,7 +337,7 @@ describe('search highlighting', function()
|
||||
]])
|
||||
feed('/foo')
|
||||
helpers.poke_eventloop()
|
||||
screen:sleep(0)
|
||||
screen:sleep(100)
|
||||
screen:expect_unchanged()
|
||||
end)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user