nvim-tree.lua/lua/nvim-tree/marks/init.lua
Alexander Courtis 4e396b2624
refactor(#2830): multi instance nvim-tree.marks (#2838)
refactor(#2380): multi instance nvim-tree.marks
2024-07-21 16:12:42 +10:00

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