breadcrumbs.lua 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. local M = {}
  2. local icons = lvim.icons.kind
  3. local function select_menu_item()
  4. local menu = require("dropbar.api").get_current_dropbar_menu()
  5. if not menu then
  6. return
  7. end
  8. local cursor = vim.api.nvim_win_get_cursor(menu.win)
  9. local component = menu.entries[cursor[1]]:first_clickable(cursor[2])
  10. if component then
  11. menu:click_on(component, nil, 1, "l")
  12. end
  13. end
  14. local function close_menu()
  15. local menu = require("dropbar.api").get_current_dropbar_menu()
  16. if not menu then
  17. return false
  18. end
  19. menu:close()
  20. return true
  21. end
  22. local function close_all_menus()
  23. while close_menu() do
  24. end
  25. end
  26. M.config = function()
  27. lvim.builtin.breadcrumbs = {
  28. active = true,
  29. on_config_done = nil,
  30. options = {
  31. icons = {
  32. kinds = {
  33. symbols = {
  34. Array = icons.Array .. " ",
  35. Boolean = icons.Boolean .. " ",
  36. Class = icons.Class .. " ",
  37. Color = icons.Color .. " ",
  38. Constant = icons.Constant .. " ",
  39. Constructor = icons.Constructor .. " ",
  40. Enum = icons.Enum .. " ",
  41. EnumMember = icons.EnumMember .. " ",
  42. Event = icons.Event .. " ",
  43. Field = icons.Field .. " ",
  44. File = icons.File .. " ",
  45. Folder = icons.Folder .. " ",
  46. Function = icons.Function .. " ",
  47. Interface = icons.Interface .. " ",
  48. Key = icons.Key .. " ",
  49. Keyword = icons.Keyword .. " ",
  50. Method = icons.Method .. " ",
  51. Module = icons.Module .. " ",
  52. Namespace = icons.Namespace .. " ",
  53. Null = icons.Null .. " ",
  54. Number = icons.Number .. " ",
  55. Object = icons.Object .. " ",
  56. Operator = icons.Operator .. " ",
  57. Package = icons.Package .. " ",
  58. Property = icons.Property .. " ",
  59. Reference = icons.Reference .. " ",
  60. Snippet = icons.Snippet .. " ",
  61. String = icons.String .. " ",
  62. Struct = icons.Struct .. " ",
  63. Text = icons.Text .. " ",
  64. TypeParameter = icons.TypeParameter .. " ",
  65. Unit = icons.Unit .. " ",
  66. Value = icons.Value .. " ",
  67. Variable = icons.Variable .. " ",
  68. },
  69. },
  70. ui = {
  71. bar = {
  72. separator = " " .. lvim.icons.ui.ChevronRight .. " ",
  73. extends = "…",
  74. },
  75. -- menu = {
  76. -- separator = " ",
  77. -- indicator = lvim.icons.ui.TriangleShortArrowRight,
  78. -- -- indicator = " ",
  79. -- },
  80. },
  81. },
  82. menu = {
  83. quick_navigation = true,
  84. keymaps = {
  85. ["l"] = select_menu_item,
  86. ["h"] = close_menu,
  87. ["<ESC>"] = close_all_menus,
  88. ["q"] = close_all_menus,
  89. },
  90. win_configs = {
  91. border = "rounded",
  92. },
  93. },
  94. },
  95. }
  96. end
  97. M.setup = function()
  98. local status_ok, dropbar = pcall(require, "dropbar")
  99. if not status_ok then
  100. return
  101. end
  102. dropbar.setup(lvim.builtin.breadcrumbs.options)
  103. if lvim.builtin.breadcrumbs.on_config_done then
  104. lvim.builtin.breadcrumbs.on_config_done()
  105. end
  106. end
  107. return M