fix: directory hijacking when oil is lazy loaded (#149)
This commit is contained in:
parent
887bb4a8b6
commit
966eaaadbc
2 changed files with 16 additions and 5 deletions
|
|
@ -601,23 +601,25 @@ M.select = function(opts, callback)
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param bufnr integer
|
---@param bufnr integer
|
||||||
|
---@return boolean
|
||||||
local function maybe_hijack_directory_buffer(bufnr)
|
local function maybe_hijack_directory_buffer(bufnr)
|
||||||
local config = require("oil.config")
|
local config = require("oil.config")
|
||||||
local util = require("oil.util")
|
local util = require("oil.util")
|
||||||
if not config.default_file_explorer then
|
if not config.default_file_explorer then
|
||||||
return
|
return false
|
||||||
end
|
end
|
||||||
local bufname = vim.api.nvim_buf_get_name(bufnr)
|
local bufname = vim.api.nvim_buf_get_name(bufnr)
|
||||||
if bufname == "" then
|
if bufname == "" then
|
||||||
return
|
return false
|
||||||
end
|
end
|
||||||
if util.parse_url(bufname) or vim.fn.isdirectory(bufname) == 0 then
|
if util.parse_url(bufname) or vim.fn.isdirectory(bufname) == 0 then
|
||||||
return
|
return false
|
||||||
end
|
end
|
||||||
util.rename_buffer(
|
local replaced = util.rename_buffer(
|
||||||
bufnr,
|
bufnr,
|
||||||
util.addslash(config.adapter_to_scheme.files .. vim.fn.fnamemodify(bufname, ":p"))
|
util.addslash(config.adapter_to_scheme.files .. vim.fn.fnamemodify(bufname, ":p"))
|
||||||
)
|
)
|
||||||
|
return not replaced
|
||||||
end
|
end
|
||||||
|
|
||||||
---@private
|
---@private
|
||||||
|
|
@ -1045,7 +1047,12 @@ M.setup = function(opts)
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
maybe_hijack_directory_buffer(0)
|
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)
|
||||||
|
load_oil_buffer(bufnr)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ local timers = {}
|
||||||
|
|
||||||
local FPS = 20
|
local FPS = 20
|
||||||
|
|
||||||
|
---@param bufnr integer
|
||||||
|
---@return boolean
|
||||||
M.is_loading = function(bufnr)
|
M.is_loading = function(bufnr)
|
||||||
return timers[bufnr] ~= nil
|
return timers[bufnr] ~= nil
|
||||||
end
|
end
|
||||||
|
|
@ -56,6 +58,8 @@ M.get_bar_iter = function(opts)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@param bufnr integer
|
||||||
|
---@param is_loading boolean
|
||||||
M.set_loading = function(bufnr, is_loading)
|
M.set_loading = function(bufnr, is_loading)
|
||||||
if is_loading then
|
if is_loading then
|
||||||
if timers[bufnr] == nil then
|
if timers[bufnr] == nil then
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue