129 lines
4.4 KiB
Lua
129 lines
4.4 KiB
Lua
local view = require "nvim-tree.view"
|
|
local lib = require "nvim-tree.lib"
|
|
|
|
local M = {}
|
|
|
|
local Actions = {
|
|
close = view.close,
|
|
|
|
-- Tree modifiers
|
|
collapse_all = require("nvim-tree.actions.tree-modifiers.collapse-all").fn,
|
|
expand_all = require("nvim-tree.actions.tree-modifiers.expand-all").fn,
|
|
toggle_dotfiles = require("nvim-tree.actions.tree-modifiers.toggles").dotfiles,
|
|
toggle_custom = require("nvim-tree.actions.tree-modifiers.toggles").custom,
|
|
toggle_git_ignored = require("nvim-tree.actions.tree-modifiers.toggles").git_ignored,
|
|
|
|
-- Filesystem operations
|
|
copy_absolute_path = require("nvim-tree.actions.fs.copy-paste").copy_absolute_path,
|
|
copy_name = require("nvim-tree.actions.fs.copy-paste").copy_filename,
|
|
copy_path = require("nvim-tree.actions.fs.copy-paste").copy_path,
|
|
copy = require("nvim-tree.actions.fs.copy-paste").copy,
|
|
create = require("nvim-tree.actions.fs.create-file").fn,
|
|
cut = require("nvim-tree.actions.fs.copy-paste").cut,
|
|
full_rename = require("nvim-tree.actions.fs.rename-file").fn(true),
|
|
paste = require("nvim-tree.actions.fs.copy-paste").paste,
|
|
trash = require("nvim-tree.actions.fs.trash").fn,
|
|
remove = require("nvim-tree.actions.fs.remove-file").fn,
|
|
rename = require("nvim-tree.actions.fs.rename-file").fn(false),
|
|
|
|
-- Movements in tree
|
|
close_node = require("nvim-tree.actions.moves.parent").fn(true),
|
|
first_sibling = require("nvim-tree.actions.moves.sibling").fn "first",
|
|
last_sibling = require("nvim-tree.actions.moves.sibling").fn "last",
|
|
next_diag_item = require("nvim-tree.actions.moves.item").fn("next", "diag"),
|
|
next_git_item = require("nvim-tree.actions.moves.item").fn("next", "git"),
|
|
next_sibling = require("nvim-tree.actions.moves.sibling").fn "next",
|
|
parent_node = require("nvim-tree.actions.moves.parent").fn(false),
|
|
prev_diag_item = require("nvim-tree.actions.moves.item").fn("prev", "diag"),
|
|
prev_git_item = require("nvim-tree.actions.moves.item").fn("prev", "git"),
|
|
prev_sibling = require("nvim-tree.actions.moves.sibling").fn "prev",
|
|
|
|
-- Other types
|
|
refresh = require("nvim-tree.actions.reloaders.reloaders").reload_explorer,
|
|
dir_up = require("nvim-tree.actions.root.dir-up").fn,
|
|
search_node = require("nvim-tree.actions.finders.search-node").fn,
|
|
run_file_command = require("nvim-tree.actions.node.run-command").run_file_command,
|
|
toggle_file_info = require("nvim-tree.actions.node.file-popup").toggle_file_info,
|
|
system_open = require("nvim-tree.actions.node.system-open").fn,
|
|
toggle_mark = require("nvim-tree.marks").toggle_mark,
|
|
bulk_move = require("nvim-tree.marks.bulk-move").bulk_move,
|
|
}
|
|
|
|
local function handle_action_on_help_ui(action)
|
|
if action == "close" or action == "toggle_help" then
|
|
require("nvim-tree.actions.tree-modifiers.toggles").help()
|
|
end
|
|
end
|
|
|
|
local function handle_filter_actions(action)
|
|
if action == "live_filter" then
|
|
require("nvim-tree.live-filter").start_filtering()
|
|
elseif action == "clear_live_filter" then
|
|
require("nvim-tree.live-filter").clear_filter()
|
|
end
|
|
end
|
|
|
|
local function change_dir_action(node)
|
|
if node.name == ".." then
|
|
require("nvim-tree.actions.root.change-dir").fn ".."
|
|
elseif node.nodes ~= nil then
|
|
require("nvim-tree.actions.root.change-dir").fn(lib.get_last_group_node(node).absolute_path)
|
|
end
|
|
end
|
|
|
|
local function open_file(action, node)
|
|
local path = node.absolute_path
|
|
if node.link_to and not node.nodes then
|
|
path = node.link_to
|
|
end
|
|
require("nvim-tree.actions.node.open-file").fn(action, path)
|
|
end
|
|
|
|
local function handle_tree_actions(action)
|
|
local node = lib.get_node_at_cursor()
|
|
if not node then
|
|
return
|
|
end
|
|
|
|
local custom_function = M.custom_keypress_funcs[action]
|
|
local defined_action = Actions[action]
|
|
|
|
if type(custom_function) == "function" then
|
|
return custom_function(node)
|
|
elseif defined_action then
|
|
return defined_action(node)
|
|
end
|
|
|
|
local is_parent = node.name == ".."
|
|
|
|
if action == "preview" and is_parent then
|
|
return
|
|
end
|
|
|
|
if action == "cd" or is_parent then
|
|
return change_dir_action(node)
|
|
end
|
|
|
|
if node.nodes then
|
|
lib.expand_or_collapse(node)
|
|
else
|
|
open_file(action, node)
|
|
end
|
|
end
|
|
|
|
function M.dispatch(action)
|
|
if view.is_help_ui() or action == "toggle_help" then
|
|
handle_action_on_help_ui(action)
|
|
elseif action == "live_filter" or action == "clear_live_filter" then
|
|
handle_filter_actions(action)
|
|
else
|
|
handle_tree_actions(action)
|
|
end
|
|
end
|
|
|
|
function M.setup(custom_keypress_funcs)
|
|
M.custom_keypress_funcs = custom_keypress_funcs
|
|
end
|
|
|
|
return M
|