Add nvim-navic
This commit is contained in:
parent
426548583b
commit
8851672e28
2
init.lua
2
init.lua
|
@ -328,5 +328,7 @@ require('lazy').setup({
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
require('lvim.breadcrumbs').setup()
|
||||||
|
|
||||||
-- The line beneath this is called `modeline`. See `:help modeline`
|
-- The line beneath this is called `modeline`. See `:help modeline`
|
||||||
-- vim: ts=2 sts=2 sw=2 et
|
-- vim: ts=2 sts=2 sw=2 et
|
||||||
|
|
|
@ -13,6 +13,7 @@ return { -- LSP Configuration & Plugins
|
||||||
-- `neodev` configures Lua LSP for your Neovim config, runtime and plugins
|
-- `neodev` configures Lua LSP for your Neovim config, runtime and plugins
|
||||||
-- used for completion, annotations and signatures of Neovim apis
|
-- used for completion, annotations and signatures of Neovim apis
|
||||||
{ 'folke/neodev.nvim', opts = {} },
|
{ 'folke/neodev.nvim', opts = {} },
|
||||||
|
'SmiteshP/nvim-navic',
|
||||||
},
|
},
|
||||||
config = function()
|
config = function()
|
||||||
-- Brief aside: **What is LSP?**
|
-- Brief aside: **What is LSP?**
|
||||||
|
|
|
@ -79,9 +79,9 @@ M.on_attach = function(event)
|
||||||
end, '[T]oggle Inlay [H]ints')
|
end, '[T]oggle Inlay [H]ints')
|
||||||
end
|
end
|
||||||
|
|
||||||
-- if client.server_capabilities.documentSymbolProvider then
|
if client.server_capabilities.documentSymbolProvider then
|
||||||
-- require('nvim-navic').attach(client, event.buf)
|
require('nvim-navic').attach(client, event.buf)
|
||||||
-- end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
@ -0,0 +1,246 @@
|
||||||
|
--print "file breadcrumbs loaded"
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
-- local Log = require "lvim.core.log"
|
||||||
|
|
||||||
|
local icons = require('lvim.icons')
|
||||||
|
|
||||||
|
local lvim = {
|
||||||
|
use_icons = true,
|
||||||
|
builtin = {
|
||||||
|
breadcrumbs = {
|
||||||
|
active = true,
|
||||||
|
on_config_done = nil,
|
||||||
|
winbar_filetype_exclude = {
|
||||||
|
"help",
|
||||||
|
"startify",
|
||||||
|
"dashboard",
|
||||||
|
"lazy",
|
||||||
|
"neo-tree",
|
||||||
|
"neogitstatus",
|
||||||
|
"NvimTree",
|
||||||
|
"Trouble",
|
||||||
|
"alpha",
|
||||||
|
"lir",
|
||||||
|
"Outline",
|
||||||
|
"spectre_panel",
|
||||||
|
"toggleterm",
|
||||||
|
"DressingSelect",
|
||||||
|
"Jaq",
|
||||||
|
"harpoon",
|
||||||
|
"dap-repl",
|
||||||
|
"dap-terminal",
|
||||||
|
"dapui_console",
|
||||||
|
"dapui_hover",
|
||||||
|
"lab",
|
||||||
|
"notify",
|
||||||
|
"noice",
|
||||||
|
"neotest-summary",
|
||||||
|
"NvimTree",
|
||||||
|
"",
|
||||||
|
},
|
||||||
|
options = {
|
||||||
|
icons = {
|
||||||
|
Array = icons.kind.Array .. " ",
|
||||||
|
Boolean = icons.kind.Boolean .. " ",
|
||||||
|
Class = icons.kind.Class .. " ",
|
||||||
|
Color = icons.kind.Color .. " ",
|
||||||
|
Constant = icons.kind.Constant .. " ",
|
||||||
|
Constructor = icons.kind.Constructor .. " ",
|
||||||
|
Enum = icons.kind.Enum .. " ",
|
||||||
|
EnumMember = icons.kind.EnumMember .. " ",
|
||||||
|
Event = icons.kind.Event .. " ",
|
||||||
|
Field = icons.kind.Field .. " ",
|
||||||
|
File = icons.kind.File .. " ",
|
||||||
|
Folder = icons.kind.Folder .. " ",
|
||||||
|
Function = icons.kind.Function .. " ",
|
||||||
|
Interface = icons.kind.Interface .. " ",
|
||||||
|
Key = icons.kind.Key .. " ",
|
||||||
|
Keyword = icons.kind.Keyword .. " ",
|
||||||
|
Method = icons.kind.Method .. " ",
|
||||||
|
Module = icons.kind.Module .. " ",
|
||||||
|
Namespace = icons.kind.Namespace .. " ",
|
||||||
|
Null = icons.kind.Null .. " ",
|
||||||
|
Number = icons.kind.Number .. " ",
|
||||||
|
Object = icons.kind.Object .. " ",
|
||||||
|
Operator = icons.kind.Operator .. " ",
|
||||||
|
Package = icons.kind.Package .. " ",
|
||||||
|
Property = icons.kind.Property .. " ",
|
||||||
|
Reference = icons.kind.Reference .. " ",
|
||||||
|
Snippet = icons.kind.Snippet .. " ",
|
||||||
|
String = icons.kind.String .. " ",
|
||||||
|
Struct = icons.kind.Struct .. " ",
|
||||||
|
Text = icons.kind.Text .. " ",
|
||||||
|
TypeParameter = icons.kind.TypeParameter .. " ",
|
||||||
|
Unit = icons.kind.Unit .. " ",
|
||||||
|
Value = icons.kind.Value .. " ",
|
||||||
|
Variable = icons.kind.Variable .. " ",
|
||||||
|
},
|
||||||
|
highlight = true,
|
||||||
|
separator = " " .. icons.ui.ChevronRight .. " ",
|
||||||
|
depth_limit = 0,
|
||||||
|
depth_limit_indicator = "..",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
M.setup = function()
|
||||||
|
--print "setup"
|
||||||
|
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.functions"
|
||||||
|
|
||||||
|
if not f.isempty(filename) then
|
||||||
|
local file_icon, hl_group
|
||||||
|
local devicons_ok, devicons = pcall(require, "nvim-web-devicons")
|
||||||
|
if lvim.use_icons and devicons_ok then
|
||||||
|
file_icon, hl_group = devicons.get_icon(filename, extension, { default = true })
|
||||||
|
|
||||||
|
if f.isempty(file_icon) then
|
||||||
|
file_icon = icons.kind.File
|
||||||
|
end
|
||||||
|
else
|
||||||
|
file_icon = ""
|
||||||
|
hl_group = "Normal"
|
||||||
|
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 = icons.ui.Stacks
|
||||||
|
end
|
||||||
|
|
||||||
|
if buf_ft == "dapui_scopes" then
|
||||||
|
file_icon = icons.ui.Scopes
|
||||||
|
end
|
||||||
|
|
||||||
|
if buf_ft == "dapui_watches" then
|
||||||
|
file_icon = icons.ui.Watches
|
||||||
|
end
|
||||||
|
|
||||||
|
-- if buf_ft == "dapui_console" then
|
||||||
|
-- file_icon = 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.functions").isempty(gps_location) then
|
||||||
|
return "%#NavicSeparator#" .. icons.ui.ChevronRight .. "%* " .. gps_location
|
||||||
|
else
|
||||||
|
return ""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local excludes = function()
|
||||||
|
return vim.tbl_contains(lvim.builtin.breadcrumbs.winbar_filetype_exclude or {}, vim.bo.filetype)
|
||||||
|
end
|
||||||
|
|
||||||
|
M.get_winbar = function()
|
||||||
|
if excludes() then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local f = require "lvim.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#" .. 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()
|
||||||
|
--print "create winbar"
|
||||||
|
vim.api.nvim_create_augroup("_winbar", {})
|
||||||
|
vim.api.nvim_create_autocmd({
|
||||||
|
"CursorHoldI",
|
||||||
|
"CursorHold",
|
||||||
|
"BufWinEnter",
|
||||||
|
"BufFilePost",
|
||||||
|
"InsertEnter",
|
||||||
|
"BufWritePost",
|
||||||
|
"TabClosed",
|
||||||
|
"TabEnter",
|
||||||
|
}, {
|
||||||
|
group = "_winbar",
|
||||||
|
callback = function()
|
||||||
|
--print "augroup callback"
|
||||||
|
if lvim.builtin.breadcrumbs.active then
|
||||||
|
local status_ok, _ = pcall(vim.api.nvim_buf_get_var, 0, "lsp_floating_window")
|
||||||
|
if not status_ok then
|
||||||
|
--print "calling get winbar"
|
||||||
|
-- TODO:
|
||||||
|
require("lvim.breadcrumbs").get_winbar()
|
||||||
|
--print "augroup done"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
|
@ -0,0 +1,16 @@
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
function M.isempty(s)
|
||||||
|
return s == nil or s == ""
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.get_buf_option(opt)
|
||||||
|
local status_ok, buf_option = pcall(vim.api.nvim_buf_get_option, 0, opt)
|
||||||
|
if not status_ok then
|
||||||
|
return nil
|
||||||
|
else
|
||||||
|
return buf_option
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
|
@ -0,0 +1,154 @@
|
||||||
|
return {
|
||||||
|
kind = {
|
||||||
|
Array = "",
|
||||||
|
Boolean = "",
|
||||||
|
Class = "",
|
||||||
|
Color = "",
|
||||||
|
Constant = "",
|
||||||
|
Constructor = "",
|
||||||
|
Enum = "",
|
||||||
|
EnumMember = "",
|
||||||
|
Event = "",
|
||||||
|
Field = "",
|
||||||
|
File = "",
|
||||||
|
Folder = "",
|
||||||
|
Function = "",
|
||||||
|
Interface = "",
|
||||||
|
Key = "",
|
||||||
|
Keyword = "",
|
||||||
|
Method = "",
|
||||||
|
Module = "",
|
||||||
|
Namespace = "",
|
||||||
|
Null = "",
|
||||||
|
Number = "",
|
||||||
|
Object = "",
|
||||||
|
Operator = "",
|
||||||
|
Package = "",
|
||||||
|
Property = "",
|
||||||
|
Reference = "",
|
||||||
|
Snippet = "",
|
||||||
|
String = "",
|
||||||
|
Struct = "",
|
||||||
|
Text = "",
|
||||||
|
TypeParameter = "",
|
||||||
|
Unit = "",
|
||||||
|
Value = "",
|
||||||
|
Variable = "",
|
||||||
|
},
|
||||||
|
git = {
|
||||||
|
LineAdded = "",
|
||||||
|
LineModified = "",
|
||||||
|
LineRemoved = "",
|
||||||
|
FileDeleted = "",
|
||||||
|
FileIgnored = "◌",
|
||||||
|
FileRenamed = "",
|
||||||
|
FileStaged = "S",
|
||||||
|
FileUnmerged = "",
|
||||||
|
FileUnstaged = "",
|
||||||
|
FileUntracked = "U",
|
||||||
|
Diff = "",
|
||||||
|
Repo = "",
|
||||||
|
Octoface = "",
|
||||||
|
Branch = "",
|
||||||
|
},
|
||||||
|
ui = {
|
||||||
|
ArrowCircleDown = "",
|
||||||
|
ArrowCircleLeft = "",
|
||||||
|
ArrowCircleRight = "",
|
||||||
|
ArrowCircleUp = "",
|
||||||
|
BoldArrowDown = "",
|
||||||
|
BoldArrowLeft = "",
|
||||||
|
BoldArrowRight = "",
|
||||||
|
BoldArrowUp = "",
|
||||||
|
BoldClose = "",
|
||||||
|
BoldDividerLeft = "",
|
||||||
|
BoldDividerRight = "",
|
||||||
|
BoldLineLeft = "▎",
|
||||||
|
BookMark = "",
|
||||||
|
BoxChecked = "",
|
||||||
|
Bug = "",
|
||||||
|
Stacks = "",
|
||||||
|
Scopes = "",
|
||||||
|
Watches = "",
|
||||||
|
DebugConsole = "",
|
||||||
|
Calendar = "",
|
||||||
|
Check = "",
|
||||||
|
ChevronRight = "",
|
||||||
|
ChevronShortDown = "",
|
||||||
|
ChevronShortLeft = "",
|
||||||
|
ChevronShortRight = "",
|
||||||
|
ChevronShortUp = "",
|
||||||
|
Circle = " ",
|
||||||
|
Close = "",
|
||||||
|
CloudDownload = "",
|
||||||
|
Code = "",
|
||||||
|
Comment = "",
|
||||||
|
Dashboard = "",
|
||||||
|
DividerLeft = "",
|
||||||
|
DividerRight = "",
|
||||||
|
DoubleChevronRight = "»",
|
||||||
|
Ellipsis = "",
|
||||||
|
EmptyFolder = "",
|
||||||
|
EmptyFolderOpen = "",
|
||||||
|
File = "",
|
||||||
|
FileSymlink = "",
|
||||||
|
Files = "",
|
||||||
|
FindFile = "",
|
||||||
|
FindText = "",
|
||||||
|
Fire = "",
|
||||||
|
Folder = "",
|
||||||
|
FolderOpen = "",
|
||||||
|
FolderSymlink = "",
|
||||||
|
Forward = "",
|
||||||
|
Gear = "",
|
||||||
|
History = "",
|
||||||
|
Lightbulb = "",
|
||||||
|
LineLeft = "▏",
|
||||||
|
LineMiddle = "│",
|
||||||
|
List = "",
|
||||||
|
Lock = "",
|
||||||
|
NewFile = "",
|
||||||
|
Note = "",
|
||||||
|
Package = "",
|
||||||
|
Pencil = "",
|
||||||
|
Plus = "",
|
||||||
|
Project = "",
|
||||||
|
Search = "",
|
||||||
|
SignIn = "",
|
||||||
|
SignOut = "",
|
||||||
|
Tab = "",
|
||||||
|
Table = "",
|
||||||
|
Target = "",
|
||||||
|
Telescope = "",
|
||||||
|
Text = "",
|
||||||
|
Tree = "",
|
||||||
|
Triangle = "",
|
||||||
|
TriangleShortArrowDown = "",
|
||||||
|
TriangleShortArrowLeft = "",
|
||||||
|
TriangleShortArrowRight = "",
|
||||||
|
TriangleShortArrowUp = "",
|
||||||
|
},
|
||||||
|
diagnostics = {
|
||||||
|
BoldError = "",
|
||||||
|
Error = "",
|
||||||
|
BoldWarning = "",
|
||||||
|
Warning = "",
|
||||||
|
BoldInformation = "",
|
||||||
|
Information = "",
|
||||||
|
BoldQuestion = "",
|
||||||
|
Question = "",
|
||||||
|
BoldHint = "",
|
||||||
|
Hint = "",
|
||||||
|
Debug = "",
|
||||||
|
Trace = "✎",
|
||||||
|
},
|
||||||
|
misc = {
|
||||||
|
Robot = "",
|
||||||
|
Squirrel = "",
|
||||||
|
Tag = "",
|
||||||
|
Watch = "",
|
||||||
|
Smiley = "",
|
||||||
|
Package = "",
|
||||||
|
CircuitBoard = "",
|
||||||
|
},
|
||||||
|
}
|
Loading…
Reference in New Issue