Selaa lähdekoodia

update dropbar

opalmay 1 vuosi sitten
vanhempi
commit
b26d9ff7ae

+ 1 - 0
lua/lvim/config/settings.lua

@@ -52,6 +52,7 @@ M.load_default_options = function()
     showcmd = false,
     ruler = false,
     laststatus = 3,
+    mousemoveevent = true,
   }
 
   ---  SETTINGS  ---

+ 0 - 3
lua/lvim/core/autocmds.lua

@@ -102,9 +102,6 @@ function M.load_defaults()
       {
         group = "_lvim_colorscheme",
         callback = function()
-          if lvim.builtin.breadcrumbs.active then
-            require("lvim.core.breadcrumbs").get_winbar()
-          end
           local statusline_hl = vim.api.nvim_get_hl_by_name("StatusLine", true)
           local cursorline_hl = vim.api.nvim_get_hl_by_name("CursorLine", true)
           local normal_hl = vim.api.nvim_get_hl_by_name("Normal", true)

+ 86 - 209
lua/lvim/core/breadcrumbs.lua

@@ -1,235 +1,112 @@
 local M = {}
 
--- local Log = require "lvim.core.log"
-
 local icons = lvim.icons.kind
 
+local function select_menu_item()
+  local menu = require("dropbar.api").get_current_dropbar_menu()
+  if not menu then
+    return
+  end
+  local cursor = vim.api.nvim_win_get_cursor(menu.win)
+  local component = menu.entries[cursor[1]]:first_clickable(cursor[2])
+  if component then
+    menu:click_on(component, nil, 1, "l")
+  end
+end
+
+local function close_menu()
+  local menu = require("dropbar.api").get_current_dropbar_menu()
+  if not menu then
+    return false
+  end
+  menu:close()
+  return true
+end
+
+local function close_all_menus()
+  while close_menu() do
+  end
+end
+
 M.config = function()
   lvim.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",
-      "",
-    },
     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 .. " ",
+        kinds = {
+          symbols = {
+            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 .. " ",
+          },
+        },
+        ui = {
+          bar = {
+            separator = " " .. lvim.icons.ui.ChevronRight .. " ",
+            extends = "…",
+          },
+          -- menu = {
+          --   separator = " ",
+          --   indicator = lvim.icons.ui.TriangleShortArrowRight,
+          --   -- indicator = " ",
+          -- },
+        },
+      },
+      menu = {
+        quick_navigation = true,
+        keymaps = {
+          ["l"] = select_menu_item,
+          ["h"] = close_menu,
+          ["<ESC>"] = close_all_menus,
+          ["q"] = close_all_menus,
+        },
       },
-      highlight = true,
-      separator = " " .. lvim.icons.ui.ChevronRight .. " ",
-      depth_limit = 0,
-      depth_limit_indicator = "..",
     },
   }
 end
 
 M.setup = function()
-  local status_ok, navic = pcall(require, "nvim-navic")
+  local status_ok, dropbar = pcall(require, "dropbar")
   if not status_ok then
     return
   end
-
-  M.create_winbar()
-  navic.setup(lvim.builtin.breadcrumbs.options)
+  dropbar.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, 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 = lvim.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 = 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
-    return "%#NavicSeparator#" .. lvim.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.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", {})
-  vim.api.nvim_create_autocmd({
-    "CursorHoldI",
-    "CursorHold",
-    "BufWinEnter",
-    "BufFilePost",
-    "InsertEnter",
-    "BufWritePost",
-    "TabClosed",
-    "TabEnter",
-  }, {
-    group = "_winbar",
-    callback = function()
-      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
-          -- TODO:
-          require("lvim.core.breadcrumbs").get_winbar()
-        end
-      end
-    end,
-  })
-end
-
 return M

+ 1 - 0
lua/lvim/core/illuminate.lua

@@ -32,6 +32,7 @@ M.config = function()
         "toggleterm",
         "DressingSelect",
         "TelescopePrompt",
+        "dropbar_menu",
       },
       -- filetypes_allowlist: filetypes to illuminate, this is overridden by filetypes_denylist
       filetypes_allowlist = {},

+ 1 - 0
lua/lvim/core/which-key.lua

@@ -297,6 +297,7 @@ M.config = function()
           "Colorscheme with Preview",
         },
       },
+      t = { "<cmd>lua require('dropbar.api').pick()<cr>", "Dropbar Menu" },
       T = {
         name = "Treesitter",
         i = { ":TSConfigInfo<cr>", "Info" },

+ 1 - 1
lua/lvim/plugins.lua

@@ -235,7 +235,7 @@ local core_plugins = {
 
   -- breadcrumbs
   {
-    "SmiteshP/nvim-navic",
+    "Bekaboo/dropbar.nvim",
     config = function()
       require("lvim.core.breadcrumbs").setup()
     end,

+ 3 - 3
snapshots/default.json

@@ -29,6 +29,9 @@
   "cmp_luasnip": {
     "commit": "05a9ab2"
   },
+  "dropbar.nvim": {
+    "commit": "9405df5"
+  },
   "friendly-snippets": {
     "commit": "53d3df2"
   },
@@ -80,9 +83,6 @@
   "nvim-lspconfig": {
     "commit": "fcf153f"
   },
-  "nvim-navic": {
-    "commit": "8649f69"
-  },
   "nvim-tree.lua": {
     "commit": "05f55c1"
   },