diff options
Diffstat (limited to 'lua/lvim')
| -rw-r--r-- | lua/lvim/core/breadcrumbs.lua | 204 | ||||
| -rw-r--r-- | lua/lvim/core/builtins/init.lua | 1 | ||||
| -rw-r--r-- | lua/lvim/lsp/init.lua | 10 | ||||
| -rw-r--r-- | lua/lvim/plugins.lua | 9 | ||||
| -rw-r--r-- | lua/lvim/utils/functions.lua | 13 | 
5 files changed, 237 insertions, 0 deletions
| diff --git a/lua/lvim/core/breadcrumbs.lua b/lua/lvim/core/breadcrumbs.lua new file mode 100644 index 00000000..3b038473 --- /dev/null +++ b/lua/lvim/core/breadcrumbs.lua @@ -0,0 +1,204 @@ +local M = {} + +-- local Log = require "lvim.core.log" + +M.config = function() +  local status_ok, navic = pcall(require, "nvim-navic") +  if not status_ok then +    return +  end + +  navic.setup { +    icons = { +      Text = " ", +      -- Method = "m", +      -- Function = "", +      -- Constructor = "", +      Method = " ", +      Function = " ", +      Constructor = " ", +      Field = " ", +      -- Variable = "", +      Variable = " ", +      Class = " ", +      Interface = " ", +      -- Module = "", +      Module = " ", +      Property = " ", +      Unit = " ", +      Value = " ", +      Enum = " ", +      -- Keyword = "", +      Keyword = " ", +      -- Snippet = "", +      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.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 + +M.create_winbar() + +return M diff --git a/lua/lvim/core/builtins/init.lua b/lua/lvim/core/builtins/init.lua index afb19b63..14afe4ea 100644 --- a/lua/lvim/core/builtins/init.lua +++ b/lua/lvim/core/builtins/init.lua @@ -11,6 +11,7 @@ local builtins = {    "lvim.core.nvimtree",    "lvim.core.lir",    "lvim.core.illuminate", +  "lvim.core.breadcrumbs",    "lvim.core.project",    "lvim.core.bufferline",    "lvim.core.autopairs", diff --git a/lua/lvim/lsp/init.lua b/lua/lvim/lsp/init.lua index 0b361972..ac3f6925 100644 --- a/lua/lvim/lsp/init.lua +++ b/lua/lvim/lsp/init.lua @@ -60,6 +60,15 @@ function M.common_on_init(client, bufnr)    end  end +local function attach_navic(client, bufnr) +  vim.g.navic_silence = true +  local status_ok, navic = pcall(require, "nvim-navic") +  if not status_ok then +    return +  end +  navic.attach(client, bufnr) +end +  function M.common_on_attach(client, bufnr)    if lvim.lsp.on_attach_callback then      lvim.lsp.on_attach_callback(client, bufnr) @@ -74,6 +83,7 @@ function M.common_on_attach(client, bufnr)    end    add_lsp_buffer_keybindings(bufnr)    add_lsp_buffer_options(bufnr) +  attach_navic(client, bufnr)  end  function M.get_common_opts() diff --git a/lua/lvim/plugins.lua b/lua/lvim/plugins.lua index 3d2a2b83..85c1e80e 100644 --- a/lua/lvim/plugins.lua +++ b/lua/lvim/plugins.lua @@ -202,6 +202,15 @@ local core_plugins = {      disable = not lvim.builtin.lualine.active,    }, +  -- breadcrumbs +  { +    "SmiteshP/nvim-navic", +    config = function() +      require("lvim.core.breadcrumbs").setup() +    end, +    -- disable = not lvim.builtin.breadcrumbs.active, +  }, +    {      "akinsho/bufferline.nvim",      config = function() diff --git a/lua/lvim/utils/functions.lua b/lua/lvim/utils/functions.lua index de46bc8a..1cb8ec8e 100644 --- a/lua/lvim/utils/functions.lua +++ b/lua/lvim/utils/functions.lua @@ -16,4 +16,17 @@ function M.smart_quit()    end  end +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 | 
