From 2228f80196b058bb130bdd2573a72192a64825b6 Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Fri, 20 Feb 2026 16:26:24 -0500 Subject: [PATCH] refactor: only create BufAdd autocmd when default_file_explorer is true Problem: the BufAdd autocmd that hijacks directory buffers was always created, even when default_file_explorer was false. The guard inside maybe_hijack_directory_buffer made it a no-op, but the autocmd still fired on every BufAdd event. Solution: wrap the BufAdd autocmd creation and initial buffer hijack in a config.default_file_explorer conditional. The guard inside maybe_hijack_directory_buffer is kept as defense-in-depth. Based on: stevearc/oil.nvim#720 --- lua/oil/init.lua | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/lua/oil/init.lua b/lua/oil/init.lua index 908d6dd..67d462f 100644 --- a/lua/oil/init.lua +++ b/lua/oil/init.lua @@ -1397,15 +1397,6 @@ M.setup = function(opts) vim.w.oil_original_alternate = vim.w[parent_win].oil_original_alternate end, }) - vim.api.nvim_create_autocmd("BufAdd", { - desc = "Detect directory buffer and open oil file browser", - group = aug, - pattern = "*", - nested = true, - callback = function(params) - maybe_hijack_directory_buffer(params.buf) - end, - }) -- mksession doesn't save oil buffers in a useful way. We have to manually load them after a -- session finishes loading. See https://github.com/stevearc/oil.nvim/issues/29 vim.api.nvim_create_autocmd("SessionLoadPost", { @@ -1424,11 +1415,21 @@ M.setup = function(opts) end, }) - local bufnr = vim.api.nvim_get_current_buf() - if maybe_hijack_directory_buffer(bufnr) and vim.v.vim_did_enter == 1 then - -- manually call load on a hijacked directory buffer if vim has already entered - -- (the BufReadCmd will not trigger) - M.load_oil_buffer(bufnr) + if config.default_file_explorer then + vim.api.nvim_create_autocmd("BufAdd", { + desc = "Detect directory buffer and open oil file browser", + group = aug, + pattern = "*", + nested = true, + callback = function(params) + maybe_hijack_directory_buffer(params.buf) + end, + }) + + local bufnr = vim.api.nvim_get_current_buf() + if maybe_hijack_directory_buffer(bufnr) and vim.v.vim_did_enter == 1 then + M.load_oil_buffer(bufnr) + end end end