diff --git a/lua/persisted/init.lua b/lua/persisted/init.lua index 3676e02..75900bb 100644 --- a/lua/persisted/init.lua +++ b/lua/persisted/init.lua @@ -12,12 +12,18 @@ function M.fire(event) vim.api.nvim_exec_autocmds("User", { pattern = "Persisted" .. event }) end ----Get the current session for the cwd and git branch +---Get the current working directory +---@return string +function M.cwd() + return utils.sanitize_dir(vim.fn.getcwd()) +end + +---Get the current session for the current working directory and git branch ---@param opts? {branch?: boolean} ---@return string function M.current(opts) opts = opts or {} - local name = vim.fn.getcwd():gsub("[\\/:]+", "%%") + local name = M.cwd() if config.use_git_branch and opts.branch ~= false then local branch = M.branch() @@ -120,12 +126,10 @@ function M.delete(opts) if session and uv.fs_stat(session) ~= 0 then M.fire("DeletePre") - vim.schedule(function() M.stop() vim.fn.system("rm " .. e(session)) end) - M.fire("DeletePost") end end @@ -142,15 +146,12 @@ end ---Determines whether to load, start or stop a session function M.toggle() M.fire("Toggle") - if vim.g.persisting == nil then return M.load() end - if vim.g.persisting then return M.stop() end - return M.start() end @@ -163,7 +164,7 @@ function M.allowed_dir(opts) end opts = opts or {} - local dir = opts.dir or vim.fn.getcwd() + local dir = opts.dir or M.cwd() return utils.dirs_match(dir, config.allowed_dirs) and not utils.dirs_match(dir, config.ignored_dirs) end diff --git a/lua/persisted/utils.lua b/lua/persisted/utils.lua index c69c3ca..bfd0bef 100644 --- a/lua/persisted/utils.lua +++ b/lua/persisted/utils.lua @@ -1,5 +1,11 @@ local M = {} +--- Escape special pattern matching characters in a string +---@param dir string +function M.sanitize_dir(dir) + return dir:gsub("[\\/:]+", "%%") +end + ---Get the directory pattern based on OS ---@return string function M.dir_pattern() @@ -10,19 +16,6 @@ function M.dir_pattern() return pattern end ---- Escape special pattern matching characters in a string ----@param input string ----@return string -function M.escape_dir_pattern(input) - local magic_chars = { "%", "(", ")", "+", "-", "*", "?", "[", "^", "$" } - - for _, char in ipairs(magic_chars) do - input = input:gsub("%" .. char, "%%" .. char) - end - - return input -end - ---Check if a directory is a subdirectory of another ---@param parent string ---@param child string @@ -36,17 +29,17 @@ end ---@param dirs table The table of directories to search in ---@return boolean function M.dirs_match(dir, dirs) - dir = M.escape_dir_pattern(vim.fn.expand(dir)) + dir = M.sanitize_dir(vim.fn.expand(dir)) for _, search in ipairs(dirs) do if type(search) == "string" then - search = M.escape_dir_pattern(vim.fn.expand(search)) + search = M.sanitize_dir(vim.fn.expand(search)) if M.is_subdirectory(search, dir) then return true end elseif type(search) == "table" then if search.exact then - search = M.escape_dir_pattern(vim.fn.expand(search[1])) + search = M.sanitize_dir(vim.fn.expand(search[1])) if dir == search then return true end