Skip to content

Commit 345cc4c

Browse files
committed
feat(api): add public API module
1 parent 06e48c2 commit 345cc4c

File tree

2 files changed

+131
-20
lines changed

2 files changed

+131
-20
lines changed

lua/nvim-tree/api.lua

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
local Api = {
2+
tree = {},
3+
node = { navigate = { sibling = {}, git = {}, diagnostics = {} }, run = {}, open = {} },
4+
events = {},
5+
marks = { bulk = {}, navigate = {} },
6+
fs = { copy = {} },
7+
git = {},
8+
live_filter = {},
9+
}
10+
11+
local function inject_node(f)
12+
return function(node)
13+
node = node or require("nvim-tree.lib").get_node_at_cursor()
14+
f(node)
15+
end
16+
end
17+
18+
Api.tree.open = require("nvim-tree").open
19+
Api.tree.toggle = require("nvim-tree").toggle
20+
Api.tree.close = require("nvim-tree.view").close
21+
Api.tree.focus = require("nvim-tree").focus
22+
Api.tree.reload = require("nvim-tree.actions.reloaders.reloaders").reload_explorer
23+
Api.tree.change_root = require("nvim-tree").change_dir
24+
Api.tree.root_to_parent = inject_node(require("nvim-tree.actions.root.dir-up").fn)
25+
Api.tree.get_node_under_cursor = require("nvim-tree.lib").get_node_at_cursor
26+
Api.tree.find_file = require("nvim-tree.actions.finders.find-file").fn
27+
Api.tree.search_node = require("nvim-tree.actions.finders.search-node").fn
28+
Api.tree.collapse_all = require("nvim-tree.actions.tree-modifiers.collapse-all").fn
29+
Api.tree.expand_all = inject_node(require("nvim-tree.actions.tree-modifiers.expand-all").fn)
30+
Api.tree.toggle_gitignore_filter = require("nvim-tree.actions.tree-modifiers.toggles").git_ignored
31+
Api.tree.toggle_custom_filter = require("nvim-tree.actions.tree-modifiers.toggles").custom
32+
Api.tree.toggle_hidden_filter = require("nvim-tree.actions.tree-modifiers.toggles").dotfiles
33+
Api.tree.toggle_help = require("nvim-tree.actions.tree-modifiers.toggles").help
34+
35+
Api.fs.create = inject_node(require("nvim-tree.actions.fs.create-file").fn)
36+
Api.fs.remove = inject_node(require("nvim-tree.actions.fs.remove-file").fn)
37+
Api.fs.trash = inject_node(require("nvim-tree.actions.fs.trash").fn)
38+
Api.fs.rename = inject_node(require("nvim-tree.actions.fs.rename-file").fn(false))
39+
Api.fs.rename_sub = inject_node(require("nvim-tree.actions.fs.rename-file").fn(true))
40+
Api.fs.copy = inject_node(require("nvim-tree.actions.fs.copy-paste").copy)
41+
Api.fs.cut = inject_node(require("nvim-tree.actions.fs.copy-paste").cut)
42+
Api.fs.paste = inject_node(require("nvim-tree.actions.fs.copy-paste").paste)
43+
Api.fs.print_clipboard = require("nvim-tree.actions.fs.copy-paste").print_clipboard
44+
Api.fs.copy.absolute_path = inject_node(require("nvim-tree.actions.fs.copy-paste").copy_absolute_path)
45+
Api.fs.copy.filename = inject_node(require("nvim-tree.actions.fs.copy-paste").copy_filename)
46+
Api.fs.copy.relative_path = inject_node(require("nvim-tree.actions.fs.copy-paste").copy_path)
47+
48+
local function edit(mode, node)
49+
local path = node.absolute_path
50+
if node.link_to and not node.nodes then
51+
path = node.link_to
52+
end
53+
require("nvim-tree.actions.node.open-file").fn(mode, path)
54+
end
55+
56+
local function open_or_expand_or_dir_up(mode)
57+
return function(node)
58+
if node.name == ".." then
59+
require("nvim-tree.actions.root.change-dir").fn ".."
60+
elseif node.nodes then
61+
require("nvim-tree.lib").expand_or_collapse(node)
62+
else
63+
edit(mode, node)
64+
end
65+
end
66+
end
67+
68+
local function open_preview(node)
69+
if node.nodes or node.name == ".." then
70+
return
71+
end
72+
73+
edit("preview", node)
74+
end
75+
76+
Api.node.open.edit = inject_node(open_or_expand_or_dir_up "edit")
77+
Api.node.open.vertical = inject_node(open_or_expand_or_dir_up "vsplit")
78+
Api.node.open.horizontal = inject_node(open_or_expand_or_dir_up "split")
79+
Api.node.open.tab = inject_node(open_or_expand_or_dir_up "tabnew")
80+
Api.node.open.preview = inject_node(open_preview)
81+
82+
Api.node.show_info_popup = inject_node(require("nvim-tree.actions.node.file-popup").toggle_file_info)
83+
Api.node.run.cmd = inject_node(require("nvim-tree.actions.node.run-command").run_file_command)
84+
Api.node.run.system = inject_node(require("nvim-tree.actions.node.system-open").fn)
85+
Api.node.navigate.sibling.next = inject_node(require("nvim-tree.actions.moves.sibling").fn "next")
86+
Api.node.navigate.sibling.prev = inject_node(require("nvim-tree.actions.moves.sibling").fn "prev")
87+
Api.node.navigate.sibling.first = inject_node(require("nvim-tree.actions.moves.sibling").fn "first")
88+
Api.node.navigate.sibling.last = inject_node(require("nvim-tree.actions.moves.sibling").fn "last")
89+
Api.node.navigate.parent = inject_node(require("nvim-tree.actions.moves.parent").fn(false))
90+
Api.node.navigate.parent_close = inject_node(require("nvim-tree.actions.moves.parent").fn(true))
91+
Api.node.navigate.git.next = inject_node(require("nvim-tree.actions.moves.item").fn("next", "git"))
92+
Api.node.navigate.git.prev = inject_node(require("nvim-tree.actions.moves.item").fn("prev", "git"))
93+
Api.node.navigate.diagnostics.next = inject_node(require("nvim-tree.actions.moves.item").fn("next", "diag"))
94+
Api.node.navigate.diagnostics.prev = inject_node(require("nvim-tree.actions.moves.item").fn("prev", "diag"))
95+
96+
Api.git.reload = require("nvim-tree.actions.reloaders.reloaders").reload_git
97+
98+
Api.events.subscribe = require("nvim-tree.events").subscribe
99+
100+
Api.live_filter.start = require("nvim-tree.live-filter").start_filtering
101+
Api.live_filter.clear = require("nvim-tree.live-filter").clear_filter
102+
103+
Api.marks.get = inject_node(require("nvim-tree.marks").get_mark)
104+
Api.marks.list = require("nvim-tree.marks").get_marks
105+
Api.marks.toggle = inject_node(require("nvim-tree.marks").toggle_mark)
106+
Api.marks.bulk.move = require("nvim-tree.marks.bulk-move").bulk_move
107+
Api.marks.navigate.next = require("nvim-tree.marks.navigation").next
108+
Api.marks.navigate.prev = require("nvim-tree.marks.navigation").prev
109+
Api.marks.navigate.select = require("nvim-tree.marks.navigation").select
110+
111+
return Api

lua/nvim-tree/events.lua

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ local M = {}
22

33
local global_handlers = {}
44

5-
local Event = {
5+
M.Event = {
66
Ready = "Ready",
77
NodeRenamed = "NodeRenamed",
88
TreeOpen = "TreeOpen",
@@ -18,7 +18,7 @@ local function get_handlers(event_name)
1818
return global_handlers[event_name] or {}
1919
end
2020

21-
local function register_handler(event_name, handler)
21+
function M.subscribe(event_name, handler)
2222
local handlers = get_handlers(event_name)
2323
table.insert(handlers, handler)
2424
global_handlers[event_name] = handlers
@@ -35,107 +35,107 @@ end
3535

3636
--@private
3737
function M._dispatch_ready()
38-
dispatch(Event.Ready)
38+
dispatch(M.Event.Ready)
3939
end
4040

4141
--@private
4242
function M._dispatch_node_renamed(old_name, new_name)
43-
dispatch(Event.NodeRenamed, { old_name = old_name, new_name = new_name })
43+
dispatch(M.Event.NodeRenamed, { old_name = old_name, new_name = new_name })
4444
end
4545

4646
--@private
4747
function M._dispatch_file_removed(fname)
48-
dispatch(Event.FileRemoved, { fname = fname })
48+
dispatch(M.Event.FileRemoved, { fname = fname })
4949
end
5050

5151
--@private
5252
function M._dispatch_file_created(fname)
53-
dispatch(Event.FileCreated, { fname = fname })
53+
dispatch(M.Event.FileCreated, { fname = fname })
5454
end
5555

5656
--@private
5757
function M._dispatch_folder_created(folder_name)
58-
dispatch(Event.FolderCreated, { folder_name = folder_name })
58+
dispatch(M.Event.FolderCreated, { folder_name = folder_name })
5959
end
6060

6161
--@private
6262
function M._dispatch_folder_removed(folder_name)
63-
dispatch(Event.FolderRemoved, { folder_name = folder_name })
63+
dispatch(M.Event.FolderRemoved, { folder_name = folder_name })
6464
end
6565

6666
--@private
6767
function M._dispatch_on_tree_open()
68-
dispatch(Event.TreeOpen, nil)
68+
dispatch(M.Event.TreeOpen, nil)
6969
end
7070

7171
--@private
7272
function M._dispatch_on_tree_close()
73-
dispatch(Event.TreeClose, nil)
73+
dispatch(M.Event.TreeClose, nil)
7474
end
7575

7676
--@private
7777
function M._dispatch_on_tree_resize(size)
78-
dispatch(Event.Resize, size)
78+
dispatch(M.Event.Resize, size)
7979
end
8080

8181
--Registers a handler for the Ready event.
8282
--@param handler (function) Handler with the signature `function()`
8383
function M.on_nvim_tree_ready(handler)
84-
register_handler(Event.Ready, handler)
84+
M.subscribe(M.Event.Ready, handler)
8585
end
8686

8787
--Registers a handler for the NodeRenamed event.
8888
--@param handler (function) Handler with the signature function(payload), where payload is a table containing:
8989
-- - old_name (string) Absolute path to the old node location.
9090
-- - new_name (string) Absolute path to the new node location.
9191
function M.on_node_renamed(handler)
92-
register_handler(Event.NodeRenamed, handler)
92+
M.subscribe(M.Event.NodeRenamed, handler)
9393
end
9494

9595
--Registers a handler for the FileCreated event.
9696
--@param handler (function) Handler with the signature function(payload), where payload is a table containing:
9797
-- - fname (string) Absolute path to the created file.
9898
function M.on_file_created(handler)
99-
register_handler(Event.FileCreated, handler)
99+
M.subscribe(M.Event.FileCreated, handler)
100100
end
101101

102102
--Registers a handler for the FileRemoved event.
103103
--@param handler (function) Handler with the signature function(payload), where payload is a table containing:
104104
-- - fname (string) Absolute path to the removed file.
105105
function M.on_file_removed(handler)
106-
register_handler(Event.FileRemoved, handler)
106+
M.subscribe(M.Event.FileRemoved, handler)
107107
end
108108

109109
--Registers a handler for the FolderCreated event.
110110
--@param handler (function) Handler with the signature function(payload), where payload is a table containing:
111111
-- - folder_name (string) Absolute path to the created folder.
112112
function M.on_folder_created(handler)
113-
register_handler(Event.FolderCreated, handler)
113+
M.subscribe(M.Event.FolderCreated, handler)
114114
end
115115

116116
--Registers a handler for the FolderRemoved event.
117117
--@param handler (function) Handler with the signature function(payload), where payload is a table containing:
118118
-- - folder_name (string) Absolute path to the removed folder.
119119
function M.on_folder_removed(handler)
120-
register_handler(Event.FolderRemoved, handler)
120+
M.subscribe(M.Event.FolderRemoved, handler)
121121
end
122122

123123
--Registers a handler for the TreeOpen event.
124124
--@param handler (function) Handler with the signature function(payload)
125125
function M.on_tree_open(handler)
126-
register_handler(Event.TreeOpen, handler)
126+
M.subscribe(M.Event.TreeOpen, handler)
127127
end
128128

129129
--Registers a handler for the TreeClose event.
130130
--@param handler (function) Handler with the signature function(payload)
131131
function M.on_tree_close(handler)
132-
register_handler(Event.TreeClose, handler)
132+
M.subscribe(M.Event.TreeClose, handler)
133133
end
134134

135135
--Registers a handler for the Resize event.
136136
--@param handler (function) Handler with the signature function(size)
137137
function M.on_tree_resize(handler)
138-
register_handler(Event.Resize, handler)
138+
M.subscribe(M.Event.Resize, handler)
139139
end
140140

141141
return M

0 commit comments

Comments
 (0)