Merge pull request #22847 from luukvbaal/redrstatus

fix(ui): ruler is not redrawn in cmdline with redrawstatus
This commit is contained in:
bfredl
2023-04-03 16:02:44 +02:00
committed by GitHub
3 changed files with 24 additions and 1 deletions

View File

@@ -32,7 +32,8 @@ CTRL-L Clears and redraws the screen. The redraw may happen
*:redraws* *:redrawstatus* *:redraws* *:redrawstatus*
:redraws[tatus][!] Redraws the status line and window bar of the current :redraws[tatus][!] Redraws the status line and window bar of the current
window, or all status lines and window bars if "!" is window, or all status lines and window bars if "!" is
included. Useful if 'statusline' or 'winbar' includes included. Redraws the commandline instead if it contains
the 'ruler'. Useful if 'statusline' or 'winbar' includes
an item that doesn't cause automatic updating. an item that doesn't cause automatic updating.
*:redrawt* *:redrawtabline* *:redrawt* *:redrawtabline*

View File

@@ -2683,6 +2683,11 @@ void status_redraw_buf(buf_T *buf)
redraw_later(wp, UPD_VALID); redraw_later(wp, UPD_VALID);
} }
} }
// Redraw the ruler if it is in the command line and was not marked for redraw above
if (p_ru && !curwin->w_status_height && !curwin->w_redr_status) {
redraw_cmdline = true;
redraw_later(curwin, UPD_VALID);
}
} }
/// Redraw all status lines that need to be redrawn. /// Redraw all status lines that need to be redrawn.

View File

@@ -636,3 +636,20 @@ it('statusline is redrawn on recording state change #22683', function()
recording @Q | recording @Q |
]]) ]])
end) end)
it('ruler is redrawn in cmdline with redrawstatus #22804', function()
clear()
local screen = Screen.new(40, 2)
screen:attach()
command([[
let g:n = 'initial value'
set ls=1 ru ruf=%{g:n}
redraw
let g:n = 'other value'
redrawstatus
]])
screen:expect([[
^ |
other value |
]])
end)