diff options
Diffstat (limited to 'lua/lvim/core')
| -rw-r--r-- | lua/lvim/core/bufferline.lua | 121 | ||||
| -rw-r--r-- | lua/lvim/core/which-key.lua | 20 | 
2 files changed, 131 insertions, 10 deletions
| diff --git a/lua/lvim/core/bufferline.lua b/lua/lvim/core/bufferline.lua index 4f7493d6..06de3ac4 100644 --- a/lua/lvim/core/bufferline.lua +++ b/lua/lvim/core/bufferline.lua @@ -1,5 +1,38 @@  local M = {} +local function is_ft(b, ft) +  return vim.bo[b].filetype == ft +end + +local function diagnostics_indicator(_, _, diagnostics) +  local result = {} +  local symbols = { error = "", warning = "", info = "" } +  for name, count in pairs(diagnostics) do +    if symbols[name] and count > 0 then +      table.insert(result, symbols[name] .. count) +    end +  end +  result = table.concat(result, " ") +  return #result > 0 and result or "" +end + +local function custom_filter(buf, buf_nums) +  local logs = vim.tbl_filter(function(b) +    return is_ft(b, "log") +  end, buf_nums) +  if vim.tbl_isempty(logs) then +    return true +  end +  local tab_num = vim.fn.tabpagenr() +  local last_tab = vim.fn.tabpagenr "$" +  local is_log = is_ft(buf, "log") +  if last_tab == 1 then +    return true +  end +  -- only show log buffers in secondary tabs +  return (tab_num == last_tab and is_log) or (tab_num ~= last_tab and not is_log) +end +  M.config = function()    lvim.builtin.bufferline = {      active = true, @@ -7,11 +40,99 @@ M.config = function()      keymap = {        normal_mode = {},      }, +    highlights = { +      background = { +        gui = "italic", +      }, +      buffer_selected = { +        gui = "bold", +      }, +    }, +    options = { +      numbers = "none", -- can be "none" | "ordinal" | "buffer_id" | "both" | function +      close_command = "bdelete! %d", -- can be a string | function, see "Mouse actions" +      right_mouse_command = "vert sbuffer %d", -- can be a string | function, see "Mouse actions" +      left_mouse_command = "buffer %d", -- can be a string | function, see "Mouse actions" +      middle_mouse_command = nil, -- can be a string | function, see "Mouse actions" +      -- NOTE: this plugin is designed with this icon in mind, +      -- and so changing this is NOT recommended, this is intended +      -- as an escape hatch for people who cannot bear it for whatever reason +      indicator_icon = "▎", +      buffer_close_icon = "", +      modified_icon = "●", +      close_icon = "", +      left_trunc_marker = "", +      right_trunc_marker = "", +      --- name_formatter can be used to change the buffer's label in the bufferline. +      --- Please note some names can/will break the +      --- bufferline so use this at your discretion knowing that it has +      --- some limitations that will *NOT* be fixed. +      name_formatter = function(buf) -- buf contains a "name", "path" and "bufnr" +        -- remove extension from markdown files for example +        if buf.name:match "%.md" then +          return vim.fn.fnamemodify(buf.name, ":t:r") +        end +      end, +      max_name_length = 18, +      max_prefix_length = 15, -- prefix used when a buffer is de-duplicated +      tab_size = 18, +      diagnostics = "nvim_lsp", +      diagnostics_update_in_insert = false, +      diagnostics_indicator = diagnostics_indicator, +      -- NOTE: this will be called a lot so don't do any heavy processing here +      custom_filter = custom_filter, +      offsets = { +        { +          filetype = "undotree", +          text = "Undotree", +          highlight = "PanelHeading", +          padding = 1, +        }, +        { +          filetype = "NvimTree", +          text = "Explorer", +          highlight = "PanelHeading", +          padding = 1, +        }, +        { +          filetype = "DiffviewFiles", +          text = "Diff View", +          highlight = "PanelHeading", +          padding = 1, +        }, +        { +          filetype = "flutterToolsOutline", +          text = "Flutter Outline", +          highlight = "PanelHeading", +        }, +        { +          filetype = "packer", +          text = "Packer", +          highlight = "PanelHeading", +          padding = 1, +        }, +      }, +      show_buffer_icons = true, -- disable filetype icons for buffers +      show_buffer_close_icons = true, +      show_close_icon = false, +      show_tab_indicators = true, +      persist_buffer_sort = true, -- whether or not custom sorted buffers should persist +      -- can also be a table containing 2 custom separators +      -- [focused and unfocused]. eg: { '|', '|' } +      separator_style = "thin", +      enforce_regular_tabs = false, +      always_show_bufferline = false, +      sort_by = "id", +    },    }  end  M.setup = function()    require("lvim.keymappings").load(lvim.builtin.bufferline.keymap) +  require("bufferline").setup { +    options = lvim.builtin.bufferline.options, +    highlights = lvim.builtin.bufferline.highlights, +  }    if lvim.builtin.bufferline.on_config_done then      lvim.builtin.bufferline.on_config_done() diff --git a/lua/lvim/core/which-key.lua b/lua/lvim/core/which-key.lua index 8691a9a6..194cb314 100644 --- a/lua/lvim/core/which-key.lua +++ b/lua/lvim/core/which-key.lua @@ -67,30 +67,30 @@ M.config = function()        ["w"] = { "<cmd>w!<CR>", "Save" },        ["q"] = { "<cmd>q!<CR>", "Quit" },        ["/"] = { "<cmd>lua require('Comment.api').toggle_current_linewise()<CR>", "Comment" }, -      ["c"] = { "<cmd>BufferClose!<CR>", "Close Buffer" }, +      ["c"] = { "<cmd>bdelete!<CR>", "Close Buffer" },        ["f"] = { require("lvim.core.telescope.custom-finders").find_project_files, "Find File" },        ["h"] = { "<cmd>nohlsearch<CR>", "No Highlight" },        b = {          name = "Buffers", -        j = { "<cmd>BufferPick<cr>", "Jump" }, +        j = { "<cmd>BufferLinePick<cr>", "Jump" },          f = { "<cmd>Telescope buffers<cr>", "Find" }, -        b = { "<cmd>b#<cr>", "Previous" }, -        w = { "<cmd>BufferWipeout<cr>", "Wipeout" }, +        b = { "<cmd>BufferLineCyclePrev<cr>", "Previous" }, +        -- w = { "<cmd>BufferWipeout<cr>", "Wipeout" }, -- TODO: implement this for bufferline          e = { -          "<cmd>BufferCloseAllButCurrent<cr>", -          "Close all but current", +          "<cmd>BufferLinePickClose<cr>", +          "Pick which buffer to close",          }, -        h = { "<cmd>BufferCloseBuffersLeft<cr>", "Close all to the left" }, +        h = { "<cmd>BufferLineCloseLeft<cr>", "Close all to the left" },          l = { -          "<cmd>BufferCloseBuffersRight<cr>", +          "<cmd>BufferLineCloseRight<cr>",            "Close all to the right",          },          D = { -          "<cmd>BufferOrderByDirectory<cr>", +          "<cmd>BufferLineSortByDirectory<cr>",            "Sort by directory",          },          L = { -          "<cmd>BufferOrderByLanguage<cr>", +          "<cmd>BufferLineSortByExtension<cr>",            "Sort by language",          },        }, | 
