1b279d4d10
e2e Tests / e2e (macos-latest) (push) Waiting to run
e2e Tests / e2e (windows-latest) (push) Waiting to run
Nix CI / check (push) Waiting to run
Python CI / Python bindings (macos-latest) (push) Waiting to run
Python CI / Python bindings (windows-latest) (push) Waiting to run
Build & Publish / Build Neovim aarch64-apple-darwin (push) Waiting to run
Build & Publish / Build Neovim aarch64-pc-windows-msvc (push) Waiting to run
Build & Publish / Build Neovim x86_64-apple-darwin (push) Waiting to run
Build & Publish / Build Neovim x86_64-pc-windows-msvc (push) Waiting to run
Build & Publish / Build C FFI aarch64-apple-darwin (push) Waiting to run
Build & Publish / Build C FFI aarch64-pc-windows-msvc (push) Waiting to run
Build & Publish / Build C FFI x86_64-apple-darwin (push) Waiting to run
Build & Publish / Build C FFI x86_64-pc-windows-msvc (push) Waiting to run
Build & Publish / Build MCP x86_64-apple-darwin (push) Waiting to run
Build & Publish / Build MCP x86_64-pc-windows-msvc (push) Waiting to run
Build & Publish / Build Python wheels aarch64 (macos-latest) (push) Waiting to run
Build & Publish / Build Python wheels x86_64 (macos-latest) (push) Waiting to run
Build & Publish / Build Python wheels x86_64 (windows-latest) (push) Waiting to run
Build & Publish / Release (push) Blocked by required conditions
Build & Publish / Publish Python wheels to PyPI (push) Blocked by required conditions
Build & Publish / Publish Rust crates (push) Blocked by required conditions
Build & Publish / Publish npm packages (push) Blocked by required conditions
Rust CI / Test (macos-latest) (push) Waiting to run
Rust CI / Test (windows-latest) (push) Waiting to run
Rust CI / Fuzz Tests (macos-latest) (push) Waiting to run
Rust CI / Fuzz Tests (windows-latest) (push) Waiting to run
Build & Publish / Build MCP aarch64-apple-darwin (push) Waiting to run
Build & Publish / Build MCP aarch64-pc-windows-msvc (push) Waiting to run
Lua CI / lua-language-server type check (push) Failing after 1s
Lua CI / luacheck lint (push) Failing after 1s
Python CI / Python bindings (ubuntu-latest) (push) Failing after 1s
Build & Publish / Build Neovim aarch64-linux-android (push) Failing after 3s
Build & Publish / Build Neovim aarch64-unknown-linux-gnu (push) Failing after 0s
Build & Publish / Build Neovim aarch64-unknown-linux-musl (push) Failing after 1s
Build & Publish / Build Neovim x86_64-unknown-linux-gnu (push) Failing after 1s
Build & Publish / Build Neovim x86_64-unknown-linux-musl (push) Failing after 1s
Build & Publish / Build C FFI aarch64-linux-android (push) Failing after 1s
Build & Publish / Build C FFI aarch64-unknown-linux-gnu (push) Failing after 1s
Build & Publish / Build C FFI aarch64-unknown-linux-musl (push) Failing after 0s
Build & Publish / Build C FFI x86_64-unknown-linux-gnu (push) Failing after 1s
Build & Publish / Build C FFI x86_64-unknown-linux-musl (push) Failing after 3s
Build & Publish / Build MCP aarch64-unknown-linux-gnu (push) Failing after 1s
Build & Publish / Build MCP aarch64-unknown-linux-musl (push) Failing after 0s
Build & Publish / Build MCP x86_64-unknown-linux-gnu (push) Failing after 2s
Rust CI / Fuzz Tests (ubuntu-latest) (push) Failing after 1s
Rust CI / Build i686-unknown-linux-gnu (push) Failing after 1s
Rust CI / cargo fmt (push) Failing after 1s
Build & Publish / Build MCP x86_64-unknown-linux-musl (push) Failing after 4s
Build & Publish / Build Python wheels aarch64 (ubuntu-latest) (push) Failing after 1s
Build & Publish / Build Python wheels x86_64 (ubuntu-latest) (push) Failing after 1s
Build & Publish / Build Python sdist (push) Failing after 0s
Rust CI / Test (ubuntu-latest) (push) Failing after 1s
Rust CI / cargo clippy (push) Failing after 1s
Spelling / Spell Check with Typos (push) Failing after 1s
Stylua / Check lua files using Stylua (push) Failing after 1s
e2e Tests / e2e (ubuntu-latest) (push) Failing after 4s
e2e Tests / e2e (alpine-musl) (push) Successful in 58m54s
92 lines
2.5 KiB
Lua
92 lines
2.5 KiB
Lua
local M = {}
|
|
|
|
local icon_providers = {
|
|
'nvim-web-devicons',
|
|
'mini.icons',
|
|
}
|
|
|
|
M.provider = nil
|
|
M.provider_name = nil
|
|
M.setup_attempted = false
|
|
M.setup_failed = false
|
|
|
|
function M.setup()
|
|
if M.provider_name then return true end
|
|
if M.setup_failed then return false end
|
|
|
|
M.setup_attempted = true
|
|
|
|
for _, provider_name in ipairs(icon_providers) do
|
|
local ok, provider = pcall(require, provider_name)
|
|
if ok then
|
|
M.provider = provider
|
|
M.provider_name = provider_name
|
|
return true
|
|
end
|
|
end
|
|
|
|
M.setup_failed = true
|
|
return false
|
|
end
|
|
|
|
--- Get icon for a directory
|
|
--- @param dirname string The directory name
|
|
--- @return string|nil, string|nil Icon and highlight group (nil if no provider)
|
|
function M.get_directory_icon(dirname)
|
|
if not M.setup() then return nil, nil end
|
|
|
|
local basename = vim.fn.fnamemodify(dirname, ':t')
|
|
|
|
if M.provider_name == 'nvim-web-devicons' then
|
|
if M.provider.get_icon then
|
|
local icon, hl = M.provider.get_icon(basename, nil, { default = true })
|
|
if icon and icon ~= '' and hl then return icon, hl end
|
|
end
|
|
elseif M.provider_name == 'mini.icons' then
|
|
if M.provider.get then
|
|
local icon, hl, _ = M.provider.get('directory', basename)
|
|
if icon and icon ~= '' and hl then return icon, hl end
|
|
end
|
|
end
|
|
|
|
return nil, nil
|
|
end
|
|
|
|
--- Get icon for a file
|
|
--- @param filename string The filename
|
|
--- @param extension string The file extension (without dot)
|
|
--- @param is_directory boolean Whether this is a directory
|
|
--- @return string|nil, string|nil Icon and highlight group (nil if no provider)
|
|
function M.get_icon(filename, extension, is_directory)
|
|
if not M.setup() then return nil, nil end
|
|
|
|
if is_directory then return M.get_directory_icon(filename) end
|
|
|
|
if M.provider_name == 'nvim-web-devicons' then
|
|
local icon, hl = M.provider.get_icon(filename, extension, { default = true })
|
|
if icon and icon ~= '' and hl then return icon, hl end
|
|
elseif M.provider_name == 'mini.icons' then
|
|
local icon, hl, _ = M.provider.get('file', filename)
|
|
if icon and icon ~= '' and hl then return icon, hl end
|
|
end
|
|
|
|
return nil, nil
|
|
end
|
|
|
|
--- Check if directories are supported by current provider
|
|
--- @return boolean True if directory icons are supported
|
|
function M.supports_directories() return M.setup() and M.provider_name ~= nil end
|
|
|
|
--- Get provider info for debugging
|
|
--- @return table Provider information
|
|
function M.get_provider_info()
|
|
M.setup()
|
|
return {
|
|
name = M.provider_name or 'none',
|
|
available = M.provider ~= nil,
|
|
supports_directories = M.supports_directories(),
|
|
}
|
|
end
|
|
|
|
return M
|