From dfb09e87bfb6d0d4d7896211dc0f18a40747875d Mon Sep 17 00:00:00 2001 From: John Winston <59228178+winston0410@users.noreply.github.com> Date: Wed, 15 Oct 2025 18:03:09 +0100 Subject: [PATCH] feat: add callback for handling buffer opening (#638) --- lua/oil/init.lua | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/lua/oil/init.lua b/lua/oil/init.lua index 992c574..4d4bd23 100644 --- a/lua/oil/init.lua +++ b/lua/oil/init.lua @@ -618,6 +618,7 @@ end ---@field split? "aboveleft"|"belowright"|"topleft"|"botright" Split modifier ---@field tab? boolean Open the buffer in a new tab ---@field close? boolean Close the original oil buffer once selection is made +---@field handle_buffer_callback? fun(buf_id: integer) If defined, all other buffer related options here would be ignored. This callback allows you to take over the process of opening the buffer yourself. ---Select the entry under the cursor ---@param opts nil|oil.SelectOpts @@ -757,15 +758,19 @@ M.select = function(opts, callback) elseif opts.split then cmd = "sbuffer" end - ---@diagnostic disable-next-line: param-type-mismatch - local ok, err = pcall(vim.cmd, { - cmd = cmd, - args = { filebufnr }, - mods = mods, - }) - -- Ignore swapfile errors - if not ok and err and not err:match("^Vim:E325:") then - vim.api.nvim_echo({ { err, "Error" } }, true, {}) + if opts.handle_buffer_callback ~= nil then + opts.handle_buffer_callback(filebufnr) + else + ---@diagnostic disable-next-line: param-type-mismatch + local ok, err = pcall(vim.cmd, { + cmd = cmd, + args = { filebufnr }, + mods = mods, + }) + -- Ignore swapfile errors + if not ok and err and not err:match("^Vim:E325:") then + vim.api.nvim_echo({ { err, "Error" } }, true, {}) + end end open_next_entry(cb)