aboutsummaryrefslogtreecommitdiff
path: root/plugins/restoretabs.lua
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/restoretabs.lua')
-rw-r--r--plugins/restoretabs.lua55
1 files changed, 55 insertions, 0 deletions
diff --git a/plugins/restoretabs.lua b/plugins/restoretabs.lua
new file mode 100644
index 0000000..48bb6ea
--- /dev/null
+++ b/plugins/restoretabs.lua
@@ -0,0 +1,55 @@
+-- lite-xl 1.16
+-- Not perfect, because we can't actually figure out when something closes, but should be good enough, so long as we check the list of open views.
+-- Maybe find a better way to get at "Node"?
+local core = require "core"
+local RootView = require "core.rootview"
+local command = require "core.command"
+local keymap = require "core.keymap"
+
+local update = RootView.update
+local initialized_tab_system = false
+
+local tab_history = { }
+local history_size = 10
+
+RootView.update = function(self)
+ update(self)
+ if not initialized_tab_system then
+ local Node = getmetatable(self.root_node)
+ local old_close = Node.close_view
+
+ Node.close_view = function(self, root, view)
+ if view.doc and view.doc.abs_filename then
+ local closing_filename = view.doc.abs_filename
+ for i,filename in ipairs(tab_history) do
+ if filename == closing_filename then
+ table.remove(tab_history, i)
+ break
+ end
+ end
+ table.insert(tab_history, closing_filename)
+ if #tab_history > history_size then
+ tab_history.remove(tab_history, 1)
+ end
+ end
+ old_close(self, root, view)
+ end
+
+ initialized_tab_system = true
+ end
+end
+
+
+command.add("core.docview", {
+ ["restore-tabs:restore-tab"] = function()
+ if #tab_history > 0 then
+ local file = tab_history[#tab_history]
+ core.root_view:open_doc(core.open_doc(file))
+ table.remove(tab_history)
+ end
+ end
+})
+
+keymap.add {
+ ["ctrl+shift+t"] = "restore-tabs:restore-tab"
+}