mirror of
https://github.com/LunarVim/LunarVim.git
synced 2024-09-20 18:45:08 +02:00
518b1d4167
* fix: make navim-navic configurable * fix: make sure vim-illuminate is configurable * fix: make sure theme is configurable * fix(ci): don't verify uninstalled plugins * refactor(lsp): add setup_document_symbols util * revert: keep onedarker on freeze branch * refactor(lsp): avoid duplicate hl autocmds Co-authored-by: kylo252 <59826753+kylo252@users.noreply.github.com>
208 lines
4.8 KiB
Lua
208 lines
4.8 KiB
Lua
local M = {}
|
|
|
|
-- local Log = require "lvim.core.log"
|
|
|
|
M.config = function()
|
|
lvim.builtin.breadcrumbs = {
|
|
active = false,
|
|
on_config_done = nil,
|
|
options = {
|
|
icons = {
|
|
Text = " ",
|
|
Method = " ",
|
|
Function = " ",
|
|
Constructor = " ",
|
|
Field = " ",
|
|
Variable = " ",
|
|
Class = " ",
|
|
Interface = " ",
|
|
Module = " ",
|
|
Property = " ",
|
|
Unit = " ",
|
|
Value = " ",
|
|
Enum = " ",
|
|
Keyword = " ",
|
|
Snippet = " ",
|
|
Color = " ",
|
|
File = " ",
|
|
Reference = " ",
|
|
Folder = " ",
|
|
EnumMember = " ",
|
|
Constant = " ",
|
|
Struct = " ",
|
|
Event = " ",
|
|
Operator = " ",
|
|
TypeParameter = " ",
|
|
Array = " ",
|
|
Number = " ",
|
|
String = " ",
|
|
Boolean = "蘒",
|
|
Object = " ",
|
|
Package = " ",
|
|
Namespace = "",
|
|
Key = "",
|
|
Null = "ﳠ",
|
|
},
|
|
highlight = true,
|
|
separator = " " .. ">" .. " ",
|
|
depth_limit = 0,
|
|
depth_limit_indicator = "..",
|
|
},
|
|
}
|
|
end
|
|
|
|
M.setup = function()
|
|
local status_ok, navic = pcall(require, "nvim-navic")
|
|
if not status_ok then
|
|
return
|
|
end
|
|
|
|
M.create_winbar()
|
|
navic.setup(lvim.builtin.breadcrumbs.options)
|
|
|
|
if lvim.builtin.breadcrumbs.on_config_done then
|
|
lvim.builtin.breadcrumbs.on_config_done()
|
|
end
|
|
end
|
|
|
|
M.winbar_filetype_exclude = {
|
|
"help",
|
|
"startify",
|
|
"dashboard",
|
|
"packer",
|
|
"neogitstatus",
|
|
"NvimTree",
|
|
"Trouble",
|
|
"alpha",
|
|
"lir",
|
|
"Outline",
|
|
"spectre_panel",
|
|
"toggleterm",
|
|
"DressingSelect",
|
|
"Jaq",
|
|
"harpoon",
|
|
"dapui_scopes",
|
|
"dapui_breakpoints",
|
|
"dapui_stacks",
|
|
"dapui_watches",
|
|
"dap-repl",
|
|
"dap-terminal",
|
|
"dapui_console",
|
|
"lab",
|
|
"Markdown",
|
|
"",
|
|
}
|
|
|
|
M.get_filename = function()
|
|
local filename = vim.fn.expand "%:t"
|
|
local extension = vim.fn.expand "%:e"
|
|
local f = require "lvim.utils.functions"
|
|
|
|
if not f.isempty(filename) then
|
|
local file_icon, file_icon_color =
|
|
require("nvim-web-devicons").get_icon_color(filename, extension, { default = true })
|
|
|
|
local hl_group = "FileIconColor" .. extension
|
|
|
|
vim.api.nvim_set_hl(0, hl_group, { fg = file_icon_color })
|
|
if f.isempty(file_icon) then
|
|
file_icon = ""
|
|
end
|
|
|
|
local navic_text = vim.api.nvim_get_hl_by_name("Normal", true)
|
|
vim.api.nvim_set_hl(0, "Winbar", { fg = navic_text.foreground })
|
|
|
|
return " " .. "%#" .. hl_group .. "#" .. file_icon .. "%*" .. " " .. "%#Winbar#" .. filename .. "%*"
|
|
end
|
|
end
|
|
|
|
local get_gps = function()
|
|
local status_gps_ok, gps = pcall(require, "nvim-navic")
|
|
if not status_gps_ok then
|
|
return ""
|
|
end
|
|
|
|
local status_ok, gps_location = pcall(gps.get_location, {})
|
|
if not status_ok then
|
|
return ""
|
|
end
|
|
|
|
if not gps.is_available() or gps_location == "error" then
|
|
return ""
|
|
end
|
|
|
|
if not require("lvim.utils.functions").isempty(gps_location) then
|
|
-- TODO: replace with chevron
|
|
return ">" .. " " .. gps_location
|
|
else
|
|
return ""
|
|
end
|
|
end
|
|
|
|
local excludes = function()
|
|
if vim.tbl_contains(M.winbar_filetype_exclude, vim.bo.filetype) then
|
|
vim.opt_local.winbar = nil
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
M.get_winbar = function()
|
|
if excludes() then
|
|
return
|
|
end
|
|
local f = require "lvim.utils.functions"
|
|
local value = M.get_filename()
|
|
|
|
local gps_added = false
|
|
if not f.isempty(value) then
|
|
local gps_value = get_gps()
|
|
value = value .. " " .. gps_value
|
|
if not f.isempty(gps_value) then
|
|
gps_added = true
|
|
end
|
|
end
|
|
|
|
if not f.isempty(value) and f.get_buf_option "mod" then
|
|
-- TODO: replace with circle
|
|
local mod = "%#LspCodeLens#" .. "" .. "%*"
|
|
if gps_added then
|
|
value = value .. " " .. mod
|
|
else
|
|
value = value .. mod
|
|
end
|
|
end
|
|
|
|
local num_tabs = #vim.api.nvim_list_tabpages()
|
|
|
|
if num_tabs > 1 and not f.isempty(value) then
|
|
local tabpage_number = tostring(vim.api.nvim_tabpage_get_number(0))
|
|
value = value .. "%=" .. tabpage_number .. "/" .. tostring(num_tabs)
|
|
end
|
|
|
|
local status_ok, _ = pcall(vim.api.nvim_set_option_value, "winbar", value, { scope = "local" })
|
|
if not status_ok then
|
|
return
|
|
end
|
|
end
|
|
|
|
M.create_winbar = function()
|
|
vim.api.nvim_create_augroup("_winbar", {})
|
|
if vim.fn.has "nvim-0.8" == 1 then
|
|
vim.api.nvim_create_autocmd(
|
|
{ "CursorMoved", "CursorHold", "BufWinEnter", "BufFilePost", "InsertEnter", "BufWritePost", "TabClosed" },
|
|
{
|
|
group = "_winbar",
|
|
callback = function()
|
|
local status_ok, _ = pcall(vim.api.nvim_buf_get_var, 0, "lsp_floating_window")
|
|
if not status_ok then
|
|
-- TODO:
|
|
require("lvim.core.breadcrumbs").get_winbar()
|
|
end
|
|
end,
|
|
}
|
|
)
|
|
end
|
|
end
|
|
|
|
return M
|