feat(neotree): improved tree view

This commit is contained in:
əlemi 2024-09-07 04:01:48 +02:00
parent 1732f94add
commit 5c3f7dc85e
Signed by: alemi
GPG key ID: A4895B84D311642C
4 changed files with 39 additions and 20 deletions

View file

@ -1,6 +1,5 @@
local renderer = require("neo-tree.ui.renderer") local renderer = require("neo-tree.ui.renderer")
local codemp = require("codemp.session") local codemp = require("codemp.session")
local cc = require("neo-tree.sources.common.commands")
local buf_manager = require("codemp.buffers") local buf_manager = require("codemp.buffers")
local M = {} local M = {}
@ -87,28 +86,43 @@ end
M.update_state = function(state) M.update_state = function(state)
---@type Item[] ---@type Item[]
local root = {} local root = {
{
id = "codemp",
name = "codemp",
type = "title",
extra = {},
}
}
if codemp.workspace ~= nil then if codemp.workspace ~= nil then
root = { table.insert(root, spacer())
new_root(codemp.client.username .. "@" .. codemp.workspace.name), local ws_section = new_root("session #" .. codemp.workspace.name)
spacer(),
new_root("users"),
spacer(),
}
for i, path in ipairs(codemp.workspace:filetree()) do for i, path in ipairs(codemp.workspace:filetree()) do
table.insert(root[1].children, new_item(codemp.workspace.name, path)) table.insert(ws_section.children, new_item(codemp.workspace.name, path))
end end
local usr_section = new_root("users")
for user, buffer in pairs(buf_manager.users) do for user, buffer in pairs(buf_manager.users) do
table.insert(root[3].children, new_user(codemp.workspace.name, user)) table.insert(usr_section.children, new_user(codemp.workspace.name, user))
end end
elseif codemp.client ~= nil then if #buf_manager.users > 0 then
root = { new_root(codemp.client.username .. "@codemp") } table.insert(ws_section.children, spacer())
table.insert(ws_section.children, usr_section)
end
table.insert(root, ws_section)
end
if codemp.client ~= nil then
table.insert(root, spacer())
local ws_section = new_root("workspaces")
for _, ws in ipairs(codemp.available) do for _, ws in ipairs(codemp.available) do
table.insert(root[1].children, new_workspace(ws.name, ws.owned)) table.insert(ws_section.children, new_workspace(ws.name, ws.owned))
end end
table.insert(root, ws_section)
else else
root = { new_root("codemp") } table.insert(root, spacer())
table.insert(root, new_root("[connect]"))
end end
renderer.show_nodes(root, state) renderer.show_nodes(root, state)

View file

@ -14,9 +14,7 @@ M.open = function(state, path, extra)
local selected = state.tree:get_node() local selected = state.tree:get_node()
if selected.type == "spacer" then return end if selected.type == "spacer" then return end
if selected.type == "root" then if selected.type == "root" then
if session.client ~= nil then if selected.name == "[connect]" and session.client ~= nil then
print(" +-+ connected to codemp as " .. session.client.username)
else
client_manager.connect() client_manager.connect()
end end
return return

View file

@ -30,7 +30,7 @@ M.icon = function(config, node, state)
icon = "= " icon = "= "
highlight = highlights.DIRECTORY_ICON highlight = highlights.DIRECTORY_ICON
elseif node.type == "root" then elseif node.type == "root" then
icon = "]| " icon = "> "
highlight = highlights.DIRECTORY_ICON highlight = highlights.DIRECTORY_ICON
elseif node.type == "workspace" then elseif node.type == "workspace" then
icon = "= " icon = "= "
@ -48,13 +48,17 @@ end
M.name = function(config, node, state) M.name = function(config, node, state)
local highlight = config.highlight or highlights.FILE_NAME local highlight = config.highlight or highlights.FILE_NAME
if node.type == "root" then local text = node.name
if node.type == "tutle" then
text = ":: " .. node.name .. " ::"
highlight = highlights.PREVIEW
elseif node.type == "root" then
highlight = highlights.FLOAT_TITLE highlight = highlights.FLOAT_TITLE
elseif node.type == "workspace" then elseif node.type == "workspace" then
highlight = highlights.SYMBOLIC_LINK_TARGET highlight = highlights.SYMBOLIC_LINK_TARGET
end end
return { return {
text = node.name, text = text,
highlight = highlight, highlight = highlight,
} }
end end

View file

@ -15,6 +15,9 @@ end
M.default_config = { M.default_config = {
renderers = { renderers = {
title = {
{ "name" },
},
spacer = { spacer = {
{ "indent" }, { "indent" },
}, },