local M = {}
M.config = function()
vim.cmd "function! TbToggle_theme(a,b,c,d) \n lua require('user.theme').toggle_theme() \n endfunction"
vim.cmd "function! Quit_vim(a,b,c,d) \n qa \n endfunction"
local kind = require "user.lsp_kind"
lvim.builtin.bufferline.highlights = {
background = { italic = true },
buffer_selected = { bold = true },
}
if lvim.builtin.time_based_themes then
lvim.builtin.bufferline.highlights.fill = {
bg = {
attribute = "bg",
highlight = "NormalNC",
},
}
end
local g_ok, bufferline_groups = pcall(require, "bufferline.groups")
if not g_ok then
bufferline_groups = {
builtin = {
pinned = {
name = "pinned",
with = function(_ico) end,
},
ungroupued = { name = "ungrouped" },
},
}
end
lvim.builtin.bufferline.options = {
navigation = { mode = "uncentered" },
diagnostics = false, -- do not show diagnostics in bufferline
diagnostics_indicator = function(_, _, diagnostics)
local result = {}
local symbols = { error = kind.icons.error, warning = kind.icons.warn, info = kind.icons.info }
for name, count in pairs(diagnostics) do
if symbols[name] and count > 0 then
table.insert(result, symbols[name] .. count)
end
end
local res = table.concat(result, " ")
return #res > 0 and res or ""
end,
mode = "buffers",
sort_by = "insert_after_current",
always_show_bufferline = false,
groups = {
options = {
toggle_hidden_on_enter = true,
},
items = {
bufferline_groups.builtin.pinned:with { icon = "" },
bufferline_groups.builtin.ungrouped,
{
name = "Internals",
highlight = { fg = "#ECBE7B" },
matcher = function(buf)
return vim.startswith(buf.path, vim.env.VIMRUNTIME) or vim.startswith(buf.path, _G.get_runtime_dir())
end,
},
{
highlight = { sp = "#51AFEF" },
name = "Tests",
icon = kind.icons.test,
matcher = function(buf)
local name = vim.api.nvim_buf_get_name(buf.id)
return name:match "_spec" or name:match "_test" or name:match "test_"
end,
},
{
name = "Terraform",
matcher = function(buf)
return buf.name:match "%.tf" ~= nil
end,
},
{
name = "SQL",
matcher = function(buf)
local name = vim.api.nvim_buf_get_name(buf.id)
return name:match "%.sql$"
end,
},
{
name = "View models",
highlight = { sp = "#03589C" },
matcher = function(buf)
local name = vim.api.nvim_buf_get_name(buf.id)
return name:match "view_model%.dart"
end,
},
{
name = "Screens",
icon = kind.icons.screen,
matcher = function(buf)
return buf.path:match "screen"
end,
},
{
highlight = { sp = "#C678DD" },
name = "Docs",
matcher = function(buf)
for _, ext in ipairs { "md", "txt", "org", "norg", "wiki" } do
if ext == vim.fn.fnamemodify(buf.path, ":e") then
return true
end
end
end,
},
{
highlight = { sp = "#F6A878" },
name = "Config",
matcher = function(buf)
local name = vim.api.nvim_buf_get_name(buf.id)
local filename_arr = vim.split(name, "/", { plain = true })
local filename = nil
if #filename_arr > 0 then
filename = filename_arr[#filename_arr]
end
if filename == nil then
return false
end
return filename:match "go.mod"
or filename:match "go.sum"
or filename:match "Cargo.toml"
or filename:match "manage.py"
or filename:match "Makefile"
end,
},
{
name = "Terms",
auto_close = true,
matcher = function(buf)
return buf.path:match "term://" ~= nil
end,
},
},
},
hover = { enabled = true, reveal = { "close" } },
offsets = {
{
text = "EXPLORER",
filetype = "neo-tree",
highlight = "PanelHeading",
text_align = "left",
separator = true,
},
{
text = " FLUTTER OUTLINE",
filetype = "flutterToolsOutline",
highlight = "PanelHeading",
separator = true,
},
{
text = "UNDOTREE",
filetype = "undotree",
highlight = "PanelHeading",
separator = true,
},
{
text = " LAZY",
filetype = "lazy",
highlight = "PanelHeading",
separator = true,
},
{
text = " DATABASE VIEWER",
filetype = "dbui",
highlight = "PanelHeading",
separator = true,
},
{
text = " DIFF VIEW",
filetype = "DiffviewFiles",
highlight = "PanelHeading",
separator = true,
},
},
separator_style = vim.env.KITTY_WINDOW_ID and "slant" or "thin",
right_mouse_command = "vert sbuffer %d",
show_close_icon = false,
-- indicator = { },
indicator = {
icon = "", -- this should be omitted if indicator style is not 'icon'
, -- can also be 'underline'|'none',
},
max_name_length = 18,
max_prefix_length = 15, -- prefix used when a buffer is de-duplicated
truncate_names = true, -- whether or not tab names should be truncated
tab_size = 18,
color_icons = true,
show_buffer_close_icons = true,
diagnostics_update_in_insert = false,
}
if lvim.builtin.time_based_themes then
lvim.builtin.bufferline.options.custom_areas = {
right = function()
return {
{ text = "%@TbToggle_theme@" .. vim.g.toggle_theme_icon .. "%X" },
{ text = "%@Quit_vim@ %X", fg = "#f7768e" },
}
end,
}
end
end
M.delete_buffer = function()
local fn = vim.fn
local cmd = vim.cmd
local buflisted = fn.getbufinfo { buflisted = 1 }
local cur_winnr, cur_bufnr = fn.winnr(), fn.bufnr()
if #buflisted < 2 then
cmd "confirm qall"
return
end
for _, winid in ipairs(fn.getbufinfo(cur_bufnr)[1].windows) do
cmd(string.format("%d wincmd w", fn.win_id2win(winid)))
cmd(cur_bufnr == buflisted[#buflisted].bufnr and "bp" or "bn")
end
cmd(string.format("%d wincmd w", cur_winnr))
local is_terminal = fn.getbufvar(cur_bufnr, "&buftype") == "terminal"
cmd(is_terminal and "bd! #" or "silent! confirm bd #")
end
return M