diff options
author | Jipok <braaga@inbox.ru> | 2021-12-11 20:46:06 +0500 |
---|---|---|
committer | Jipok <braaga@inbox.ru> | 2021-12-11 20:46:06 +0500 |
commit | b561e4fc287e04d83d5374778dbeaeed4ee66850 (patch) | |
tree | 0270e923ca25ef6ca9d3364f3a68e4c317a3893a /plugins | |
parent | 56ab78215af3167cab4cc213e09a1ba88cf5a6af (diff) | |
download | lite-xl-plugins-b561e4fc287e04d83d5374778dbeaeed4ee66850.tar.gz lite-xl-plugins-b561e4fc287e04d83d5374778dbeaeed4ee66850.zip |
Rewrite ephemeral tabs plugin
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/ephemeral_tabs.lua | 77 | ||||
-rw-r--r-- | plugins/ephemeraldocviews.lua | 70 |
2 files changed, 77 insertions, 70 deletions
diff --git a/plugins/ephemeral_tabs.lua b/plugins/ephemeral_tabs.lua new file mode 100644 index 0000000..5bfba6f --- /dev/null +++ b/plugins/ephemeral_tabs.lua @@ -0,0 +1,77 @@ +-- mod-version:2 -- lite-xl 2.0 +local core = require "core" +local command = require "core.command" +local RootView = require "core.rootview" +local DocView = require "core.docview" +local Doc = require "core.doc" +local TreeView = require "plugins.treeview" + +local RootView_open_doc = RootView.open_doc +function RootView:open_doc(doc) + local docview = RootView_open_doc(self, doc) + -- The absence of the ephemeral flag means that before this moment in this + -- node this document was not exists + if docview.ephemeral == nil then + local node = self:get_active_node_default() + -- We assume that ephemeral tab is always the last one + -- But user can drag and drop tabs so full check is needed + for i, v in ipairs(node.views) do + if v.ephemeral then + node:close_view(self.root_node, v) + end + end + docview.ephemeral = true + end + return docview +end + +local Doc_get_name = DocView.get_name +function DocView:get_name() + return self.doc and self.ephemeral and ("~ " .. Doc_get_name(self) .. " ~") + or Doc_get_name(self) +end + +-- Any change to the document makes the tab normal +local Doc_on_text_change = Doc.on_text_change +function Doc:on_text_change(type) + core.active_view.ephemeral = false + Doc_on_text_change(self, type) +end + +-- Double clicking in the TreeView makes the tab normal +local TreeView_on_mouse_pressed = TreeView.on_mouse_pressed +function TreeView:on_mouse_pressed(button, x, y, clicks) + TreeView_on_mouse_pressed(self, button, x, y, clicks) + if (clicks > 1) and (core.active_view.doc ~= nil) then + core.active_view.ephemeral = false + end +end + +-- Double clicking on a tab makes it normal +local RootView_on_mouse_pressed = RootView.on_mouse_pressed +function RootView:on_mouse_pressed(button, x, y, clicks) + if RootView_on_mouse_pressed(self, button, x, y, clicks) then + if clicks > 1 then + local node = self.root_node:get_child_overlapping_point(x, y) + local idx = node:get_tab_overlapping_point(x, y) + if idx then + node.views[idx].ephemeral = false + end + end + return true + end +end + +-- Dragging a tab makes it normal +local RootView_on_mouse_released = RootView.on_mouse_released +function RootView:on_mouse_released(button, x, y, ...) + if self.dragged_node then + if button == "left" then + if self.dragged_node.dragging then + local view = self.dragged_node.node.views[self.dragged_node.idx] + view.ephemeral = false + end + end + end + RootView_on_mouse_released(self, button, x, y, ...) +end diff --git a/plugins/ephemeraldocviews.lua b/plugins/ephemeraldocviews.lua deleted file mode 100644 index 1169d7f..0000000 --- a/plugins/ephemeraldocviews.lua +++ /dev/null @@ -1,70 +0,0 @@ --- mod-version:2 -- lite-xl 2.0 -local core = require "core" -local command = require "core.command" -local RootView = require "core.rootview" -local DocView = require "core.docview" -local Doc = require "core.doc" -local TreeView = require "plugins.treeview" - -local open_doc = RootView.open_doc -function RootView:open_doc(doc) - local node = self:get_active_node_default() - local ephemeral, existing_ephemeral = node.views, nil - for i, view in ipairs(node.views) do - if view.doc == doc then - ephemeral = false - end - if view.doc and view.doc.ephemeral then - existing_ephemeral = view - end - end - if ephemeral and existing_ephemeral then - node:close_view(self.root_node, existing_ephemeral) - end - local view = open_doc(self, doc) - if ephemeral then - view.doc.ephemeral = #node.views > 1 - end - return view -end - -local get_name = DocView.get_name -function DocView:get_name() - return self.doc and self.doc.ephemeral and ("~ " .. get_name(self) .. " ~") or get_name(self) -end - -local doc_insert = Doc.insert -function Doc:insert(...) - doc_insert(self, ...) - self.ephemeral = false -end - -local doc_remove = Doc.remove -function Doc:remove(...) - doc_remove(self, ...) - self.ephemeral = false -end - --- Double clicking in the TreeView makes the tab normal -local TreeView_original_event = TreeView.on_mouse_pressed -function TreeView:on_mouse_pressed(button, x, y, clicks) - TreeView_original_event(self, button, x, y, clicks) - if (clicks > 1) and (core.active_view.doc ~= nil) then - core.active_view.doc.ephemeral = false - end -end - --- Double clicking on a tab makes it normal -local RootView_original_event = RootView.on_mouse_pressed -function RootView:on_mouse_pressed(button, x, y, clicks) - if RootView_original_event(self, button, x, y, clicks) then - if clicks > 1 then - local node = self.root_node:get_child_overlapping_point(x, y) - local idx = node:get_tab_overlapping_point(x, y) - if idx then - node.views[idx].doc.ephemeral = false - end - end - return true - end -end |