mirror of
https://github.com/LunarVim/LunarVim.git
synced 2025-08-29 14:28:18 +02:00
feat: use bufferline instead of barbar (#2254)
This commit is contained in:
parent
9eb8479b39
commit
24537be03e
4 changed files with 136 additions and 15 deletions
|
@ -1,5 +1,38 @@
|
||||||
local M = {}
|
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()
|
M.config = function()
|
||||||
lvim.builtin.bufferline = {
|
lvim.builtin.bufferline = {
|
||||||
active = true,
|
active = true,
|
||||||
|
@ -7,11 +40,99 @@ M.config = function()
|
||||||
keymap = {
|
keymap = {
|
||||||
normal_mode = {},
|
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
|
end
|
||||||
|
|
||||||
M.setup = function()
|
M.setup = function()
|
||||||
require("lvim.keymappings").load(lvim.builtin.bufferline.keymap)
|
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
|
if lvim.builtin.bufferline.on_config_done then
|
||||||
lvim.builtin.bufferline.on_config_done()
|
lvim.builtin.bufferline.on_config_done()
|
||||||
|
|
|
@ -67,30 +67,30 @@ M.config = function()
|
||||||
["w"] = { "<cmd>w!<CR>", "Save" },
|
["w"] = { "<cmd>w!<CR>", "Save" },
|
||||||
["q"] = { "<cmd>q!<CR>", "Quit" },
|
["q"] = { "<cmd>q!<CR>", "Quit" },
|
||||||
["/"] = { "<cmd>lua require('Comment.api').toggle_current_linewise()<CR>", "Comment" },
|
["/"] = { "<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" },
|
["f"] = { require("lvim.core.telescope.custom-finders").find_project_files, "Find File" },
|
||||||
["h"] = { "<cmd>nohlsearch<CR>", "No Highlight" },
|
["h"] = { "<cmd>nohlsearch<CR>", "No Highlight" },
|
||||||
b = {
|
b = {
|
||||||
name = "Buffers",
|
name = "Buffers",
|
||||||
j = { "<cmd>BufferPick<cr>", "Jump" },
|
j = { "<cmd>BufferLinePick<cr>", "Jump" },
|
||||||
f = { "<cmd>Telescope buffers<cr>", "Find" },
|
f = { "<cmd>Telescope buffers<cr>", "Find" },
|
||||||
b = { "<cmd>b#<cr>", "Previous" },
|
b = { "<cmd>BufferLineCyclePrev<cr>", "Previous" },
|
||||||
w = { "<cmd>BufferWipeout<cr>", "Wipeout" },
|
-- w = { "<cmd>BufferWipeout<cr>", "Wipeout" }, -- TODO: implement this for bufferline
|
||||||
e = {
|
e = {
|
||||||
"<cmd>BufferCloseAllButCurrent<cr>",
|
"<cmd>BufferLinePickClose<cr>",
|
||||||
"Close all but current",
|
"Pick which buffer to close",
|
||||||
},
|
},
|
||||||
h = { "<cmd>BufferCloseBuffersLeft<cr>", "Close all to the left" },
|
h = { "<cmd>BufferLineCloseLeft<cr>", "Close all to the left" },
|
||||||
l = {
|
l = {
|
||||||
"<cmd>BufferCloseBuffersRight<cr>",
|
"<cmd>BufferLineCloseRight<cr>",
|
||||||
"Close all to the right",
|
"Close all to the right",
|
||||||
},
|
},
|
||||||
D = {
|
D = {
|
||||||
"<cmd>BufferOrderByDirectory<cr>",
|
"<cmd>BufferLineSortByDirectory<cr>",
|
||||||
"Sort by directory",
|
"Sort by directory",
|
||||||
},
|
},
|
||||||
L = {
|
L = {
|
||||||
"<cmd>BufferOrderByLanguage<cr>",
|
"<cmd>BufferLineSortByExtension<cr>",
|
||||||
"Sort by language",
|
"Sort by language",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -56,8 +56,8 @@ local defaults = {
|
||||||
["<C-Right>"] = ":vertical resize +2<CR>",
|
["<C-Right>"] = ":vertical resize +2<CR>",
|
||||||
|
|
||||||
-- Tab switch buffer
|
-- Tab switch buffer
|
||||||
["<S-l>"] = ":BufferNext<CR>",
|
["<S-l>"] = ":BufferLineCycleNext<CR>",
|
||||||
["<S-h>"] = ":BufferPrevious<CR>",
|
["<S-h>"] = ":BufferLineCyclePrev<CR>",
|
||||||
|
|
||||||
-- Move current line / block with Alt-j/k a la vscode.
|
-- Move current line / block with Alt-j/k a la vscode.
|
||||||
["<A-j>"] = ":m .+1<CR>==",
|
["<A-j>"] = ":m .+1<CR>==",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
local commit = {
|
local commit = {
|
||||||
barbar = "6e638309efcad2f308eb9c5eaccf6f62b794bbab",
|
bufferline = "7451dfc97d28e6783dbeb1cdcff12619a9323c98",
|
||||||
cmp_buffer = "f83773e2f433a923997c5faad7ea689ec24d1785",
|
cmp_buffer = "f83773e2f433a923997c5faad7ea689ec24d1785",
|
||||||
cmp_luasnip = "d6f837f4e8fe48eeae288e638691b91b97d1737f",
|
cmp_luasnip = "d6f837f4e8fe48eeae288e638691b91b97d1737f",
|
||||||
cmp_nvim_lsp = "ebdfc204afb87f15ce3d3d3f5df0b8181443b5ba",
|
cmp_nvim_lsp = "ebdfc204afb87f15ce3d3d3f5df0b8181443b5ba",
|
||||||
|
@ -224,8 +224,8 @@ return {
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"romgrk/barbar.nvim",
|
"akinsho/bufferline.nvim",
|
||||||
commit = commit.barbar,
|
commit = commit.bufferline,
|
||||||
config = function()
|
config = function()
|
||||||
require("lvim.core.bufferline").setup()
|
require("lvim.core.bufferline").setup()
|
||||||
end,
|
end,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue