fix(#925): handle newlines in file names (#2754)

This commit is contained in:
Alexander Courtis 2024-05-04 13:51:13 +10:00 committed by GitHub
parent 347e1eb352
commit 64f61e4c91
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 5 deletions

View File

@ -268,13 +268,14 @@ local function open_in_new_window(filename, mode)
local fname = vim.fn.fnameescape(filename)
fname = utils.escape_special_chars(fname)
local cmd
local command
if create_new_window then
cmd = string.format("%s vsplit %s", new_window_side, fname)
-- generated from vim.api.nvim_parse_cmd("belowright vsplit foo", {})
command = { cmd = "vsplit", mods = { split = new_window_side }, args = { fname } }
elseif mode:match "split$" then
cmd = string.format("%s %s", mode, fname)
command = { cmd = mode, args = { fname } }
else
cmd = string.format("edit %s", fname)
command = { cmd = "edit", args = { fname } }
end
if (mode == "preview" or mode == "preview_no_picker") and view.View.float.enable then
@ -286,7 +287,7 @@ local function open_in_new_window(filename, mode)
set_current_win_no_autocmd(target_winid, { "BufEnter" })
end
pcall(vim.cmd, cmd)
pcall(vim.cmd, command)
lib.set_target_win()
end

View File

@ -422,11 +422,21 @@ function Builder:build_header()
end
end
---Sanitize lines for rendering.
---Replace newlines with literal \n
---@private
function Builder:sanitize_lines()
self.lines = vim.tbl_map(function(line)
return line and line:gsub("\n", "\\n") or ""
end, self.lines)
end
---Build all lines with highlights and signs
---@return Builder
function Builder:build()
self:build_header()
self:build_lines()
self:sanitize_lines()
return self
end