fix(ruler): show ruler of curwin with no statusline in cmdline

Problem: After neovim/neovim@846a056, only the ruler for current floating or
last window without a statusline is drawn in the cmdline. This means that if the
current window is not one of these, but has no statusline, its ruler will not be
drawn anymore.

Solution: Make `showmode()` draw the ruler of the current window or the last
window in the cmdline if it has no statusline. This also maintains the
previously restored floating window case (`float->w_status_height` should be 0).

This behaviour should again match Vim, but without the overdraw it seems to do
to achieve the same effect; it calls `showmode()` to draw the ruler for the last
window without a statusline, then may draw over it in `showruler()` (which is
now `show_cursor_info_later()` in Nvim) to show the ruler for the current
window..? It's very confusing.

Also update the logic in `win_redr_ruler()` to mirror the check done in
`showmode()`, so that the ruler doesn't potentially draw over the long
ins-completion mode message in some cases.
This commit is contained in:
Sean Dewar
2023-04-10 21:40:35 +01:00
parent 7095f8ff9d
commit 65dd3c1180
4 changed files with 181 additions and 6 deletions

View File

@@ -2340,6 +2340,121 @@ describe('float window', function()
end
end)
it('does not show ruler of not-last current float during ins-completion', function()
screen:try_resize(50,9)
command 'set ruler showmode'
meths.open_win(0, false, {relative='editor', width=3, height=3, row=0, col=0})
meths.open_win(0, false, {relative='editor', width=3, height=3, row=0, col=5})
feed '<c-w>w'
neq('', meths.win_get_config(0).relative)
neq(funcs.winnr '$', funcs.winnr())
if multigrid then
screen:expect{grid=[[
## grid 1
[2:--------------------------------------------------]|
[2:--------------------------------------------------]|
[2:--------------------------------------------------]|
[2:--------------------------------------------------]|
[2:--------------------------------------------------]|
[2:--------------------------------------------------]|
[2:--------------------------------------------------]|
[2:--------------------------------------------------]|
[3:--------------------------------------------------]|
## grid 2
|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
## grid 3
0,0-1 All |
## grid 4
{1: }|
{2:~ }|
{2:~ }|
## grid 5
{1:^ }|
{2:~ }|
{2:~ }|
]], float_pos={
[5] = {{id = 1002}, "NW", 1, 0, 5, true, 50};
[4] = {{id = 1001}, "NW", 1, 0, 0, true, 50};
}, win_viewport={
[2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
[4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
[5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
}}
else
screen:expect{grid=[[
{1: } {1:^ } |
{2:~ }{0: }{2:~ }{0: }|
{2:~ }{0: }{2:~ }{0: }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
0,0-1 All |
]]}
end
feed 'i<c-x>'
if multigrid then
screen:expect{grid=[[
## grid 1
[2:--------------------------------------------------]|
[2:--------------------------------------------------]|
[2:--------------------------------------------------]|
[2:--------------------------------------------------]|
[2:--------------------------------------------------]|
[2:--------------------------------------------------]|
[2:--------------------------------------------------]|
[2:--------------------------------------------------]|
[3:--------------------------------------------------]|
## grid 2
|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
## grid 3
{3:-- ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)} |
## grid 4
{1: }|
{2:~ }|
{2:~ }|
## grid 5
{1:^ }|
{2:~ }|
{2:~ }|
]], float_pos={
[5] = {{id = 1002}, "NW", 1, 0, 5, true, 50};
[4] = {{id = 1001}, "NW", 1, 0, 0, true, 50};
}, win_viewport={
[2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
[4] = {win = {id = 1001}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
[5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1, sum_scroll_delta = 0};
}}
else
screen:expect{grid=[[
{1: } {1:^ } |
{2:~ }{0: }{2:~ }{0: }|
{2:~ }{0: }{2:~ }{0: }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{3:-- ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)} |
]]}
end
end)
it('can have minimum size', function()
insert("the background text")
local buf = meths.create_buf(false, true)