mirror of
https://github.com/LazyVim/LazyVim.git
synced 2025-08-06 10:55:00 +02:00
feat(extras): add extra for zoxide tabpage navigation
This commit is contained in:
parent
eb8ddea8c9
commit
eef8a93cb4
1 changed files with 116 additions and 0 deletions
116
lua/lazyvim/plugins/extras/ui/zoxide-tabpage.lua
Normal file
116
lua/lazyvim/plugins/extras/ui/zoxide-tabpage.lua
Normal file
|
@ -0,0 +1,116 @@
|
|||
---action after zoxide dir selection
|
||||
---@param path string
|
||||
local function action(path)
|
||||
vim.cmd("tabnew")
|
||||
vim.cmd.tcd(path)
|
||||
vim.cmd("setl bufhidden=wipe")
|
||||
LazyVim.pick()()
|
||||
end
|
||||
|
||||
return {
|
||||
-- tabpage rename with cmd name
|
||||
{
|
||||
"akinsho/bufferline.nvim",
|
||||
opts = function(_, opts)
|
||||
-- custom tabpage naming pattern
|
||||
local function getCurrentCwdDirName()
|
||||
local cwd = vim.uv.cwd()
|
||||
if cwd == nil then
|
||||
vim.notify("Cwd is nil!", vim.log.levels.ERROR, nil)
|
||||
return "error"
|
||||
end
|
||||
return cwd:match("([^/\\]+)$")
|
||||
end
|
||||
|
||||
-- auto-rename tab when enter
|
||||
vim.api.nvim_create_autocmd("TabNewEntered", {
|
||||
callback = function()
|
||||
-- Schedule the renaming after the tab is fully entered
|
||||
vim.schedule(function()
|
||||
vim.cmd("BufferLineTabRename " .. getCurrentCwdDirName())
|
||||
end)
|
||||
end,
|
||||
})
|
||||
|
||||
local function renameAllTabs()
|
||||
local current_tab = vim.fn.tabpagenr()
|
||||
for tabnr = 1, vim.fn.tabpagenr("$") do
|
||||
vim.cmd(tabnr .. "tabnext") -- Switch to the tab with the number `tabnr`
|
||||
vim.cmd("BufferLineTabRename " .. getCurrentCwdDirName()) -- Rename the tab
|
||||
vim.cmd(current_tab .. "tabnext")
|
||||
end
|
||||
end
|
||||
|
||||
-- hook into persistence.nvim to rename tabs after restoring a session
|
||||
vim.api.nvim_create_autocmd("User", {
|
||||
pattern = "PersistenceLoadPost",
|
||||
once = true,
|
||||
callback = function()
|
||||
vim.defer_fn(function()
|
||||
if vim.fn.exists(":BufferLineTabRename") == 2 then
|
||||
renameAllTabs()
|
||||
end
|
||||
end, 1000)
|
||||
end,
|
||||
})
|
||||
return opts
|
||||
end,
|
||||
},
|
||||
-- snacks picker integration
|
||||
{
|
||||
"folke/snacks.nvim",
|
||||
optional = true,
|
||||
opts = {
|
||||
picker = {
|
||||
---@type table<string, snacks.picker.Config|{}>
|
||||
sources = {
|
||||
zoxide = {
|
||||
confirm = function(picker, item)
|
||||
picker:close()
|
||||
if item then
|
||||
action(item.text)
|
||||
end
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
keys = {
|
||||
{
|
||||
"<leader>sz",
|
||||
function()
|
||||
Snacks.picker.zoxide()
|
||||
end,
|
||||
desc = "Zoxide",
|
||||
},
|
||||
},
|
||||
},
|
||||
-- telescope integration
|
||||
{
|
||||
"nvim-telescope/telescope.nvim",
|
||||
optional = true,
|
||||
dependencies = {
|
||||
"jvgrootveld/telescope-zoxide",
|
||||
},
|
||||
opts = {
|
||||
extensions = {
|
||||
zoxide = {
|
||||
mappings = {
|
||||
default = {
|
||||
action = function(selection)
|
||||
action(selection.path)
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
keys = {
|
||||
{
|
||||
"<leader>sz",
|
||||
[[<cmd>Telescope zoxide list theme=dropdown previewer=false<cr>]],
|
||||
desc = "Zoxide",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue