Skip to content

Commit 312b5fd

Browse files
committed
feat: make floating windows resize on VimResized event, closes #438
1 parent 7e3ad90 commit 312b5fd

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

lua/neo-tree/events/init.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ local M = {
3333
VIM_WIN_CLOSED = "vim_win_closed",
3434
VIM_COLORSCHEME = "vim_colorscheme",
3535
VIM_LEAVE = "vim_leave",
36+
VIM_RESIZED = "vim_resized",
3637
}
3738

3839
M.define_autocmd_event = function(event_name, autocmds, debounce_frequency, seed_fn, nested)

lua/neo-tree/setup/init.lua

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ local define_events = function()
7272
events.define_autocmd_event(events.VIM_DIR_CHANGED, { "DirChanged" }, 200, nil, true)
7373
events.define_autocmd_event(events.VIM_TAB_CLOSED, { "TabClosed" })
7474
events.define_autocmd_event(events.VIM_LEAVE, { "VimLeavePre" })
75+
events.define_autocmd_event(events.VIM_RESIZED, { "VimResized" }, 100)
7576
events.define_autocmd_event(events.VIM_WIN_CLOSED, { "WinClosed" })
7677
events.define_autocmd_event(events.VIM_COLORSCHEME, { "ColorScheme" }, 0)
7778
events.define_autocmd_event(events.GIT_EVENT, { "User FugitiveChanged" }, 100)
@@ -84,6 +85,13 @@ local define_events = function()
8485
events.clear_all_events()
8586
end,
8687
})
88+
89+
events.subscribe({
90+
event = events.VIM_RESIZED,
91+
handler = function()
92+
require("neo-tree.ui.renderer").update_floating_window_layouts()
93+
end,
94+
})
8795
end
8896

8997
local last_buffer_enter_filetype = nil

lua/neo-tree/ui/renderer.lua

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ local log = require("neo-tree.log")
1313

1414
local M = { resize_timer_interval = 50 }
1515
local ESC_KEY = vim.api.nvim_replace_termcodes("<ESC>", true, false, true)
16+
local default_popup_size = { width = 60, height = "80%" }
1617
local floating_windows = {}
1718
local draw, create_window, create_tree
1819

@@ -737,17 +738,17 @@ create_window = function(state)
737738
win_options = popups.popup_options("Neo-tree " .. sourceTitle, 40, win_options)
738739
win_options.win_options = nil
739740
win_options.zindex = 40
740-
local size = { width = 60, height = "80%" }
741741

742742
-- Then override with source specific options.
743743
local b = win_options.border
744-
win_options.size = utils.resolve_config_option(state, "window.popup.size", size)
744+
win_options.size = utils.resolve_config_option(state, "window.popup.size", default_popup_size)
745745
win_options.position = utils.resolve_config_option(state, "window.popup.position", "50%")
746746
win_options.border = utils.resolve_config_option(state, "window.popup.border", b)
747747

748748
win = NuiPopup(win_options)
749749
win:mount()
750750
win.source_name = state.name
751+
win.original_options = state.window
751752
table.insert(floating_windows, win)
752753

753754
if require("neo-tree").config.close_floats_on_escape_key then
@@ -822,6 +823,17 @@ create_window = function(state)
822823
return win
823824
end
824825

826+
M.update_floating_window_layouts = function()
827+
for _, win in ipairs(floating_windows) do
828+
local opt = {
829+
relative = "win",
830+
}
831+
opt.size = utils.resolve_config_option(win.original_options, "popup.size", default_popup_size)
832+
opt.position = utils.resolve_config_option(win.original_options, "popup.position", "50%")
833+
win:update_layout(opt)
834+
end
835+
end
836+
825837
---Determines is the givin winid is valid and the window still exists.
826838
---@param winid any
827839
---@return boolean

0 commit comments

Comments
 (0)