Skip to content

Commit

Permalink
Merge pull request #199 from Isrothy/add-tab-filter
Browse files Browse the repository at this point in the history
feat: Add tab filter
  • Loading branch information
Isrothy authored Dec 11, 2024
2 parents dc4c939 + 898614d commit f55bee7
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 16 deletions.
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,13 @@ vim.g.neominimap ={
return true
end,

-- When false is returned, the minimap will not be created for this tab
---@type fun(tabid: integer): boolean
tab_filter = function()
return true
end,


-- How many columns a dot should span
x_multiplier = 4, ---@type integer

Expand Down
6 changes: 6 additions & 0 deletions lua/neominimap/config/internal.lua
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,12 @@ local M = {
return true
end,

-- When false is returned, the minimap will not be created for this tab
---@type fun(tabid: integer): boolean
tab_filter = function()
return true
end,

-- How many columns a dot should span
x_multiplier = 4, ---@type integer

Expand Down
1 change: 1 addition & 0 deletions lua/neominimap/config/meta.lua
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ local M = {}
---@field exclude_buftypes? string[]
---@field buf_filter? fun(bufnr: integer): boolean
---@field win_filter? fun(winid: integer): boolean
---@field tab_filter? fun(tabid: integer): boolean
---@field x_multiplier? integer
---@field y_multiplier? integer
---@field sync_cursor? boolean
Expand Down
1 change: 1 addition & 0 deletions lua/neominimap/config/validator.lua
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ M.validate_config = function(cfg)
exclude_buftypes = { cfg.exclude_buftypes, is_array_of_strings, "list of string" },
buf_filter = { cfg.buf_filter, "function" },
win_filter = { cfg.win_filter, "function" },
tab_filter = { cfg.tab_filter, "function" },
x_multiplier = { cfg.x_multiplier, "number" },
y_multiplier = { cfg.y_multiplier, "number" },
sync_cursor = { cfg.sync_cursor, "boolean" },
Expand Down
5 changes: 5 additions & 0 deletions lua/neominimap/window/float/internal.lua
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,11 @@ M.should_show_minimap = function(winid)
return false
end

if not config.tab_filter(tabid) then
logger.log(string.format("Window %d should not be shown due to tab_filter", winid), vim.log.levels.TRACE)
return false
end

logger.log(string.format("Minimap can be shown for window %d", winid), vim.log.levels.TRACE)
return true
end
Expand Down
2 changes: 2 additions & 0 deletions lua/neominimap/window/split/autocmds.lua
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ M.on_buf_win_enter = function(args)
logger.log(string.format("BufWinEnter event triggered for window %d.", winid), vim.log.levels.TRACE)
vim.schedule(function()
logger.log("Refreshing minimap window", vim.log.levels.TRACE)
require("neominimap.window.split.internal").refresh_current_tab()
require("neominimap.window.split.internal").refresh_source_in_current_tab()
logger.log("Minimap window refreshed.", vim.log.levels.TRACE)
end)
Expand All @@ -29,6 +30,7 @@ M.on_win_new = function(args)
logger.log(string.format("WinNew or WinEnter event triggered for window %d.", winid), vim.log.levels.TRACE)
vim.schedule(function()
logger.log("Refreshing minimap window", vim.log.levels.TRACE)
require("neominimap.window.split.internal").refresh_current_tab()
require("neominimap.window.split.internal").refresh_source_in_current_tab()
logger.log("Minimap window refreshed.", vim.log.levels.TRACE)
end)
Expand Down
46 changes: 30 additions & 16 deletions lua/neominimap/window/split/internal.lua
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,33 @@ M.should_show_minimap_for_tab = function(tabid)
logger.log(string.format("Tab %d is not enabled. Skipping generation of minimap", tabid), vim.log.levels.TRACE)
return false
end

if config.split.close_if_last_window then
logger.log("Checking if tab has window", vim.log.levels.TRACE)
local win_list = api.nvim_tabpage_list_wins(tabid)
local none_floating_count = 0
for _, winid in ipairs(win_list) do
if not require("neominimap.util").is_floating(winid) then
none_floating_count = none_floating_count + 1
end
end
local window_map = require("neominimap.window.split.window_map")
if none_floating_count == 0 or (none_floating_count == 1 and window_map.get_minimap_winid(tabid) ~= nil) then
logger.log(
"Tab has no window, or only one non-floating window. Skipping generation of minimap",
vim.log.levels.TRACE
)
return false
end
end

if not config.tab_filter(tabid) then
logger.log(string.format("Tab %d should not be shown due to tab_filter", tabid), vim.log.levels.TRACE)
return false
end

logger.log(string.format("Minimap can be shown for tab %d", tabid), vim.log.levels.TRACE)

return true
end

Expand Down Expand Up @@ -158,7 +184,10 @@ M.close_minimap_window = function(tabid)
logger.log(string.format("No minimap window found for tab %d", tabid), vim.log.levels.TRACE)
return nil
end
api.nvim_win_close(mwinid, true)
local ok, _ = pcall(require("neominimap.util").noautocmd(api.nvim_win_close), mwinid, true)
if not ok then
vim.cmd("noau qa!")
end
logger.log(string.format("Minimap window %d closed", mwinid), vim.log.levels.TRACE)
return mwinid
end
Expand Down Expand Up @@ -287,21 +316,6 @@ M.refresh_current_tab = function()
local window_map = require("neominimap.window.split.window_map")
local tabid = api.nvim_get_current_tabpage()

if config.split.close_if_last_window then
logger.log("Checking if tab has window", vim.log.levels.TRACE)
local win_list = api.nvim_tabpage_list_wins(tabid)
local none_floating_count = 0
for _, winid in ipairs(win_list) do
if not require("neominimap.util").is_floating(winid) then
none_floating_count = none_floating_count + 1
end
end
if none_floating_count == 0 or (none_floating_count == 1 and window_map.get_minimap_winid(tabid) ~= nil) then
logger.log("Tab has no window", vim.log.levels.TRACE)
vim.cmd("noau quit")
return
end
end
if M.should_show_minimap_for_tab(tabid) then
local mwinid = window_map.get_minimap_winid(tabid)
if mwinid == nil or not api.nvim_win_is_valid(mwinid) then
Expand Down

0 comments on commit f55bee7

Please sign in to comment.