mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 11:15:14 -07:00
screen.c: add update_window_hl to special redrawing entrypoints
The following (run as a script) used to cause a crash due to :sign using a special redraw (not updating nvim's specific highlight data structures) without proper redraw first, as split just flags for redraw later. set cursorline sign define piet text=>> texthl=Search split sign place 3 line=2 name=piet buffer=1
This commit is contained in:
parent
5f15788dc3
commit
9a584773b5
@ -507,6 +507,7 @@ void update_single_line(win_T *wp, linenr_T lnum)
|
||||
init_search_hl(wp);
|
||||
start_search_hl();
|
||||
prepare_search_hl(wp, lnum);
|
||||
update_window_hl(wp, false);
|
||||
win_line(wp, lnum, row, row + wp->w_lines[j].wl_size, false);
|
||||
end_search_hl();
|
||||
break;
|
||||
@ -579,6 +580,7 @@ void update_debug_sign(buf_T *buf, linenr_T lnum)
|
||||
|
||||
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
|
||||
if (wp->w_redr_type != 0) {
|
||||
update_window_hl(wp, wp->w_redr_type >= NOT_VALID);
|
||||
win_update(wp);
|
||||
}
|
||||
if (wp->w_redr_status) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
local helpers = require('test.functional.helpers')(after_each)
|
||||
local Screen = require('test.functional.ui.screen')
|
||||
local clear, feed, command = helpers.clear, helpers.feed, helpers.command
|
||||
local source = helpers.source
|
||||
|
||||
describe('Signs', function()
|
||||
local screen
|
||||
@ -13,6 +14,9 @@ describe('Signs', function()
|
||||
[0] = {bold=true, foreground=255},
|
||||
[1] = {background = Screen.colors.Yellow},
|
||||
[2] = {foreground = Screen.colors.DarkBlue, background = Screen.colors.Grey},
|
||||
[3] = {background = Screen.colors.Gray90},
|
||||
[4] = {bold = true, reverse = true},
|
||||
[5] = {reverse = true},
|
||||
} )
|
||||
end)
|
||||
|
||||
@ -45,5 +49,34 @@ describe('Signs', function()
|
||||
|
|
||||
]])
|
||||
end)
|
||||
|
||||
it('can be called right after :split', function()
|
||||
feed('ia<cr>b<cr>c<cr><esc>gg')
|
||||
-- This used to cause a crash due to :sign using a special redraw
|
||||
-- (not updating nvim's specific highlight data structures)
|
||||
-- without proper redraw first, as split just flags for redraw later.
|
||||
source([[
|
||||
set cursorline
|
||||
sign define piet text=>> texthl=Search
|
||||
split
|
||||
sign place 3 line=2 name=piet buffer=1
|
||||
]])
|
||||
screen:expect([[
|
||||
{2: }{3:^a }|
|
||||
{1:>>}b |
|
||||
{2: }c |
|
||||
{2: } |
|
||||
{2: }{0:~ }|
|
||||
{2: }{0:~ }|
|
||||
{4:[No Name] [+] }|
|
||||
{2: }{3:a }|
|
||||
{1:>>}b |
|
||||
{2: }c |
|
||||
{2: } |
|
||||
{2: }{0:~ }|
|
||||
{5:[No Name] [+] }|
|
||||
|
|
||||
]])
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
|
Loading…
Reference in New Issue
Block a user