Files
deb-lite-xl/debian/extra/plugins/nerdicons.lua
T
vhaudiquet 3bae6fd448 Bundle curated community plugins (2.1.8-4)
Vendored from upstream, pinned by commit (see debian/extra/README.source):
- gitstatus, gitopen, fontconfig, open_ext, select_colorscheme,
  smoothcaret, nerdicons (font mapping patched to DATADIR, Ships the
  Symbols Nerd Font Mono TTF, SIL OFL 1.1)
- lite-xl-lsp (complete LSP client; idle until a language server is
  configured) plus the lite-xl-widgets library it requires
- 104 language syntax plugins (none duplicate the nine bundled in core)

settings GUI left out upstream is broken: it requires a
libraries.widget.fonts widget that does not exist in
lite-xl-widgets at any revision.

Co-developed-with: ZCode (Z.ai)
2026-09-16 22:45:02 +02:00

211 lines
9.0 KiB
Lua

-- mod-version:3
-- Orginal Author: Jipok
-- Modified by: techie-guy
-- Doesn't work well with scaling mode == "ui"
-- This is an extension/modification of the nonicons plugin, https://github.com/lite-xl/lite-xl-plugins/blob/master/plugins/nonicons.lua
-- Any icon can be searched with nerdfonts.com/cheat-sheet
local common = require "core.common"
local config = require "core.config"
local style = require "core.style"
local TreeView = require "plugins.treeview"
local Node = require "core.node"
local nerdfonts_symbols = require "libraries.font_symbols_nerdfont_mono_regular"
-- Config
config.plugins.nerdicons = common.merge({
use_default_dir_icons = false,
use_default_chevrons = false,
draw_treeview_icons = true,
draw_tab_icons = true,
-- The config specification used by the settings gui
config_spec = {
name = "Nerdicons",
{
label = "Use Default Directory Icons",
description = "When enabled does not use nerdicon directory icons.",
path = "use_default_dir_icons",
type = "toggle",
default = false
},
{
label = "Use Default Chevrons",
description = "When enabled does not use nerdicon expand/collapse arrow icons.",
path = "use_default_chevrons",
type = "toggle",
default = false
},
{
label = "Draw Treeview Icons",
description = "Enables file related icons on the treeview.",
path = "draw_treeview_icons",
type = "toggle",
default = true
},
{
label = "Draw Tab Icons",
description = "Adds file related icons to tabs.",
path = "draw_tab_icons",
type = "toggle",
default = true
},
}
}, config.plugins.nerdicons)
local icon_font = renderer.font.load(nerdfonts_symbols.path, 18.5 * SCALE)
local map = nerdfonts_symbols.utf8
local chevron_width = icon_font:get_width(map["oct-chevron_down"])
local previous_scale = SCALE
local extension_icons = {
[".hxml"] = { "#d3d3d3", "seti-config" }, -- Haxe
[".hx"] = { "#f68712", "seti-haxe" },
[".d"] = { "#ff3333", "dev-dlang" }, -- D
[".di"] = { "#ff6666", "dev-dlang" },
[".lua"] = { "#405af0", "seti-lua" },
[".md"] = { "#519aba", "dev-markdown" }, -- Markdown
[".powershell"] = { "#519aba", "cod-terminal_powershell" },
[".bat"] = { "#cbcb41", "cod-terminal_cmd" },
[".txt"] = { "#ffffff", "fa-file_text" },
[".cpp"] = { "#519aba", "custom-cpp" },
[".c"] = { "#599eff", "custom-c" },
[".h"] = { "#79029b", "fa-header" },
[".hpp"] = { "#79029b", "fa-header" },
[".py"] = { "#3572A5", "md-language_python" }, -- Python
[".pyc"] = { "#519aba", "md-language_python" },
[".pyd"] = { "#519aba", "md-language_python" },
[".php"] = { "#a074c4", "md-language_php" },
[".cs"] = { "#596706", "md-language_csharp" }, -- C#
[".conf"] = { "#6d8086", "seti-config" },
[".cfg"] = { "#6d8086", "seti-config" },
[".toml"] = { "#6d8086", "seti-config" },
[".yaml"] = { "#6d8086", "seti-yml" },
[".yml"] = { "#6d8086", "seti-yml" },
[".json"] = { "#854CC7", "seti-json" },
[".css"] = { "#519abc", "dev-css3" },
[".html"] = { "#e34c26", "dev-html5" },
[".js"] = { "#cbcb41", "dev-javascript_badge" },
[".cjs"] = { "#cbcb41", "dev-javascript_badge" },
[".mjs"] = { "#cbcb41", "dev-javascript_badge" }, -- JavaScript
[".ejs"] = { "#ffea7f", "seti-ejs" },
[".pug"] = { "#a86454", "seti-pug" },
[".go"] = { "#519aba", "seti-go" },
[".jpg"] = { "#a074c4", "fa-image" },
[".png"] = { "#a074c4", "fa-image" },
[".sh"] = { "#4d5a5e", "cod-terminal_bash" },
[".bash"] = { "#4d5a5e", "cod-terminal_bash" }, -- Shell
[".java"] = { "#cc3e44", "dev-java" },
[".scala"] = { "#cc3e44", "dev-scala" },
[".kt"] = { "#F88A02", "custom-kotlin" }, -- Kotlin
[".pl"] = { "#519aba", "dev-perl" }, -- Perl
[".pm"] = { "#519aba", "dev-perl" }, -- Perl
[".rb"] = { "#701516", "dev-ruby_rough" }, -- Ruby
[".rs"] = { "#c95625", "dev-rust" }, -- Rust
[".rss"] = { "#cc3e44", "fa-rss_square" },
[".sql"] = { "#dad8d8", "dev-sqllite" },
[".swift"] = { "#e37933", "dev-swift" },
[".ts"] = { "#519aba", "md-language_typescript" }, -- TypeScript
[".diff"] = { "#41535b", "oct-diff" },
[".exe"] = { "#cc3e55", "cod-file_binary" },
[".make"] = { "#d0bf41", "dev-gnu" },
[".svg"] = { "#f7ca39", "md-svg" },
[".ttf"] = { "#dad8d4", "fa-font" },
[".otf"] = { "#dad8d4", "fa-font" },
[".vim"] = { "#8f00ff", "custom-vim" },
[".pdf"] = { "#E53935", "fa-file_pdf_o" },
[".jl"] = { "#4063d8", "seti-julia" },
[".mp4"] = { "#e85e00", "oct-video" },
[".jld2"] = { "#888888", "fa-database" },
[".ipynb"] = { "#F37726", "seti-notebook" },
}
local known_filenames_icons = {
["dockerfile"] = { "#296478", "linux-docker" },
[".gitignore"] = { "#cc3e55", "dev-git" },
[".gitmodules"] = { "#cc3e56", "dev-git" },
["PKGBUILD"] = { "#6d8ccc", "md-package" },
["license"] = { "#d0bf41", "seti-license" },
["copying"] = { "#d0bf41", "seti-license" },
["makefile"] = { "#d0bf41", "dev-gnu" },
["cmakelists.txt"] = { "#cc3e55", "md-triangle_outline" },
}
-- Preparing colors
for _, v in pairs(extension_icons) do
v[1] = { common.color(v[1]) }
end
for _, v in pairs(known_filenames_icons) do
v[1] = { common.color(v[1]) }
end
-- Override function to change default icons for dirs, special extensions and names
local TreeView_get_item_icon = TreeView.get_item_icon
function TreeView:get_item_icon(item, active, hovered)
local icon, font, color = TreeView_get_item_icon(self, item, active, hovered)
if previous_scale ~= SCALE then
icon_font:set_size(
icon_font:get_size() * (SCALE / previous_scale)
)
chevron_width = icon_font:get_width(map["oct-chevron_down"])
previous_scale = SCALE
end
if not config.plugins.nerdicons.use_default_dir_icons then
icon = map["cod-file"] -- hex ea7b
font = icon_font
color = style.text
if item.type == "dir" then
icon = item.expanded and map["fa-folder_open"] or map["fa-folder"] -- hex f07c and f07b
end
end
if config.plugins.nerdicons.draw_treeview_icons then
local custom_icon = known_filenames_icons[item.name:lower()]
if custom_icon == nil then
custom_icon = extension_icons[item.name:match("^.+(%..+)$")]
end
if custom_icon ~= nil then
color = custom_icon[1]
icon = map[custom_icon[2]]
font = icon_font
end
if active or hovered then
color = style.accent
end
end
return icon, font, color
end
-- Override function to draw chevrons if setting is disabled
local TreeView_draw_item_chevron = TreeView.draw_item_chevron
function TreeView:draw_item_chevron(item, active, hovered, x, y, w, h)
if not config.plugins.nerdicons.use_default_chevrons then
if item.type == "dir" then
local chevron_icon = item.expanded and "oct-chevron_down" or "oct-chevron_right"
local chevron_color = hovered and style.accent or style.text
common.draw_text(icon_font, chevron_color, map[chevron_icon], nil, x+8, y, 0, h) -- added 8 to x to draw the chevron closer to the icon
end
return chevron_width + style.padding.x
end
return TreeView_draw_item_chevron(self, item, active, hovered, x, y, w, h)
end
-- Override function to draw icons in tabs titles if setting is enabled
local Node_draw_tab_title = Node.draw_tab_title
function Node:draw_tab_title(view, font, is_active, is_hovered, x, y, w, h)
if config.plugins.nerdicons.draw_tab_icons then
local padx = chevron_width + style.padding.x/2
local tx = x + padx/16 -- Space for icon
w = w + padx
Node_draw_tab_title(self, view, font, is_active, is_hovered, tx, y, w, h)
if (view == nil) or (view.doc == nil) then return end
local item = { type = "file", name = view.doc:get_name() }
TreeView:draw_item_icon(item, false, is_hovered, x, y, w, h)
else
Node_draw_tab_title(self, view, font, is_active, is_hovered, x, y, w, h)
end
end