79 lines
1.3 KiB
Lua
79 lines
1.3 KiB
Lua
local renderer = {} -- circular dependency
|
|
|
|
---@class Marks
|
|
---@field private marks Node[]
|
|
local Marks = {}
|
|
|
|
---@return Marks
|
|
function Marks:new()
|
|
local o = {}
|
|
setmetatable(o, self)
|
|
self.__index = self
|
|
|
|
o.marks = {}
|
|
|
|
return o
|
|
end
|
|
|
|
---@private
|
|
---@param node Node
|
|
function Marks:add_mark(node)
|
|
self.marks[node.absolute_path] = node
|
|
|
|
renderer.draw()
|
|
end
|
|
|
|
---@private
|
|
---@param node Node
|
|
function Marks:remove_mark(node)
|
|
self.marks[node.absolute_path] = nil
|
|
|
|
renderer.draw()
|
|
end
|
|
|
|
---@param node Node
|
|
function Marks:toggle_mark(node)
|
|
if node.absolute_path == nil then
|
|
return
|
|
end
|
|
|
|
if self:get_mark(node) then
|
|
self:remove_mark(node)
|
|
else
|
|
self:add_mark(node)
|
|
end
|
|
|
|
renderer.draw()
|
|
end
|
|
|
|
function Marks:clear_marks()
|
|
self.marks = {}
|
|
|
|
renderer.draw()
|
|
end
|
|
|
|
---@param node Node
|
|
---@return Node|nil
|
|
function Marks:get_mark(node)
|
|
return node and self.marks[node.absolute_path]
|
|
end
|
|
|
|
---@return Node[]
|
|
function Marks:get_marks()
|
|
local list = {}
|
|
for _, node in pairs(self.marks) do
|
|
table.insert(list, node)
|
|
end
|
|
return list
|
|
end
|
|
|
|
function Marks.setup(opts)
|
|
renderer = require "nvim-tree.renderer"
|
|
|
|
require("nvim-tree.marks.bulk-delete").setup(opts)
|
|
require("nvim-tree.marks.bulk-trash").setup(opts)
|
|
require("nvim-tree.marks.bulk-move").setup(opts)
|
|
end
|
|
|
|
return Marks
|