screen: missing redraw/highlight for ruler in message area

This commit is contained in:
Björn Linse 2019-09-17 20:26:43 +02:00
parent 028d76e5d5
commit f316916758
2 changed files with 44 additions and 5 deletions

View File

@ -5101,6 +5101,8 @@ win_redr_custom (
win_T *ewp; win_T *ewp;
int p_crb_save; int p_crb_save;
ScreenGrid *grid = &default_grid;
/* There is a tiny chance that this gets called recursively: When /* There is a tiny chance that this gets called recursively: When
* redrawing a status line triggers redrawing the ruler or tabline. * redrawing a status line triggers redrawing the ruler or tabline.
* Avoid trouble by not allowing recursion. */ * Avoid trouble by not allowing recursion. */
@ -5140,10 +5142,11 @@ win_redr_custom (
} }
maxwidth = wp->w_width - col; maxwidth = wp->w_width - col;
if (!wp->w_status_height) { if (!wp->w_status_height) {
grid = &msg_grid_adj;
row = Rows - 1; row = Rows - 1;
maxwidth--; // writing in last column may cause scrolling maxwidth--; // writing in last column may cause scrolling
fillchar = ' '; fillchar = ' ';
attr = 0; attr = HL_ATTR(HLF_MSG);
} }
use_sandbox = was_set_insecurely((char_u *)"rulerformat", 0); use_sandbox = was_set_insecurely((char_u *)"rulerformat", 0);
@ -5193,13 +5196,13 @@ win_redr_custom (
/* /*
* Draw each snippet with the specified highlighting. * Draw each snippet with the specified highlighting.
*/ */
grid_puts_line_start(&default_grid, row); grid_puts_line_start(grid, row);
curattr = attr; curattr = attr;
p = buf; p = buf;
for (n = 0; hltab[n].start != NULL; n++) { for (n = 0; hltab[n].start != NULL; n++) {
int textlen = (int)(hltab[n].start - p); int textlen = (int)(hltab[n].start - p);
grid_puts_len(&default_grid, p, textlen, row, col, curattr); grid_puts_len(grid, p, textlen, row, col, curattr);
col += vim_strnsize(p, textlen); col += vim_strnsize(p, textlen);
p = hltab[n].start; p = hltab[n].start;
@ -5213,7 +5216,7 @@ win_redr_custom (
curattr = highlight_user[hltab[n].userhl - 1]; curattr = highlight_user[hltab[n].userhl - 1];
} }
// Make sure to use an empty string instead of p, if p is beyond buf + len. // Make sure to use an empty string instead of p, if p is beyond buf + len.
grid_puts(&default_grid, p >= buf + len ? (char_u *)"" : p, row, col, grid_puts(grid, p >= buf + len ? (char_u *)"" : p, row, col,
curattr); curattr);
grid_puts_line_flush(false); grid_puts_line_flush(false);
@ -7058,7 +7061,7 @@ static void win_redr_ruler(win_T *wp, int always)
} else { } else {
row = Rows - 1; row = Rows - 1;
fillchar = ' '; fillchar = ' ';
attr = 0; attr = HL_ATTR(HLF_MSG);
width = Columns; width = Columns;
off = 0; off = 0;
} }

View File

@ -810,6 +810,7 @@ describe('ui/builtin messages', function()
[4] = {bold = true, foreground = Screen.colors.SeaGreen4}, [4] = {bold = true, foreground = Screen.colors.SeaGreen4},
[5] = {foreground = Screen.colors.Blue1}, [5] = {foreground = Screen.colors.Blue1},
[6] = {bold = true, foreground = Screen.colors.Magenta}, [6] = {bold = true, foreground = Screen.colors.Magenta},
[7] = {background = Screen.colors.Grey20},
}) })
end) end)
@ -902,6 +903,41 @@ vimComment xxx match /\s"[^\-:.%#=*].*$/ms=s+1,lc=1 excludenl contains=@vim
meths.command_output('syntax list vimComment')) meths.command_output('syntax list vimComment'))
-- luacheck: pop -- luacheck: pop
end) end)
it('supports ruler with laststatus=0', function()
command("set ruler laststatus=0")
screen:expect{grid=[[
^ |
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
0,0-1 All |
]]}
command("hi MsgArea guibg=#333333")
screen:expect{grid=[[
^ |
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{7: 0,0-1 All }|
]]}
command("set rulerformat=%15(%c%V\\ %p%%%)")
screen:expect{grid=[[
^ |
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
{7: 0,0-1 100% }|
]]}
end)
end) end)
describe('ui/ext_messages', function() describe('ui/ext_messages', function()