refactor(#2380): multi instance nvim-tree.marks
This commit is contained in:
committed by
GitHub
parent
48a9290757
commit
4e396b2624
@@ -1,63 +1,73 @@
|
||||
local renderer = {} -- circular dependency
|
||||
|
||||
local NvimTreeMarks = {}
|
||||
---@class Marks
|
||||
---@field private marks Node[]
|
||||
local Marks = {}
|
||||
|
||||
local M = {}
|
||||
---@return Marks
|
||||
function Marks:new()
|
||||
local o = {}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
|
||||
---@class MinimalNode
|
||||
---@field absolute_path string
|
||||
o.marks = {}
|
||||
|
||||
---@param node Node|MinimalNode
|
||||
local function add_mark(node)
|
||||
NvimTreeMarks[node.absolute_path] = node
|
||||
return o
|
||||
end
|
||||
|
||||
---@private
|
||||
---@param node Node
|
||||
function Marks:add_mark(node)
|
||||
self.marks[node.absolute_path] = node
|
||||
|
||||
renderer.draw()
|
||||
end
|
||||
|
||||
---@param node Node|MinimalNode
|
||||
local function remove_mark(node)
|
||||
NvimTreeMarks[node.absolute_path] = nil
|
||||
---@private
|
||||
---@param node Node
|
||||
function Marks:remove_mark(node)
|
||||
self.marks[node.absolute_path] = nil
|
||||
|
||||
renderer.draw()
|
||||
end
|
||||
|
||||
---@param node Node|MinimalNode
|
||||
function M.toggle_mark(node)
|
||||
---@param node Node
|
||||
function Marks:toggle_mark(node)
|
||||
if node.absolute_path == nil then
|
||||
return
|
||||
end
|
||||
|
||||
if M.get_mark(node) then
|
||||
remove_mark(node)
|
||||
if self:get_mark(node) then
|
||||
self:remove_mark(node)
|
||||
else
|
||||
add_mark(node)
|
||||
self:add_mark(node)
|
||||
end
|
||||
|
||||
renderer.draw()
|
||||
end
|
||||
|
||||
function M.clear_marks()
|
||||
NvimTreeMarks = {}
|
||||
function Marks:clear_marks()
|
||||
self.marks = {}
|
||||
|
||||
renderer.draw()
|
||||
end
|
||||
|
||||
---@param node Node|MinimalNode
|
||||
---@return table|nil
|
||||
function M.get_mark(node)
|
||||
return node and NvimTreeMarks[node.absolute_path]
|
||||
---@param node Node
|
||||
---@return Node|nil
|
||||
function Marks:get_mark(node)
|
||||
return node and self.marks[node.absolute_path]
|
||||
end
|
||||
|
||||
---@return table
|
||||
function M.get_marks()
|
||||
---@return Node[]
|
||||
function Marks:get_marks()
|
||||
local list = {}
|
||||
for _, node in pairs(NvimTreeMarks) do
|
||||
for _, node in pairs(self.marks) do
|
||||
table.insert(list, node)
|
||||
end
|
||||
return list
|
||||
end
|
||||
|
||||
function M.setup(opts)
|
||||
function Marks.setup(opts)
|
||||
renderer = require "nvim-tree.renderer"
|
||||
|
||||
require("nvim-tree.marks.bulk-delete").setup(opts)
|
||||
@@ -65,4 +75,4 @@ function M.setup(opts)
|
||||
require("nvim-tree.marks.bulk-move").setup(opts)
|
||||
end
|
||||
|
||||
return M
|
||||
return Marks
|
||||
|
||||
Reference in New Issue
Block a user