From 82dc76dd0007155999c13bbc919b1f09f2b1d5ed Mon Sep 17 00:00:00 2001 From: Francesco Abbate Date: Mon, 16 Nov 2020 23:52:39 +0100 Subject: [PATCH] Add recently visited files in the list when using find file command --- data/core/commands/core.lua | 23 ++++++++++++++++++----- data/core/init.lua | 15 +++++++++++++++ 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/data/core/commands/core.lua b/data/core/commands/core.lua index dbe08a41..870a2117 100644 --- a/data/core/commands/core.lua +++ b/data/core/commands/core.lua @@ -55,17 +55,30 @@ command.add(nil, { end, ["core:find-file"] = function() + local files = {} + for _, item in pairs(core.project_files) do + if item.type == "file" then + table.insert(files, item.filename) + end + end core.command_view:enter("Open File From Project", function(text, item) text = item and item.text or text core.root_view:open_doc(core.open_doc(text)) end, function(text) - local files = {} - for _, item in pairs(core.project_files) do - if item.type == "file" then - table.insert(files, item.filename) + if text == "" then + local recent_files = {} + for i = 2, #core.visited_files do + table.insert(recent_files, core.visited_files[i]) end + table.insert(recent_files, core.visited_files[1]) + local other_files = common.fuzzy_match(files, "") + for i = 1, #other_files do + table.insert(recent_files, other_files[i]) + end + return recent_files + else + return common.fuzzy_match(files, text) end - return common.fuzzy_match(files, text) end) end, diff --git a/data/core/init.lua b/data/core/init.lua index 72b294b8..5d023055 100644 --- a/data/core/init.lua +++ b/data/core/init.lua @@ -114,6 +114,7 @@ function core.init() core.threads = setmetatable({}, { __mode = "k" }) core.project_files = {} core.redraw = true + core.visited_files = {} core.root_view = RootView() core.command_view = CommandView() @@ -225,9 +226,23 @@ function core.reload_module(name) end +function core.set_visited(filename) + for i = 1, #core.visited_files do + if core.visited_files[i] == filename then + table.remove(core.visited_files, i) + break + end + end + table.insert(core.visited_files, 1, filename) +end + + function core.set_active_view(view) assert(view, "Tried to set active view to nil") if view ~= core.active_view then + if view.doc and view.doc.filename then + core.set_visited(view.doc.filename) + end core.last_active_view = core.active_view core.active_view = view end