From a5ff72a8da0df1042ee4c7705c301901062fa6d5 Mon Sep 17 00:00:00 2001 From: Steven Arcangeli Date: Fri, 30 Jun 2023 00:55:38 -0700 Subject: [PATCH] fix: url-escape paths for scp (#134) --- lua/oil/adapters/ssh.lua | 3 ++- lua/oil/util.lua | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/lua/oil/adapters/ssh.lua b/lua/oil/adapters/ssh.lua index 88b1836..d8cc33b 100644 --- a/lua/oil/adapters/ssh.lua +++ b/lua/oil/adapters/ssh.lua @@ -75,7 +75,8 @@ local function url_to_scp(url) table.insert(pieces, string.format(":%d", url.port)) end table.insert(pieces, "/") - table.insert(pieces, url.path) + local escaped_path = util.url_escape(url.path) + table.insert(pieces, escaped_path) return table.concat(pieces, "") end diff --git a/lua/oil/util.lua b/lua/oil/util.lua index a51031d..ba3d140 100644 --- a/lua/oil/util.lua +++ b/lua/oil/util.lua @@ -23,6 +23,40 @@ M.escape_filename = function(filename) return ret end +local _url_escape_chars = { + [" "] = "%20", + ["$"] = "%24", + ["&"] = "%26", + ["`"] = "%60", + [":"] = "%3A", + ["<"] = "%3C", + ["="] = "%3D", + [">"] = "%3E", + ["?"] = "%3F", + ["["] = "%5B", + ["\\"] = "%5C", + ["]"] = "%5D", + ["^"] = "%5E", + ["{"] = "%7B", + ["|"] = "%7C", + ["}"] = "%7D", + ["~"] = "%7E", + ["“"] = "%22", + ["‘"] = "%27", + ["+"] = "%2B", + [","] = "%2C", + ["#"] = "%23", + ["%"] = "%25", + ["@"] = "%40", + ["/"] = "%2F", + [";"] = "%3B", +} +---@param string string +---@return string +M.url_escape = function(string) + return (string:gsub(".", _url_escape_chars)) +end + ---@param bufnr integer ---@return nil|oil.Adapter M.get_adapter = function(bufnr)