refacto: move some code into actions
(non breaking, old assignments link to new assignments) - move lib.collapse-all into actions/collapse-all - move lib.dir-up into actions/dir-up - move lib.change-dir into actions/change-dir - use setup option for change-dir global (and use the old option for setup)
This commit is contained in:
parent
95e3aacc01
commit
f74dd24c58
@ -96,6 +96,11 @@ require'nvim-tree'.setup {
|
||||
trash = {
|
||||
cmd = "trash",
|
||||
require_confirm = true
|
||||
},
|
||||
actions = {
|
||||
change_dir = {
|
||||
global = false,
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
@ -110,7 +115,6 @@ let g:nvim_tree_highlight_opened_files = 1 "0 by default, will enable folder and
|
||||
let g:nvim_tree_root_folder_modifier = ':~' "This is the default. See :help filename-modifiers for more options
|
||||
let g:nvim_tree_add_trailing = 1 "0 by default, append a trailing slash to folder names
|
||||
let g:nvim_tree_group_empty = 1 " 0 by default, compact folders that only contain a single folder into one node in the file tree
|
||||
let g:nvim_tree_change_dir_global = 1 "0 by default, use :cd when changing directories.
|
||||
let g:nvim_tree_disable_window_picker = 1 "0 by default, will disable the window picker.
|
||||
let g:nvim_tree_icon_padding = ' ' "one space by default, used for rendering the space between the icon and the filename. Use with caution, it could break rendering if you set an empty string depending on your font.
|
||||
let g:nvim_tree_symlink_arrow = ' >> ' " defaults to ' ➛ '. used as a separator between symlinks' source and target.
|
||||
|
||||
@ -126,6 +126,11 @@ function.
|
||||
trash = {
|
||||
cmd = "trash",
|
||||
require_confirm = true,
|
||||
},
|
||||
actions = {
|
||||
change_dir = {
|
||||
global = false,
|
||||
}
|
||||
}
|
||||
}
|
||||
<
|
||||
@ -354,6 +359,15 @@ Here is a list of the options available in the setup call:
|
||||
type: `boolean`
|
||||
default: `true`
|
||||
|
||||
*nvim-tree.actions*
|
||||
|actions|: configuration for various actions
|
||||
|
||||
- |actions.change_dir.global|: use `:cd` instead of `:lcd` when changing
|
||||
directories. Consider that this might cause issues with
|
||||
the |update_cwd| options.
|
||||
type: `boolean`
|
||||
default: `false`
|
||||
|
||||
==============================================================================
|
||||
OPTIONS *nvim-tree-options*
|
||||
|
||||
@ -485,10 +499,6 @@ default table is
|
||||
["readme.md"] = true,
|
||||
}
|
||||
|
||||
|g:nvim_tree_change_dir_global| *g:nvim_tree_change_dir_global*
|
||||
|
||||
Can be 0 or 1. When 1, use :cd instead of :lcd when changing directories.
|
||||
|
||||
|g:nvim_tree_disable_window_picker| *g:nvim_tree_disable_window_picker*
|
||||
|
||||
Can be 0 or 1. When 1, will disable the window picker. Files will open in the
|
||||
|
||||
@ -6,6 +6,7 @@ local colors = require'nvim-tree.colors'
|
||||
local renderer = require'nvim-tree.renderer'
|
||||
local view = require'nvim-tree.view'
|
||||
local utils = require'nvim-tree.utils'
|
||||
local ChangeDir = require'nvim-tree.actions.change-dir'
|
||||
|
||||
local _config = {}
|
||||
|
||||
@ -124,7 +125,7 @@ local function update_base_dir_with_filepath(filepath, bufnr)
|
||||
end
|
||||
|
||||
if not vim.startswith(filepath, lib.Tree.cwd or vim.loop.cwd()) then
|
||||
lib.change_dir(vim.fn.fnamemodify(filepath, ':p:h'))
|
||||
ChangeDir.fn(vim.fn.fnamemodify(filepath, ':p:h'))
|
||||
end
|
||||
end
|
||||
|
||||
@ -183,7 +184,7 @@ function M.open_on_directory()
|
||||
|
||||
view.close()
|
||||
if bufname ~= lib.Tree.cwd then
|
||||
lib.change_dir(bufname)
|
||||
ChangeDir.fn(bufname)
|
||||
end
|
||||
M.hijack_current_window()
|
||||
|
||||
@ -247,7 +248,7 @@ local function setup_vim_commands()
|
||||
end
|
||||
|
||||
function M.change_dir(name)
|
||||
lib.change_dir(name)
|
||||
ChangeDir.fn(name)
|
||||
|
||||
if _config.update_focused_file.enable then
|
||||
M.find_file(false)
|
||||
@ -326,6 +327,11 @@ local DEFAULT_OPTS = {
|
||||
enable = true,
|
||||
ignore = true,
|
||||
timeout = 400,
|
||||
},
|
||||
actions = {
|
||||
change_dir = {
|
||||
global = false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
37
lua/nvim-tree/actions/change-dir.lua
Normal file
37
lua/nvim-tree/actions/change-dir.lua
Normal file
@ -0,0 +1,37 @@
|
||||
local a = vim.api
|
||||
local lib = function() return require'nvim-tree.lib' end
|
||||
|
||||
local M = {
|
||||
current_tab = a.nvim_get_current_tabpage(),
|
||||
options = {
|
||||
global = false,
|
||||
}
|
||||
}
|
||||
|
||||
function M.fn(name)
|
||||
local foldername = name == '..' and vim.fn.fnamemodify(lib().Tree.cwd, ':h') or name
|
||||
local no_cwd_change = vim.fn.expand(foldername) == lib().Tree.cwd
|
||||
local new_tab = a.nvim_get_current_tabpage()
|
||||
local is_window = vim.v.event.scope == "window" and new_tab == M.current_tab
|
||||
if no_cwd_change or is_window then
|
||||
return
|
||||
end
|
||||
M.current_tab = new_tab
|
||||
|
||||
if M.options.global then
|
||||
vim.cmd('cd '..vim.fn.fnameescape(foldername))
|
||||
else
|
||||
vim.cmd('lcd '..vim.fn.fnameescape(foldername))
|
||||
end
|
||||
lib().init(false, foldername)
|
||||
end
|
||||
|
||||
function M.setup(options)
|
||||
if options.actions.change_dir.global ~= nil then
|
||||
M.options.global = options.actions.change_dir.global
|
||||
else
|
||||
M.options.global = vim.g.nvim_tree_change_dir_global == 1
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
19
lua/nvim-tree/actions/collapse-all.lua
Normal file
19
lua/nvim-tree/actions/collapse-all.lua
Normal file
@ -0,0 +1,19 @@
|
||||
local M = {}
|
||||
|
||||
function M.fn()
|
||||
local function iter(nodes)
|
||||
for _, node in pairs(nodes) do
|
||||
if node.open then
|
||||
node.open = false
|
||||
end
|
||||
if node.entries then
|
||||
iter(node.entries)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
iter(require'nvim-tree.lib'.Tree.entries)
|
||||
require'nvim-tree.lib'.redraw()
|
||||
end
|
||||
|
||||
return M
|
||||
13
lua/nvim-tree/actions/dir-up.lua
Normal file
13
lua/nvim-tree/actions/dir-up.lua
Normal file
@ -0,0 +1,13 @@
|
||||
local M = {}
|
||||
|
||||
function M.fn(node)
|
||||
if not node or node.name == ".." then
|
||||
return require'nvim-tree.actions.change-dir'.fn('..')
|
||||
else
|
||||
local newdir = vim.fn.fnamemodify(require'nvim-tree.lib'.Tree.cwd, ':h')
|
||||
require'nvim-tree.actions.change-dir'.fn(newdir)
|
||||
return require'nvim-tree.lib'.set_index_and_redraw(node.absolute_path)
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
@ -76,7 +76,7 @@ local keypress_funcs = {
|
||||
next_sibling = require'nvim-tree.actions.movements'.sibling(1),
|
||||
prev_git_item = go_to('prev_git_item'),
|
||||
next_git_item = go_to('next_git_item'),
|
||||
dir_up = lib.dir_up,
|
||||
dir_up = require'nvim-tree.actions.dir-up'.fn,
|
||||
close = function() require'nvim-tree'.close() end,
|
||||
preview = function(node)
|
||||
if node.name == '..' then
|
||||
@ -106,9 +106,9 @@ function M.on_keypress(action)
|
||||
end
|
||||
|
||||
if node.name == ".." then
|
||||
return lib.change_dir("..")
|
||||
return require'nvim-tree.actions.change-dir'.fn("..")
|
||||
elseif action == "cd" and node.entries ~= nil then
|
||||
return lib.change_dir(lib.get_last_group_node(node).absolute_path)
|
||||
return require'nvim-tree.actions.change-dir'.fn(lib.get_last_group_node(node).absolute_path)
|
||||
elseif action == "cd" then
|
||||
return
|
||||
end
|
||||
|
||||
@ -222,42 +222,6 @@ function M.set_index_and_redraw(fname)
|
||||
end
|
||||
end
|
||||
|
||||
function M.collapse_all()
|
||||
local function iter(nodes)
|
||||
for _, node in pairs(nodes) do
|
||||
if node.open then
|
||||
node.open = false
|
||||
end
|
||||
if node.entries then
|
||||
iter(node.entries)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
iter(M.Tree.entries)
|
||||
M.redraw()
|
||||
end
|
||||
|
||||
local current_tab = api.nvim_get_current_tabpage()
|
||||
|
||||
function M.change_dir(name)
|
||||
local foldername = name == '..' and vim.fn.fnamemodify(M.Tree.cwd, ':h') or name
|
||||
local no_cwd_change = vim.fn.expand(foldername) == M.Tree.cwd
|
||||
local new_tab = api.nvim_get_current_tabpage()
|
||||
local is_window = vim.v.event.scope == "window" and new_tab == current_tab
|
||||
if no_cwd_change or is_window then
|
||||
return
|
||||
end
|
||||
current_tab = new_tab
|
||||
|
||||
if vim.g.nvim_tree_change_dir_global == 1 then
|
||||
vim.cmd('cd '..vim.fn.fnameescape(foldername))
|
||||
else
|
||||
vim.cmd('lcd '..vim.fn.fnameescape(foldername))
|
||||
end
|
||||
M.init(false, foldername)
|
||||
end
|
||||
|
||||
function M.set_target_win()
|
||||
local id = api.nvim_get_current_win()
|
||||
local tree_id = view.get_winnr()
|
||||
@ -277,7 +241,7 @@ function M.open()
|
||||
|
||||
local respect_buf_cwd = vim.g.nvim_tree_respect_buf_cwd or 0
|
||||
if respect_buf_cwd == 1 and cwd ~= M.Tree.cwd then
|
||||
M.change_dir(cwd)
|
||||
require'nvim-tree.actions.change-dir'.fn(cwd)
|
||||
end
|
||||
if should_redraw then
|
||||
M.redraw()
|
||||
@ -303,14 +267,11 @@ function M.toggle_help()
|
||||
return M.redraw()
|
||||
end
|
||||
|
||||
function M.dir_up(node)
|
||||
if not node or node.name == ".." then
|
||||
return M.change_dir('..')
|
||||
else
|
||||
local newdir = vim.fn.fnamemodify(M.Tree.cwd, ':h')
|
||||
M.change_dir(newdir)
|
||||
return M.set_index_and_redraw(node.absolute_path)
|
||||
end
|
||||
end
|
||||
-- @deprecated: use nvim-tree.actions.collapse-all.fn
|
||||
M.collapse_all = require'nvim-tree.actions.collapse-all'.fn
|
||||
-- @deprecated: use nvim-tree.actions.dir-up.fn
|
||||
M.dir_up = require'nvim-tree.actions.dir-up'.fn
|
||||
-- @deprecated: use nvim-tree.actions.change-dir.fn
|
||||
M.change_dir = require'nvim-tree.actions.change-dir'.fn
|
||||
|
||||
return M
|
||||
|
||||
Loading…
Reference in New Issue
Block a user