diff options
| author | Fasamii <fasami0512@gmail.com> | 2026-02-05 19:25:43 +0100 |
|---|---|---|
| committer | Fasamii <fasami0512@gmail.com> | 2026-02-05 19:25:43 +0100 |
| commit | d8df2abe655ec2468bf0f6ab898dd909f8c73479 (patch) | |
| tree | 5cdcb9ab3a7cad031684a81c5174d40b897fa2c9 /lua/netrw/init.lua | |
| parent | 6e17aeb0c1f26fcfac9c5a1bfd24234005da2bd3 (diff) | |
| download | netrw-icons.nvim-d8df2abe655ec2468bf0f6ab898dd909f8c73479.tar.gz netrw-icons.nvim-d8df2abe655ec2468bf0f6ab898dd909f8c73479.tar.bz2 netrw-icons.nvim-d8df2abe655ec2468bf0f6ab898dd909f8c73479.tar.xz netrw-icons.nvim-d8df2abe655ec2468bf0f6ab898dd909f8c73479.tar.zst | |
rename
Diffstat (limited to 'lua/netrw/init.lua')
| -rw-r--r-- | lua/netrw/init.lua | 149 |
1 files changed, 0 insertions, 149 deletions
diff --git a/lua/netrw/init.lua b/lua/netrw/init.lua deleted file mode 100644 index 379d5a1..0000000 --- a/lua/netrw/init.lua +++ /dev/null @@ -1,149 +0,0 @@ -local M = {} -local parse = require("netrw.parse") - -local icon_provider = nil - -local function get_icon_provider(prefer) - local providers = {} - - local has_devicons, devicons = pcall(require, "nvim-web-devicons") - if has_devicons then - providers.devicons = devicons - end - - local has_miniicons, miniicons = pcall(require, "mini.icons") - if has_miniicons then - providers.miniicons = miniicons - end - - if prefer and providers[prefer] then - return { type = prefer, provider = providers[prefer] } - end - - if providers.miniicons then - return { type = "miniicons", provider = providers.miniicons } - elseif providers.devicons then - return { type = "devicons", provider = providers.devicons } - end - - return nil -end - -local function get_file_icon(node) - if not icon_provider then - return nil, nil - end - - if icon_provider.type == "devicons" then - local icon, hl = icon_provider.provider.get_icon(node.node, nil, { strict = true, default = false }) - return icon, hl - elseif icon_provider.type == "miniicons" then - local icon, hl = icon_provider.provider.get("file", node.node) - return icon, hl - end - - return nil, nil -end - -local function get_lsp_diagnostics(bufnr, node) - local diagnostics = {} - local filepath = node.dir .. "/" .. node.node - - 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 draw(bufnr) - local namespace = vim.api.nvim_create_namespace("netrw") - vim.api.nvim_buf_clear_namespace(bufnr, namespace, 0, -1) - - local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false) - - for i, line in ipairs(lines) do - local node = parse.get_node(line) - if node then - -- Draw file/dir icon on the left - if (node.type == parse.TYPE_FILE and M.options.file) or - (node.type == parse.TYPE_DIR and M.options.dir) then - local icon, hl = get_file_icon(node) - if icon then - local opts = { - id = i * 2, -- Unique ID for icon - virt_text = hl and { { icon .. " ", hl } } or { { icon .. " " } }, - virt_text_pos = "inline", - } - vim.api.nvim_buf_set_extmark(bufnr, namespace, i - 1, node.icon_col, opts) - end - end - - -- Draw LSP diagnostics on the right - if node.type == parse.TYPE_FILE then - local diagnostics = get_lsp_diagnostics(bufnr, node) - if #diagnostics > 0 then - local virt_text = {} - for _, diag in ipairs(diagnostics) do - table.insert(virt_text, { " " .. diag.icon, diag.hl }) - end - - local opts = { - id = i * 2 + 1, -- Unique ID for LSP - virt_text = virt_text, - virt_text_pos = "inline", - } - vim.api.nvim_buf_set_extmark(bufnr, namespace, i - 1, node.lsp_col, opts) - end - end - end - end -end - ---- @class Config -M.options = {} - ---- @class Config -local default = { - prefer = nil, -- "miniicons" or "devicons" - file = true, - dir = true, - lsp = { - info = false, - hint = false, - warn = true, - error = true, - } -} - ----@param options Config|nil -function M.setup(options) - M.options = vim.tbl_deep_extend("force", {}, default, options or {}) - - if M.options.file or M.options.dir then - icon_provider = get_icon_provider(M.options.prefer) - end - - vim.api.nvim_create_autocmd({ "BufEnter", "DiagnosticChanged" }, { - pattern = "*", - group = vim.api.nvim_create_augroup("netrw_icons", { clear = true }), - callback = function(args) - if vim.bo[args.buf].filetype ~= "netrw" then - return - end - draw(args.buf) - end - }) -end - -return M |
