added tabby and telescope tab for managing tabs in nvim

This commit is contained in:
jjwoz 2024-04-01 06:28:34 -04:00
parent 375591f85b
commit e7b01ccca5
3 changed files with 157 additions and 3 deletions

View file

@ -0,0 +1,115 @@
local theme = {
fill = 'TabLineFill',
head = 'TabLine',
current_tab = 'TabLineSel',
tab = 'TabLine',
win = 'TabLine',
tail = 'TabLine',
}
local open_tabs = {}
local tab_name = function(tab)
local api = require 'tabby.module.api'
local cur_win = api.get_tab_current_win(tab.id)
if api.is_float_win(cur_win) then
return '[Floating]'
end
local current_bufnr = vim.fn.getwininfo(cur_win)[1].bufnr
local current_bufinfo = vim.fn.getbufinfo(current_bufnr)[1]
local current_buf_name = vim.fn.fnamemodify(current_bufinfo.name, ':t')
-- local no_extension = vim.fn.fnamemodify(current_bufinfo.name, ":p:r")
if string.find(current_buf_name, 'NvimTree') ~= nil then
return '[File Explorer]'
end
if current_buf_name == 'NeogitStatus' then
return '[Neogit]'
end
if open_tabs[current_bufinfo.name] == nil then
local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ':p:h:t')
open_tabs[current_bufinfo.name] = project_name
end
if current_buf_name == '' then
return '[Empty]'
else
if open_tabs[current_bufinfo.name] == nil then
return current_buf_name
end
return open_tabs[current_bufinfo.name] .. ':' .. current_buf_name
end
end
local tab_count = function()
local num_tabs = #vim.api.nvim_list_tabpages()
if num_tabs > 1 then
local tabpage_number = tostring(vim.api.nvim_tabpage_get_number(0))
return tabpage_number .. '/' .. tostring(num_tabs)
end
end
local change_mark = function(tab)
local already_marked = false
return tab.wins().foreach(function(win)
local bufnr = vim.fn.getwininfo(win.id)[1].bufnr
local bufinfo = vim.fn.getbufinfo(bufnr)[1]
if not already_marked and bufinfo.changed == 1 then
already_marked = true
return ''
else
return ''
end
end)
end
local window_count = function(tab)
local api = require 'tabby.module.api'
local win_count = #api.get_tab_wins(tab.id)
if win_count == 1 then
return ''
else
return '[' .. win_count .. ']'
end
end
return {
'nanozuki/tabby.nvim',
event = 'VeryLazy',
config = function()
require('tabby.tabline').set(function(line)
return {
{
{ ' 󰓩 ', hl = theme.head },
{ tab_count(), hl = theme.head },
-- line.sep(" ", theme.head, theme.fill),
line.sep(' ', theme.head, theme.fill),
},
line.tabs().foreach(function(tab)
local hl = tab.is_current() and theme.current_tab or theme.tab
return {
-- line.sep("", hl, theme.fill),
line.sep('', hl, theme.fill),
tab.is_current() and '' or '',
tab_name(tab),
-- tab.close_btn("󰅖 "),
-- window_count(tab),
-- change_mark(tab),
-- line.sep(" ", hl, theme.fill),
line.sep('', hl, theme.fill),
hl = hl,
margin = ' ',
}
end),
hl = theme.fill,
}
end, {
buf_name = {
mode = 'unique',
},
})
end,
}

View file

@ -0,0 +1,26 @@
local M = {
'LukasPietzschmann/telescope-tabs',
event = 'VeryLazy',
}
function M.config()
local wk = require 'which-key'
wk.register {
['<leader>aa'] = {
"<cmd>lua require('telescope').extensions['telescope-tabs'].list_tabs(require('telescope.themes').get_dropdown{previewer = false, initial_mode='normal', prompt_title='Tabs'})<cr>",
'Find Tabs',
},
}
require('telescope-tabs').setup {
show_preview = false,
close_tab_shortcut_i = '<C-d>', -- if you're in insert mode
close_tab_shortcut_n = 'dd', -- if you're in normal mode
entry_formatter = function(tab_id, buffer_ids, file_names, file_paths, is_current)
local entry_string = table.concat(file_names, ', ')
return string.format('%d: %s%s', tab_id, entry_string, is_current and '' or '')
end,
}
end
return M