Skip to content

Commit f55bee7

Browse files
authored
Merge pull request #199 from Isrothy/add-tab-filter
feat: Add tab filter
2 parents dc4c939 + 898614d commit f55bee7

File tree

7 files changed

+52
-16
lines changed

7 files changed

+52
-16
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,13 @@ vim.g.neominimap ={
211211
return true
212212
end,
213213

214+
-- When false is returned, the minimap will not be created for this tab
215+
---@type fun(tabid: integer): boolean
216+
tab_filter = function()
217+
return true
218+
end,
219+
220+
214221
-- How many columns a dot should span
215222
x_multiplier = 4, ---@type integer
216223

lua/neominimap/config/internal.lua

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ local M = {
4141
return true
4242
end,
4343

44+
-- When false is returned, the minimap will not be created for this tab
45+
---@type fun(tabid: integer): boolean
46+
tab_filter = function()
47+
return true
48+
end,
49+
4450
-- How many columns a dot should span
4551
x_multiplier = 4, ---@type integer
4652

lua/neominimap/config/meta.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ local M = {}
99
---@field exclude_buftypes? string[]
1010
---@field buf_filter? fun(bufnr: integer): boolean
1111
---@field win_filter? fun(winid: integer): boolean
12+
---@field tab_filter? fun(tabid: integer): boolean
1213
---@field x_multiplier? integer
1314
---@field y_multiplier? integer
1415
---@field sync_cursor? boolean

lua/neominimap/config/validator.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ M.validate_config = function(cfg)
5858
exclude_buftypes = { cfg.exclude_buftypes, is_array_of_strings, "list of string" },
5959
buf_filter = { cfg.buf_filter, "function" },
6060
win_filter = { cfg.win_filter, "function" },
61+
tab_filter = { cfg.tab_filter, "function" },
6162
x_multiplier = { cfg.x_multiplier, "number" },
6263
y_multiplier = { cfg.y_multiplier, "number" },
6364
sync_cursor = { cfg.sync_cursor, "boolean" },

lua/neominimap/window/float/internal.lua

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,11 @@ M.should_show_minimap = function(winid)
114114
return false
115115
end
116116

117+
if not config.tab_filter(tabid) then
118+
logger.log(string.format("Window %d should not be shown due to tab_filter", winid), vim.log.levels.TRACE)
119+
return false
120+
end
121+
117122
logger.log(string.format("Minimap can be shown for window %d", winid), vim.log.levels.TRACE)
118123
return true
119124
end

lua/neominimap/window/split/autocmds.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ M.on_buf_win_enter = function(args)
1818
logger.log(string.format("BufWinEnter event triggered for window %d.", winid), vim.log.levels.TRACE)
1919
vim.schedule(function()
2020
logger.log("Refreshing minimap window", vim.log.levels.TRACE)
21+
require("neominimap.window.split.internal").refresh_current_tab()
2122
require("neominimap.window.split.internal").refresh_source_in_current_tab()
2223
logger.log("Minimap window refreshed.", vim.log.levels.TRACE)
2324
end)
@@ -29,6 +30,7 @@ M.on_win_new = function(args)
2930
logger.log(string.format("WinNew or WinEnter event triggered for window %d.", winid), vim.log.levels.TRACE)
3031
vim.schedule(function()
3132
logger.log("Refreshing minimap window", vim.log.levels.TRACE)
33+
require("neominimap.window.split.internal").refresh_current_tab()
3234
require("neominimap.window.split.internal").refresh_source_in_current_tab()
3335
logger.log("Minimap window refreshed.", vim.log.levels.TRACE)
3436
end)

lua/neominimap/window/split/internal.lua

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,33 @@ M.should_show_minimap_for_tab = function(tabid)
8383
logger.log(string.format("Tab %d is not enabled. Skipping generation of minimap", tabid), vim.log.levels.TRACE)
8484
return false
8585
end
86+
87+
if config.split.close_if_last_window then
88+
logger.log("Checking if tab has window", vim.log.levels.TRACE)
89+
local win_list = api.nvim_tabpage_list_wins(tabid)
90+
local none_floating_count = 0
91+
for _, winid in ipairs(win_list) do
92+
if not require("neominimap.util").is_floating(winid) then
93+
none_floating_count = none_floating_count + 1
94+
end
95+
end
96+
local window_map = require("neominimap.window.split.window_map")
97+
if none_floating_count == 0 or (none_floating_count == 1 and window_map.get_minimap_winid(tabid) ~= nil) then
98+
logger.log(
99+
"Tab has no window, or only one non-floating window. Skipping generation of minimap",
100+
vim.log.levels.TRACE
101+
)
102+
return false
103+
end
104+
end
105+
106+
if not config.tab_filter(tabid) then
107+
logger.log(string.format("Tab %d should not be shown due to tab_filter", tabid), vim.log.levels.TRACE)
108+
return false
109+
end
110+
86111
logger.log(string.format("Minimap can be shown for tab %d", tabid), vim.log.levels.TRACE)
112+
87113
return true
88114
end
89115

@@ -158,7 +184,10 @@ M.close_minimap_window = function(tabid)
158184
logger.log(string.format("No minimap window found for tab %d", tabid), vim.log.levels.TRACE)
159185
return nil
160186
end
161-
api.nvim_win_close(mwinid, true)
187+
local ok, _ = pcall(require("neominimap.util").noautocmd(api.nvim_win_close), mwinid, true)
188+
if not ok then
189+
vim.cmd("noau qa!")
190+
end
162191
logger.log(string.format("Minimap window %d closed", mwinid), vim.log.levels.TRACE)
163192
return mwinid
164193
end
@@ -287,21 +316,6 @@ M.refresh_current_tab = function()
287316
local window_map = require("neominimap.window.split.window_map")
288317
local tabid = api.nvim_get_current_tabpage()
289318

290-
if config.split.close_if_last_window then
291-
logger.log("Checking if tab has window", vim.log.levels.TRACE)
292-
local win_list = api.nvim_tabpage_list_wins(tabid)
293-
local none_floating_count = 0
294-
for _, winid in ipairs(win_list) do
295-
if not require("neominimap.util").is_floating(winid) then
296-
none_floating_count = none_floating_count + 1
297-
end
298-
end
299-
if none_floating_count == 0 or (none_floating_count == 1 and window_map.get_minimap_winid(tabid) ~= nil) then
300-
logger.log("Tab has no window", vim.log.levels.TRACE)
301-
vim.cmd("noau quit")
302-
return
303-
end
304-
end
305319
if M.should_show_minimap_for_tab(tabid) then
306320
local mwinid = window_map.get_minimap_winid(tabid)
307321
if mwinid == nil or not api.nvim_win_is_valid(mwinid) then

0 commit comments

Comments
 (0)