diff --git a/src/nvim/window.c b/src/nvim/window.c index 4df00525e1..99006d26e6 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -3012,6 +3012,7 @@ int win_close(win_T *win, bool free_buf, bool force) // which may have changed since the last set_bufref. (e.g: close_buffer autocmds) set_bufref(&bufref, win->w_buffer); + bool had_cmdline_ruler = p_ru && win == curwin && win->w_status_height == 0; // Free the memory used for the window and get the window that received // the screen space. int dir; @@ -3074,6 +3075,8 @@ int win_close(win_T *win, bool free_buf, bool force) win_comp_pos(); win_fix_scroll(false); } + } else if (had_cmdline_ruler && wp->w_status_height > 0) { + redraw_cmdline = true; // clear cmdline 'ruler' } if (bufref.br_buf && bufref_valid(&bufref) && bufref.br_buf->terminal) { terminal_check_size(bufref.br_buf->terminal); diff --git a/test/functional/ui/statusline_spec.lua b/test/functional/ui/statusline_spec.lua index 348fdfc74b..2ae06942e2 100644 --- a/test/functional/ui/statusline_spec.lua +++ b/test/functional/ui/statusline_spec.lua @@ -805,6 +805,19 @@ describe('statusline', function() ]]) end) + it('ruler is cleared when window without statusline is closed', function() + local cfg = { relative = 'editor', row = 1, col = 1, height = 1, width = 1 } + local win = api.nvim_open_win(0, true, cfg) + command('set ruler laststatus=2') + api.nvim_win_close(win, true) + screen:expect([[ + ^ | + {1:~ }|*5 + {3:[No Name] 0,0-1 All}| + | + ]]) + end) + it('hidden moves ruler to cmdline', function() -- Use long ruler to check 'ruler' with 'rulerformat' set has correct width. command [[