persisted.nvim/lua/telescope/_extensions/persisted/actions.lua

98 lines
2.7 KiB
Lua

local actions_state = require("telescope.actions.state")
local transform_mod = require("telescope.actions.mt").transform_mod
local persisted = require("persisted")
local config = persisted.config
local M = {}
---Fire an event
---@param event string
local function fire(event)
vim.api.nvim_exec_autocmds("User", { pattern = "Persisted" .. event })
end
---Get the selected session from Telescope
---@return table
local function get_selected_session()
return actions_state.get_selected_entry()
end
---Load the selected session
---@param session table
function M.load_session(session)
fire("TelescopeLoadPre")
vim.api.nvim_create_autocmd("User", {
pattern = "PersistedLoadPost",
callback = function()
vim.print("session loaded!!!")
fire("TelescopeLoadPost")
return true -- returning deletes autocmd after fired
end,
})
vim.api.nvim_create_autocmd("User", {
pattern = "PersistedSavePost",
callback = function()
-- vim.schedule(function()
vim.print("delete and load")
-- for _, buf in ipairs(vim.api.nvim_list_bufs()) do
-- vim.api.nvim_buf_delete(buf, { force = true })
-- end
-- persisted.load({ session = session.file_path })
-- end)
return true
end,
})
persisted.save({ session = vim.g.persisted_loaded_session })
end
---Delete the selected session from disk
function M.delete_session()
local session = get_selected_session()
if vim.fn.confirm("Delete [" .. session.name .. "]?", "&Yes\n&No") == 1 then
vim.fn.delete(vim.fn.expand(session.file_path))
end
end
---Change the branch of an existing session
function M.change_branch()
local session = get_selected_session()
local path = session.file_path
local branch = vim.fn.input("Branch name: ")
if vim.fn.confirm("Add/update branch to [" .. branch .. "]?", "&Yes\n&No") == 1 then
local ext = path:match("^.+(%..+)$")
-- Check for existing branch in the filename
local pattern = "(.*)@@.+" .. ext .. "$"
local base = path:match(pattern) or path:sub(1, #path - #ext)
-- Replace or add the new branch name
local new_path = ""
if branch == "" then
new_path = base .. ext
else
new_path = base .. "@@" .. branch .. ext
end
os.rename(path, new_path)
end
end
---Copy an existing session
function M.copy_session()
local session = get_selected_session()
local old_name = session.file_path:gsub(config.save_dir, "")
local new_name = vim.fn.input("New session name: ", old_name)
if vim.fn.confirm("Rename session from [" .. old_name .. "] to [" .. new_name .. "]?", "&Yes\n&No") == 1 then
os.execute("cp " .. session.file_path .. " " .. config.save_dir .. new_name)
end
end
return transform_mod(M)