diff --git a/lua/tabscope/buffer-manager.lua b/lua/tabscope/buffer-manager.lua index 61074dd..beaef32 100644 --- a/lua/tabscope/buffer-manager.lua +++ b/lua/tabscope/buffer-manager.lua @@ -61,7 +61,7 @@ local function new() m.ignore_events = false - u.set_autocmd("BufEnter", function() + u.set_improved_bufenter_autocmd(function() if not m.ignore_events then m._try_to_track_current_buffer() end diff --git a/lua/tabscope/tab-manager.lua b/lua/tabscope/tab-manager.lua index 3dfe360..9c2ae8a 100644 --- a/lua/tabscope/tab-manager.lua +++ b/lua/tabscope/tab-manager.lua @@ -12,6 +12,8 @@ local function new(buffer_manager) return end + require("utilities").notify("changed") + local previous_buffers = m.buffer_manager.tab_get_buffers(previous_tab) local current_buffers = m.buffer_manager.tab_get_buffers(0) @@ -28,7 +30,7 @@ local function new(buffer_manager) m.buffer_manager.ignore_events = false end - u.set_autocmd("BufEnter", m.try_to_switch_tab) + u.set_improved_bufenter_autocmd(m.try_to_switch_tab) u.set_autocmd("TabLeave", function() m.previous_tab = vim.api.nvim_get_current_tabpage() end) diff --git a/lua/tabscope/utils.lua b/lua/tabscope/utils.lua index e230ca9..798970e 100644 --- a/lua/tabscope/utils.lua +++ b/lua/tabscope/utils.lua @@ -1,15 +1,47 @@ local M = {} --- Creates auto command -M.set_autocmd = function(event, callback) - if not M._group then - M._group = vim.api.nvim_create_augroup("TabScopeNvim", {}) +M._get_augroup = function() + if not M._augroup then + M._augroup = vim.api.nvim_create_augroup("TabScopeNvim", {}) end + return M._augroup +end +-- Creates auto command +M.set_autocmd = function(event, callback) vim.api.nvim_create_autocmd(event, { - group = M._group, + group = M._get_augroup(), callback = callback, }) end +-- Creates auto command that triggered like bufEnter, but it triggers +-- if buffer changes to the same buffer (like :sbuffer / :tab sbuffer) +M.set_improved_bufenter_autocmd = function(callback) + local triggered = false + + vim.api.nvim_create_autocmd("BufEnter", { + group = M._get_augroup(), + callback = function() + triggered = true + callback() + end, + }) + + vim.api.nvim_create_autocmd("WinEnter", { + group = M._get_augroup(), + callback = function() + triggered = false + vim.schedule(function() + if triggered then + return + end + triggered = true + callback() + end) + end, + }) + +end + return M