11local lib = require " nvim-tree.lib"
2+ local core = require " nvim-tree.core"
23local view = require " nvim-tree.view"
34local utils = require " nvim-tree.utils"
45local actions = require " nvim-tree.actions"
56local appearance_diagnostics = require " nvim-tree.appearance.diagnostics"
67local events = require " nvim-tree.events"
78local help = require " nvim-tree.help"
89local live_filter = require " nvim-tree.live-filter"
9- local marks = require " nvim-tree.marks"
1010local marks_navigation = require " nvim-tree.marks.navigation"
1111local marks_bulk_delete = require " nvim-tree.marks.bulk-delete"
1212local marks_bulk_trash = require " nvim-tree.marks.bulk-trash"
@@ -43,9 +43,10 @@ local Api = {
4343 diagnostics = {},
4444}
4545
46- --- Do nothing when setup not called.
46+ --- Print error when setup not called.
4747--- f function to invoke
4848--- @param f function
49+ --- @return fun ( ... ) : any
4950local function wrap (f )
5051 return function (...)
5152 if vim .g .NvimTreeSetup == 1 then
@@ -56,13 +57,13 @@ local function wrap(f)
5657 end
5758end
5859
59- --- Inject the node as the first argument if absent .
60+ --- Inject the node as the first argument if present otherwise do nothing .
6061--- @param fn function function to invoke
6162local function wrap_node (fn )
6263 return function (node , ...)
6364 node = node or lib .get_node_at_cursor ()
6465 if node then
65- fn (node , ... )
66+ return fn (node , ... )
6667 end
6768 end
6869end
7273local function wrap_node_or_nil (fn )
7374 return function (node , ...)
7475 node = node or lib .get_node_at_cursor ()
75- fn (node , ... )
76+ return fn (node , ... )
7677 end
7778end
7879
80+ --- Inject the explorer as the first argument if present otherwise do nothing.
81+ --- @param fn function function to invoke
82+ --- @return fun ( ... ) : any
83+ local function wrap_explorer (fn )
84+ return function (...)
85+ local explorer = core .get_explorer ()
86+ if explorer then
87+ return fn (explorer , ... )
88+ end
89+ end
90+ end
91+
92+ --- Invoke a member's method on the singleton explorer.
93+ --- Print error when setup not called.
94+ --- @param explorer_member string explorer member name
95+ --- @param member_method string method name to invoke on member
96+ --- @return fun ( ... ) : any
97+ local function wrap_explorer_member (explorer_member , member_method )
98+ return wrap (function (...)
99+ local explorer = core .get_explorer ()
100+ if explorer then
101+ return explorer [explorer_member ][member_method ](explorer [explorer_member ], ... )
102+ end
103+ end )
104+ end
105+
79106--- @class ApiTreeOpenOpts
80107--- @field path string | nil path
81108--- @field current_window boolean | nil default false
@@ -241,13 +268,13 @@ Api.events.Event = events.Event
241268Api .live_filter .start = wrap (live_filter .start_filtering )
242269Api .live_filter .clear = wrap (live_filter .clear_filter )
243270
244- Api .marks .get = wrap_node (marks . get_mark )
245- Api .marks .list = wrap ( marks . get_marks )
246- Api .marks .toggle = wrap_node (marks . toggle_mark )
247- Api .marks .clear = wrap ( marks . clear_marks )
248- Api .marks .bulk .delete = wrap (marks_bulk_delete .bulk_delete )
249- Api .marks .bulk .trash = wrap (marks_bulk_trash .bulk_trash )
250- Api .marks .bulk .move = wrap (marks_bulk_move .bulk_move )
271+ Api .marks .get = wrap_node (wrap_explorer_member ( " marks" , " get_mark" ) )
272+ Api .marks .list = wrap_explorer_member ( " marks" , " get_marks" )
273+ Api .marks .toggle = wrap_node (wrap_explorer_member ( " marks" , " toggle_mark" ) )
274+ Api .marks .clear = wrap_explorer_member ( " marks" , " clear_marks" )
275+ Api .marks .bulk .delete = wrap_explorer (marks_bulk_delete .bulk_delete )
276+ Api .marks .bulk .trash = wrap_explorer (marks_bulk_trash .bulk_trash )
277+ Api .marks .bulk .move = wrap_explorer (marks_bulk_move .bulk_move )
251278Api .marks .navigate .next = wrap (marks_navigation .next )
252279Api .marks .navigate .prev = wrap (marks_navigation .prev )
253280Api .marks .navigate .select = wrap (marks_navigation .select )
0 commit comments