feat(sidebar): support files outside of the current working directory. (#1065)
This commit is contained in:
parent
24641d8264
commit
f401983737
@ -36,6 +36,7 @@ function FileSelector:add_selected_file(filepath)
|
|||||||
if not filepath or filepath == "" then return end
|
if not filepath or filepath == "" then return end
|
||||||
|
|
||||||
local uniform_path = Utils.uniform_path(filepath)
|
local uniform_path = Utils.uniform_path(filepath)
|
||||||
|
|
||||||
-- Avoid duplicates
|
-- Avoid duplicates
|
||||||
if not vim.tbl_contains(self.selected_filepaths, uniform_path) then
|
if not vim.tbl_contains(self.selected_filepaths, uniform_path) then
|
||||||
table.insert(self.selected_filepaths, uniform_path)
|
table.insert(self.selected_filepaths, uniform_path)
|
||||||
@ -273,11 +274,16 @@ end
|
|||||||
function FileSelector:get_selected_files_contents()
|
function FileSelector:get_selected_files_contents()
|
||||||
local contents = {}
|
local contents = {}
|
||||||
for _, file_path in ipairs(self.selected_filepaths) do
|
for _, file_path in ipairs(self.selected_filepaths) do
|
||||||
local file = io.open(file_path, "r")
|
local file, open_err = io.open(file_path, "r")
|
||||||
|
|
||||||
|
if open_err then Utils.debug("error reading file:", open_err) end
|
||||||
|
|
||||||
if file then
|
if file then
|
||||||
local content = file:read("*all")
|
local content, read_err = file:read("*all")
|
||||||
file:close()
|
file:close()
|
||||||
|
|
||||||
|
if read_err then Utils.debug("failed to read:", file_path, read_err) end
|
||||||
|
|
||||||
-- Detect the file type
|
-- Detect the file type
|
||||||
local filetype = vim.filetype.match({ filename = file_path, contents = contents }) or "unknown"
|
local filetype = vim.filetype.match({ filename = file_path, contents = contents }) or "unknown"
|
||||||
|
|
||||||
|
@ -1148,8 +1148,13 @@ function Sidebar:initialize()
|
|||||||
|
|
||||||
if not self.code.bufnr or not api.nvim_buf_is_valid(self.code.bufnr) then return self end
|
if not self.code.bufnr or not api.nvim_buf_is_valid(self.code.bufnr) then return self end
|
||||||
|
|
||||||
|
local buf_path = api.nvim_buf_get_name(self.code.bufnr)
|
||||||
|
-- if the filepath is outside of the current working directory then we want the absolute path
|
||||||
|
local file_path = Utils.file.is_in_cwd(buf_path) and Utils.relative_path(buf_path) or buf_path
|
||||||
|
Utils.debug("Sidebar:initialize adding buffer to file selector", buf_path)
|
||||||
|
|
||||||
self.file_selector:reset()
|
self.file_selector:reset()
|
||||||
self.file_selector:add_selected_file(Utils.relative_path(api.nvim_buf_get_name(self.code.bufnr)))
|
self.file_selector:add_selected_file(file_path)
|
||||||
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
@ -39,6 +39,15 @@ function M.exists(filepath)
|
|||||||
return stat ~= nil
|
return stat ~= nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function M.is_in_cwd(filepath)
|
||||||
|
local cwd = vim.fn.getcwd()
|
||||||
|
-- Make both paths absolute for comparison
|
||||||
|
local abs_filepath = vim.fn.fnamemodify(filepath, ":p")
|
||||||
|
local abs_cwd = vim.fn.fnamemodify(cwd, ":p")
|
||||||
|
-- Check if filepath starts with cwd
|
||||||
|
return abs_filepath:sub(1, #abs_cwd) == abs_cwd
|
||||||
|
end
|
||||||
|
|
||||||
function M.get_file_icon(filepath)
|
function M.get_file_icon(filepath)
|
||||||
local filetype = Filetype.detect(filepath, {}) or "unknown"
|
local filetype = Filetype.detect(filepath, {}) or "unknown"
|
||||||
---@type string
|
---@type string
|
||||||
|
@ -826,6 +826,7 @@ function M.get_current_selection_diagnostics(bufnr, selection)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function M.uniform_path(path)
|
function M.uniform_path(path)
|
||||||
|
if not M.file.is_in_cwd(path) then return path end
|
||||||
local project_root = M.get_project_root()
|
local project_root = M.get_project_root()
|
||||||
local abs_path = Path:new(project_root):joinpath(path):absolute()
|
local abs_path = Path:new(project_root):joinpath(path):absolute()
|
||||||
local relative_path = Path:new(abs_path):make_relative(project_root)
|
local relative_path = Path:new(abs_path):make_relative(project_root)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user