mirror of
https://github.com/sadan4/nvim.git
synced 2025-01-18 11:13:30 -05:00
192 lines
8.6 KiB
Lua
192 lines
8.6 KiB
Lua
vim.opt.termguicolors = true
|
|
-- test
|
|
local function get_listed_bufs()
|
|
return vim.tbl_filter(function(bufnr)
|
|
return vim.api.nvim_buf_get_option(bufnr, "buflisted")
|
|
end, vim.api.nvim_list_bufs())
|
|
end
|
|
-- print(vim.inspect(get_listed_bufs()))
|
|
local function close_empty_unnamed_buffers()
|
|
-- Get a list of all buffers
|
|
local buffers = vim.api.nvim_list_bufs()
|
|
local total = table.getn(get_listed_bufs())
|
|
local soFar = 0
|
|
-- Iterate over each buffer
|
|
for _, bufnr in ipairs(buffers) do
|
|
-- Check i f the buffer is empty and doesn't have a name
|
|
if
|
|
vim.api.nvim_buf_is_loaded(bufnr)
|
|
and vim.api.nvim_buf_get_name(bufnr) == ""
|
|
and vim.api.nvim_buf_get_option(bufnr, "buftype") == ""
|
|
then
|
|
-- Get all lines in the buffer
|
|
local lines = vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)
|
|
|
|
-- Initialize a variable to store the total number of characters
|
|
local total_characters = 0
|
|
|
|
-- Iterate over each line and calculate the number of characters
|
|
for _, line in ipairs(lines) do
|
|
total_characters = total_characters + #line
|
|
if total_characters ~= 0 then
|
|
break
|
|
end
|
|
end
|
|
|
|
-- Close the buffer i f it's empty:
|
|
if total_characters == 0 then
|
|
soFar = soFar + 1
|
|
end
|
|
end
|
|
end
|
|
if soFar == total then
|
|
vim.cmd("quit")
|
|
end
|
|
end
|
|
local close = function()
|
|
local bd = require("mini.bufremove").delete
|
|
if vim.bo.modified then
|
|
local choice = vim.fn.confirm(("Save changes to %q?"):format(vim.fn.bufname()), "&Yes\n&No\n&Cancel")
|
|
if choice == 1 then -- Yes
|
|
vim.cmd.write()
|
|
bd(0)
|
|
elseif choice == 2 then -- No
|
|
bd(0, true)
|
|
end
|
|
else
|
|
bd(0)
|
|
end
|
|
close_empty_unnamed_buffers()
|
|
end
|
|
vim.o.confirm = true
|
|
vim.api.nvim_create_autocmd("BufEnter", {
|
|
group = vim.api.nvim_create_augroup("NvimTreeClose", { clear = true }),
|
|
callback = function()
|
|
local layout = vim.api.nvim_call_function("winlayout", {})
|
|
if
|
|
layout[1] == "leaf"
|
|
and vim.api.nvim_buf_get_option(vim.api.nvim_win_get_buf(layout[2]), "filetype") == "NvimTree"
|
|
and layout[3] == nil
|
|
then
|
|
vim.cmd("quit")
|
|
end
|
|
end,
|
|
})
|
|
require("bufferline").setup({
|
|
options = {
|
|
mode = "buffers",
|
|
numbers = "buffer_id",
|
|
close_command = close,
|
|
right_mouse_command = close,
|
|
indicator = {
|
|
-- icon = "| ",
|
|
style = "icon",
|
|
},
|
|
color_icons = true, -- whether or not to add the filetype icon highlights
|
|
},
|
|
})
|
|
-- {
|
|
-- options = {
|
|
-- mode = "buffers", -- set to "tabs" to only show tabpages instead
|
|
-- style_preset = bufferline.style_preset.default, -- or bufferline.style_preset.minimal,
|
|
-- themable = true | false, -- allows highlight groups to be overriden i.e. sets highlights as default
|
|
-- numbers = "none" | "ordinal" | "buffer_id" | "both" | function({ ordinal, id, lower, raise }): string,
|
|
-- close_command = "bdelete! %d", -- can be a string | function, | false see "Mouse actions"
|
|
-- right_mouse_command = "bdelete! %d", -- can be a string | function | false, see "Mouse actions"
|
|
-- left_mouse_command = "buffer %d", -- can be a string | function, | false see "Mouse actions"
|
|
-- middle_mouse_command = nil, -- can be a string | function, | false see "Mouse actions"
|
|
-- indicator = {
|
|
-- icon = '▎', -- this should be omitted if indicator style is not 'icon'
|
|
-- style = 'icon' | 'underline' | 'none',
|
|
-- },
|
|
-- 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:
|
|
-- -- name | str | the basename of the active file
|
|
-- -- path | str | the full path of the active file
|
|
-- -- bufnr (buffer only) | int | the number of the active buffer
|
|
-- -- buffers (tabs only) | table(int) | the numbers of the buffers in the tab
|
|
-- -- tabnr (tabs only) | int | the "handle" of the tab, can be converted to its ordinal number using: `vim.api.nvim_tabpage_get_number(buf.tabnr)`
|
|
-- end,
|
|
-- 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,
|
|
-- diagnostics = false | "nvim_lsp" | "coc",
|
|
-- diagnostics_update_in_insert = false,
|
|
-- -- The diagnostics indicator can be set to nil to keep the buffer name highlight but delete the highlighting
|
|
-- diagnostics_indicator = function(count, level, diagnostics_dict, context)
|
|
-- return "("..count..")"
|
|
-- end,
|
|
-- -- NOTE: this will be called a lot so don't do any heavy processing here
|
|
-- custom_filter = function(buf_number, buf_numbers)
|
|
-- -- filter out filetypes you don't want to see
|
|
-- if vim.bo[buf_number].filetype ~= "<i-dont-want-to-see-this>" then
|
|
-- return true
|
|
-- end
|
|
-- -- filter out by buffer name
|
|
-- if vim.fn.bufname(buf_number) ~= "<buffer-name-I-dont-want>" then
|
|
-- return true
|
|
-- end
|
|
-- -- filter out based on arbitrary rules
|
|
-- -- e.g. filter out vim wiki buffer from tabline in your work repo
|
|
-- if vim.fn.getcwd() == "<work-repo>" and vim.bo[buf_number].filetype ~= "wiki" then
|
|
-- return true
|
|
-- end
|
|
-- -- filter out by it's index number in list (don't show first buffer)
|
|
-- if buf_numbers[1] ~= buf_number then
|
|
-- return true
|
|
-- end
|
|
-- end,
|
|
-- offsets = {
|
|
-- {
|
|
-- filetype = "NvimTree",
|
|
-- text = "File Explorer" | function ,
|
|
-- text_align = "left" | "center" | "right"
|
|
-- separator = true
|
|
-- }
|
|
-- },
|
|
-- color_icons = true | false, -- whether or not to add the filetype icon highlights
|
|
-- get_element_icon = function(element)
|
|
-- -- element consists of {filetype: string, path: string, extension: string, directory: string}
|
|
-- -- This can be used to change how bufferline fetches the icon
|
|
-- -- for an element e.g. a buffer or a tab.
|
|
-- -- e.g.
|
|
-- local icon, hl = require('nvim-web-devicons').get_icon_by_filetype(element.filetype, { default = false })
|
|
-- return icon, hl
|
|
-- -- or
|
|
-- local custom_map = {my_thing_ft: {icon = "my_thing_icon", hl}}
|
|
-- return custom_map[element.filetype]
|
|
-- end,
|
|
-- show_buffer_icons = true | false, -- disable filetype icons for buffers
|
|
-- show_buffer_close_icons = true | false,
|
|
-- show_close_icon = true | false,
|
|
-- show_tab_indicators = true | false,
|
|
-- show_duplicate_prefix = true | false, -- whether to show duplicate buffer prefix
|
|
-- duplicates_across_groups = true, -- whether to consider duplicate paths in different groups as duplicates
|
|
-- persist_buffer_sort = true, -- whether or not custom sorted buffers should persist
|
|
-- move_wraps_at_ends = false, -- whether or not the move command "wraps" at the first or last position
|
|
-- -- can also be a table containing 2 custom separators
|
|
-- -- [focused and unfocused]. eg: { '|', '|' }
|
|
-- separator_style = "slant" | "slope" | "thick" | "thin" | { 'any', 'any' },
|
|
-- enforce_regular_tabs = false | true,
|
|
-- always_show_bufferline = true | false,
|
|
-- auto_toggle_bufferline = true | false,
|
|
-- hover = {
|
|
-- enabled = true,
|
|
-- delay = 200,
|
|
-- reveal = {'close'}
|
|
-- },
|
|
-- sort_by = 'insert_after_current' |'insert_at_end' | 'id' | 'extension' | 'relative_directory' | 'directory' | 'tabs' | function(buffer_a, buffer_b)
|
|
-- -- add custom logic
|
|
-- return buffer_a.modified > buffer_b.modified
|
|
-- end
|
|
-- }
|
|
-- }
|