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)