87 lines
2.2 KiB
Lua
87 lines
2.2 KiB
Lua
local M = {}
|
|
|
|
function M.name(config, node, state)
|
|
local common = require "neo-tree.sources.common.components"
|
|
local highlights = require "neo-tree.ui.highlights"
|
|
|
|
local highlight = config.highlight or highlights.FILE_NAME
|
|
local text = node.name
|
|
if node.type == "directory" then
|
|
highlight = highlights.DIRECTORY_NAME
|
|
if config.trailing_slash and text ~= "/" then
|
|
text = text .. "/"
|
|
end
|
|
end
|
|
|
|
if node:get_depth() == 1 and node.type ~= "message" then
|
|
highlight = highlights.ROOT_NAME
|
|
text = vim.fn.fnamemodify(text, ":p:h:t")
|
|
text = string.upper(text)
|
|
else
|
|
local filtered_by = common.filtered_by(config, node, state)
|
|
highlight = filtered_by.highlight or highlight
|
|
if config.use_git_status_colors then
|
|
local git_status = state.components.git_status({}, node, state)
|
|
if git_status and git_status.highlight then
|
|
highlight = git_status.highlight
|
|
end
|
|
end
|
|
end
|
|
|
|
if type(config.right_padding) == "number" then
|
|
if config.right_padding > 0 then
|
|
text = text .. string.rep(" ", config.right_padding)
|
|
end
|
|
else
|
|
text = text .. " "
|
|
end
|
|
|
|
return {
|
|
text = text,
|
|
highlight = highlight,
|
|
}
|
|
end
|
|
|
|
function M.icon(config, node, state)
|
|
local common = require "neo-tree.sources.common.components"
|
|
local highlights = require "neo-tree.ui.highlights"
|
|
|
|
local icon = config.default or " "
|
|
local highlight = config.highlight or highlights.FILE_ICON
|
|
if node.type == "directory" then
|
|
highlight = highlights.DIRECTORY_ICON
|
|
if node.loaded and not node:has_children() then
|
|
icon = not node.empty_expanded and config.folder_empty
|
|
or config.folder_empty_open
|
|
elseif node:is_expanded() then
|
|
icon = config.folder_open or "-"
|
|
else
|
|
icon = config.folder_closed or "+"
|
|
end
|
|
elseif node.type == "file" or node.type == "terminal" then
|
|
local success, web_devicons = pcall(require, "nvim-web-devicons")
|
|
if success then
|
|
local devicon, hl = web_devicons.get_icon(node.name, node.ext)
|
|
icon = devicon or icon
|
|
highlight = hl or highlight
|
|
end
|
|
end
|
|
|
|
local filtered_by = common.filtered_by(config, node, state)
|
|
|
|
-- Don't render icon in root folder
|
|
if node:get_depth() == 1 then
|
|
return {
|
|
text = nil,
|
|
highlight = highlight,
|
|
}
|
|
end
|
|
|
|
return {
|
|
text = icon .. " ",
|
|
highlight = filtered_by.highlight or highlight,
|
|
}
|
|
end
|
|
|
|
return M
|