From 5bf7abf23dcb524bcf3382ebd7d756cc7fdac40c Mon Sep 17 00:00:00 2001 From: Francesco Abbate Date: Sat, 6 Mar 2021 23:36:05 +0100 Subject: [PATCH] Ensure filename are store relative to project directory --- data/core/common.lua | 28 ++++++++++++++++++++++++++++ data/plugins/treeview.lua | 3 ++- data/plugins/workspace.lua | 30 +----------------------------- 3 files changed, 31 insertions(+), 30 deletions(-) diff --git a/data/core/common.lua b/data/core/common.lua index 763d5f00..e459476a 100644 --- a/data/core/common.lua +++ b/data/core/common.lua @@ -238,4 +238,32 @@ function common.normalize_path(filename) end +local function split_on_slash(s, sep_pattern) + local t = {} + for fragment in string.gmatch(s, "([^/\\]+)") do + t[#t + 1] = fragment + end + return t +end + + +function common.relative_path(ref_dir, dir) + local ref_ls = split_on_slash(ref_dir) + local dir_ls = split_on_slash(dir) + local i = 1 + while i <= #ref_ls do + if dir_ls[i] ~= ref_ls[i] then + break + end + i = i + 1 + end + local ups = "" + for k = i, #ref_ls do + ups = ups .. "../" + end + local rel_path = ups .. table.concat(dir_ls, "/", i) + return rel_path ~= "" and rel_path or "." +end + + return common diff --git a/data/plugins/treeview.lua b/data/plugins/treeview.lua index c9a1c74c..82b6790e 100644 --- a/data/plugins/treeview.lua +++ b/data/plugins/treeview.lua @@ -185,7 +185,8 @@ function TreeView:on_mouse_pressed(button, x, y, clicks) end else core.try(function() - core.root_view:open_doc(core.open_doc(self.hovered_item.abs_filename)) + local doc_filename = common.relative_path(core.project_dir, self.hovered_item.abs_filename) + core.root_view:open_doc(core.open_doc(doc_filename)) end) end end diff --git a/data/plugins/workspace.lua b/data/plugins/workspace.lua index 8712e52d..81d2207d 100644 --- a/data/plugins/workspace.lua +++ b/data/plugins/workspace.lua @@ -159,39 +159,11 @@ local function load_node(node, t) end -local function split_on_slash(s, sep_pattern) - local t = {} - for fragment in string.gmatch(s, "([^/\\]+)") do - t[#t + 1] = fragment - end - return t -end - - -local function relative_path(ref_dir, dir) - local ref_ls = split_on_slash(ref_dir) - local dir_ls = split_on_slash(dir) - local i = 1 - while i <= #ref_ls do - if dir_ls[i] ~= ref_ls[i] then - break - end - i = i + 1 - end - local ups = "" - for k = i, #ref_ls do - ups = ups .. "../" - end - local rel_path = ups .. table.concat(dir_ls, "/", i) - return rel_path ~= "" and rel_path or "." -end - - local function save_directories() local project_dir = core.project_dir local dir_list = {} for i = 2, #core.project_directories do - dir_list[#dir_list + 1] = relative_path(project_dir, core.project_directories[i].name) + dir_list[#dir_list + 1] = common.relative_path(project_dir, core.project_directories[i].name) end return dir_list end