123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- local M = {}
- -- local Log = require "lvim.core.log"
- local icons = lvim.icons.kind
- M.config = function()
- lvim.builtin.breadcrumbs = {
- active = true,
- on_config_done = nil,
- winbar_filetype_exclude = {
- "help",
- "startify",
- "dashboard",
- "packer",
- "neo-tree",
- "neogitstatus",
- "NvimTree",
- "Trouble",
- "alpha",
- "lir",
- "Outline",
- "spectre_panel",
- "toggleterm",
- "DressingSelect",
- "Jaq",
- "harpoon",
- "dap-repl",
- "dap-terminal",
- "dapui_console",
- "lab",
- "Markdown",
- "notify",
- "noice",
- "",
- },
- options = {
- icons = {
- Array = icons.Array .. " ",
- Boolean = icons.Boolean,
- Class = icons.Class .. " ",
- Color = icons.Color .. " ",
- Constant = icons.Constant .. " ",
- Constructor = icons.Constructor .. " ",
- Enum = icons.Enum .. " ",
- EnumMember = icons.EnumMember .. " ",
- Event = icons.Event .. " ",
- Field = icons.Field .. " ",
- File = icons.File .. " ",
- Folder = icons.Folder .. " ",
- Function = icons.Function .. " ",
- Interface = icons.Interface .. " ",
- Key = icons.Key .. " ",
- Keyword = icons.Keyword .. " ",
- Method = icons.Method .. " ",
- Module = icons.Module .. " ",
- Namespace = icons.Namespace .. " ",
- Null = icons.Null .. " ",
- Number = icons.Number .. " ",
- Object = icons.Object .. " ",
- Operator = icons.Operator .. " ",
- Package = icons.Package .. " ",
- Property = icons.Property .. " ",
- Reference = icons.Reference .. " ",
- Snippet = icons.Snippet .. " ",
- String = icons.String .. " ",
- Struct = icons.Struct .. " ",
- Text = icons.Text .. " ",
- TypeParameter = icons.TypeParameter .. " ",
- Unit = icons.Unit .. " ",
- Value = icons.Value .. " ",
- Variable = icons.Variable .. " ",
- },
- 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.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 = lvim.icons.kind.File
- end
- local buf_ft = vim.bo.filetype
- if buf_ft == "dapui_breakpoints" then
- file_icon = lvim.icons.ui.Bug
- end
- if buf_ft == "dapui_stacks" then
- file_icon = lvim.icons.ui.Stacks
- end
- if buf_ft == "dapui_scopes" then
- file_icon = lvim.icons.ui.Scopes
- end
- if buf_ft == "dapui_watches" then
- file_icon = lvim.icons.ui.Watches
- end
- -- if buf_ft == "dapui_console" then
- -- file_icon = lvim.icons.ui.DebugConsole
- -- 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(lvim.builtin.breadcrumbs.winbar_filetype_exclude, vim.bo.filetype) then
- 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#" .. lvim.icons.ui.Circle .. "%*"
- 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
|