summaryrefslogtreecommitdiffstats
path: root/lua/netrw-icons/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/netrw-icons/init.lua')
-rw-r--r--lua/netrw-icons/init.lua98
1 files changed, 64 insertions, 34 deletions
diff --git a/lua/netrw-icons/init.lua b/lua/netrw-icons/init.lua
index 4f378a2..38da421 100644
--- a/lua/netrw-icons/init.lua
+++ b/lua/netrw-icons/init.lua
@@ -43,14 +43,17 @@ local function get_icon_from_provider(name)
local provider = icon_provider.provider;
local type = icon_provider.type;
if type == "devicons" then
- local symbol, hi = provider.get_icon(name, nil, { strict = true, default = false });
+ local symbol, hi = provider.get_icon(name, nil, { strict = true, default = M.options.file_default });
if symbol then
- return { symbol = symbol, hi = hi };
+ return { symbol = symbol .. " ", hi = hi };
end
elseif type == "miniicons" then
- local symbol, hi = provider.get("file", name)
+ local symbol, hi, is_default = provider.get("file", name)
if symbol then
- return { symbol = symbol, hi = hi };
+ if is_default and not M.options.file_default then
+ symbol = "";
+ end
+ return { symbol = symbol .. " ", hi = hi };
end
end
end
@@ -62,16 +65,16 @@ end
local function get_icon(node)
if node.type == parse.TYPE_DIR and M.options.dir then
if M.options.dir then
- return { symbol = M.options.dir, hi = "Normal" };
+ return { symbol = M.options.dir, hi = "Directory" };
end
elseif node.type == parse.TYPE_SYMLINK and M.options.sym then
if M.options.sym then
- return { symbol = M.options.sym, hi = "Normal" };
+ return { symbol = M.options.sym, hi = "Question" };
end
elseif node.type == parse.TYPE_FILE and M.options.file then
local file_type = vim.fn.fnamemodify(node.name, ":e");
if string.sub(file_type, -1) == "*" then
- return get_icon_from_provider("exe");
+ return get_icon_from_provider("exe")
end
return get_icon_from_provider(node.name);
end
@@ -79,27 +82,39 @@ local function get_icon(node)
return nil;
end
--- local function get_lsp_diagnostics(node)
--- local diagnostics = {}
--- local filepath = node.dir .. "/" .. node.node
---
--- -- FIXME: that foo takes bufnr not path
--- local diag = vim.diagnostic.get(nil, { path = filepath })
---
--- for _, d in ipairs(diag) do
--- if d.severity == vim.diagnostic.severity.ERROR and M.options.lsp.error then
--- table.insert(diagnostics, { icon = "E", hl = "DiagnosticError" })
--- elseif d.severity == vim.diagnostic.severity.WARN and M.options.lsp.warn then
--- table.insert(diagnostics, { icon = "W", hl = "DiagnosticWarn" })
--- elseif d.severity == vim.diagnostic.severity.INFO and M.options.lsp.info then
--- table.insert(diagnostics, { icon = "I", hl = "DiagnosticInfo" })
--- elseif d.severity == vim.diagnostic.severity.HINT and M.options.lsp.hint then
--- table.insert(diagnostics, { icon = "H", hl = "DiagnosticHint" })
--- end
--- end
---
--- return diagnostics
--- end
+local function path_to_bufnr(path)
+ path = vim.fn.fnamemodify(path, ":p");
+
+ for _, bufnr in ipairs(vim.api.nvim_list_bufs()) do
+ if vim.api.nvim_buf_is_loaded(bufnr) then
+ local name = vim.api.nvim_buf_get_name(bufnr);
+ if name == path then
+ return bufnr;
+ end
+ end
+ end
+
+ return nil
+end
+
+local function get_lsp_diagnostics(node)
+ -- local diagnostics = vim.diagnostic.get(path_to_bufnr(node.path))
+
+ -- for _, d in ipairs(diag) do
+ -- if d.severity == vim.diagnostic.severity.ERROR and M.options.lsp.error then
+ -- table.insert(diagnostics, { icon = "E", hl = "DiagnosticError" })
+ -- elseif d.severity == vim.diagnostic.severity.WARN and M.options.lsp.warn then
+ -- table.insert(diagnostics, { icon = "W", hl = "DiagnosticWarn" })
+ -- elseif d.severity == vim.diagnostic.severity.INFO and M.options.lsp.info then
+ -- table.insert(diagnostics, { icon = "I", hl = "DiagnosticInfo" })
+ -- elseif d.severity == vim.diagnostic.severity.HINT and M.options.lsp.hint then
+ -- table.insert(diagnostics, { icon = "H", hl = "DiagnosticHint" })
+ -- end
+ -- end
+
+ -- return diagnostics
+ return nil;
+end
local function draw(bufnr)
local namespace = vim.api.nvim_create_namespace("netrw")
@@ -110,18 +125,32 @@ local function draw(bufnr)
for i, line in ipairs(lines) do
local node = parse.get_node(line)
- -- vim.print("[" .. line .. "] - ");
- -- vim.print(node);
-
if node then
local icon = get_icon(node);
if icon then
- vim.api.nvim_buf_set_extmark(bufnr, namespace, i - 1, node.icon - 1, {
+ local symbol = icon.symbol;
+ local virt_text = { symbol };
+ if icon.hi then
+ virt_text[2] = icon.hi;
+ end
+ vim.api.nvim_buf_set_extmark(bufnr, namespace, i - 1, node.icon, {
id = i,
virt_text_pos = "inline",
- virt_text = { { " " .. icon.symbol, icon.hi } },
+ virt_text = { virt_text },
});
end
+ if M.options.lsp then
+ local diagnostics = get_lsp_diagnostics(node);
+ if diagnostics then
+ local virt_text = { " " .. "ERROR" };
+
+ vim.api.nvim_buf_set_extmark(bufnr, namespace, i - 1, node.lsp, {
+ id = i,
+ virt_text_pos = "inline",
+ virt_text = { virt_text },
+ });
+ end
+ end
end
end
end
@@ -133,7 +162,8 @@ M.options = {}
local default = {
prefer = nil,
file = true,
- dir = "",
+ file_default = true,
+ dir = " ",
sym = false,
lsp = {
info = false,