fix: improve displayed session names

* fix: sanitize string before passing to `string.gsub(...)`

fix: improve displayed paths on windows os

* chore: improve scripting for review
main
Demaro Stanberry 2023-02-28 14:55:55 -06:00 committed by GitHub
parent e3647c1087
commit 433e6d6808
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 24 additions and 5 deletions

View File

@ -193,22 +193,42 @@ function M.toggle()
return M.start()
end
---Escapes special characters before performing string substitution
---@param str string
---@param pattern string
---@param repl string|number|table|function
---@param n? integer
---@return string
---@return integer count
local function replace(str, pattern, repl, n)
pattern = string.gsub(pattern, "[%(%)%.%+%-%*%?%[%]%^%$%%]", "%%%1") -- escape pattern
repl = string.gsub(repl, "[%%]", "%%%%") -- escape replacement
return string.gsub(str, pattern, repl, n)
end
---List all of the sessions
---@return table
function M.list()
local save_dir = config.options.save_dir
local session_files = vim.fn.glob(save_dir .. "*.vim", true, true)
local branch_separator = config.options.branch_separator
local dir_separator = utils.get_dir_pattern()
local sessions = {}
for _, session in pairs(session_files) do
local session_name = session
:gsub(save_dir, "")
:gsub("%%", utils.get_dir_pattern())
:gsub(vim.fn.expand("~"), utils.get_dir_pattern())
local session_name = replace(session, save_dir, "")
:gsub("%%", dir_separator)
:gsub(vim.fn.expand("~"), dir_separator)
:gsub("//", "")
:sub(1, -5)
if vim.fn.has("win32") == 1 then
-- format drive letter (no trailing separator)
session_name = replace(session_name, dir_separator, ":", 1)
-- format remaining filepath separator(s)
session_name = replace(session_name, dir_separator, "\\")
end
local branch, dir_path
if string.find(session_name, branch_separator, 1, true) then
@ -226,7 +246,6 @@ function M.list()
["dir_path"] = dir_path,
})
end
return sessions
end