feat: emit OilReadPost user event after each buffer render

Problem: third-party plugins like oil-git-status.nvim had no way to
know when an oil buffer was re-rendered after a filesystem change,
causing their decorations to be cleared with no signal to refresh.

Solution: emit a User OilReadPost autocmd after every successful
render_buffer_async call. Also document all oil user events
(OilEnter, OilReadPost, OilMutationComplete) in oil.txt since none
were previously documented.

Cherry-picked from: stevearc/oil.nvim#723
This commit is contained in:
Barrett Ruth 2026-02-20 16:27:09 -05:00
parent 2228f80196
commit 29239d56fb
2 changed files with 52 additions and 1 deletions

View file

@ -867,7 +867,19 @@ local pending_renders = {}
---@param opts nil|table
--- refetch nil|boolean Defaults to true
---@param callback nil|fun(err: nil|string)
M.render_buffer_async = function(bufnr, opts, callback)
M.render_buffer_async = function(bufnr, opts, caller_callback)
local function callback(err)
if not err then
vim.api.nvim_exec_autocmds(
"User",
{ pattern = "OilReadPost", modeline = false, data = { buf = bufnr } }
)
end
if caller_callback then
caller_callback(err)
end
end
opts = vim.tbl_deep_extend("keep", opts or {}, {
refetch = true,
})