mirror of
https://github.com/neovim/neovim.git
synced 2026-07-10 03:19:44 +00:00
Problem: The dir.lua "-" mapping cannot be easily overridden (because of autocmd ordering). Solution: - Move it to defaults.lua. - Also to be extra polite: fall back to builtin `-` motion if the user disabled the `dir.lua` plugin.
69 lines
1.9 KiB
Lua
69 lines
1.9 KiB
Lua
if vim.g.loaded_nvim_dir_plugin ~= nil then
|
|
return
|
|
end
|
|
vim.g.loaded_nvim_dir_plugin = true
|
|
|
|
local api = vim.api
|
|
local nvim_on = require('vim._core.util').nvim_on
|
|
|
|
vim.keymap.set('n', '<Plug>(nvim-dir-open)', function()
|
|
require('nvim.dir')._open_entry()
|
|
end, { silent = true, desc = 'Open directory entry' })
|
|
|
|
vim.keymap.set('n', '<Plug>(nvim-dir-up)', function()
|
|
require('nvim.dir')._open_parent()
|
|
end, { silent = true, desc = 'Open parent directory' })
|
|
|
|
vim.keymap.set('n', '<Plug>(nvim-dir-reload)', function()
|
|
require('nvim.dir')._reload()
|
|
end, { silent = true, desc = 'Reload directory' })
|
|
|
|
---@param buf integer
|
|
---@param path string
|
|
---@return boolean
|
|
local function should_open(buf, path)
|
|
if path == '' then
|
|
return false
|
|
end
|
|
if vim.bo[buf].buftype ~= '' and vim.b[buf].nvim_dir == nil then
|
|
return false
|
|
end
|
|
if vim.bo[buf].filetype == 'netrw' or vim.b[buf].netrw_curdir ~= nil then
|
|
return false
|
|
end
|
|
return vim.fn.isdirectory(path) == 1
|
|
end
|
|
|
|
api.nvim_create_augroup('FileExplorer', { clear = true })
|
|
local group = api.nvim_create_augroup('nvim.dir', { clear = true })
|
|
-- Latch on our own VimEnter, not v:vim_did_enter (set just before VimEnter
|
|
-- autocmds), so an earlier VimEnter autocmd's BufEnter can't preempt startup.
|
|
local vimentered = vim.v.vim_did_enter == 1
|
|
|
|
nvim_on('BufEnter', group, {
|
|
pattern = '*',
|
|
desc = 'Open local directories',
|
|
nested = true,
|
|
}, function(ev)
|
|
if vimentered and should_open(ev.buf, ev.file) then
|
|
require('nvim.dir').try_open(ev.buf, ev.file)
|
|
end
|
|
end)
|
|
|
|
nvim_on('VimEnter', group, {
|
|
pattern = '*',
|
|
desc = 'Open startup local directories',
|
|
nested = true,
|
|
}, function()
|
|
vimentered = true
|
|
for _, win in ipairs(api.nvim_tabpage_list_wins(0)) do
|
|
if api.nvim_win_is_valid(win) then
|
|
local buf = api.nvim_win_get_buf(win)
|
|
if should_open(buf, api.nvim_buf_get_name(buf)) then
|
|
require('nvim.dir').handle_startup_dirs()
|
|
return
|
|
end
|
|
end
|
|
end
|
|
end)
|