summaryrefslogtreecommitdiffstatshomepage
path: root/nvim/.config/nvim/lua/tobyvin/plugins/sessions.lua
blob: fd0e1ee73abe906bf2612c88d397a446ccd94db4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
local M = {
	"echasnovski/mini.sessions",
	name = "sessions",
	event = { "VimLeavePre" },
	dependencies = {
		"nvim-lua/plenary.nvim",
	},
	config = true,
}

function M.init()
	vim.keymap.set("n", "<leader>sr", function()
		require("mini.sessions").read()
	end, { desc = "read session" })

	vim.keymap.set("n", "<leader>sw", function()
		require("mini.sessions").write()
	end, { desc = "write session" })

	vim.keymap.set("n", "<leader>sd", function()
		require("mini.sessions").delete()
	end, { desc = "delete session" })

	vim.keymap.set("n", "<leader>ss", function()
		require("mini.sessions").select()
	end, { desc = "select session" })
end

function M.config()
	local session_dir = require("plenary.path"):new(vim.fn.stdpath("data")):joinpath("session")

	session_dir:mkdir()

	local session_name = function()
		if vim.v.this_session ~= "" then
			return vim.fn.fnamemodify(vim.v.this_session, ":t")
		end

		return vim.loop.cwd():gsub(":", "++"):gsub(session_dir.path.sep, "%%")
	end

	local read = require("mini.sessions").read
	require("mini.sessions").read = function(name)
		name = vim.F.if_nil(name, session_name())
		if session_dir:joinpath(name):exists() then
			read(name)
		else
			vim.notify("No session found", vim.log.levels.WARN)
		end
	end

	local write = require("mini.sessions").write
	require("mini.sessions").write = function(name)
		name = vim.F.if_nil(name, session_name())

		if not session_dir:joinpath(name):exists() or #vim.fn.getbufinfo({ buflisted = 1, bufloaded = 1 }) > 0 then
			write(name)
		end
	end

	local delete = require("mini.sessions").delete
	require("mini.sessions").delete = function(name)
		name = vim.F.if_nil(name, session_name())
		delete(name)
	end

	require("mini.sessions").setup()
end

return M