Skip to content

Commit 1a8ea56

Browse files
authored
fix: recenter popup window on VimResize (#79)
* fix: recenter popup window on `VimResize` * refactor(popup): create helper function to calculate window position
1 parent 8c7d160 commit 1a8ea56

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

lua/grapple/popup.lua

+21-2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,15 @@ local popup = {}
3737

3838
local current_popup = nil
3939

40+
---@private
41+
---@param window_options Grapple.WindowOptions
42+
---@return number, number
43+
function popup.calculate_position(window_options)
44+
local row = math.floor(((vim.o.lines - window_options.height) / 2) - 1)
45+
local col = math.floor((vim.o.columns - window_options.width) / 2)
46+
return row, col
47+
end
48+
4049
---@return Grapple.PopupMenu
4150
function popup.current()
4251
if current_popup == nil then
@@ -66,6 +75,14 @@ function popup.open(window_options, popup_handler, popup_state)
6675
popup.close(popup_menu)
6776
end,
6877
})
78+
vim.api.nvim_create_autocmd({ "VimResized" }, {
79+
group = "GrapplePopup",
80+
callback = function()
81+
popup_menu.popup.options.row, popup_menu.popup.options.col =
82+
popup.calculate_position(popup_menu.popup.options)
83+
vim.api.nvim_win_set_config(popup_menu.popup.window, popup_menu.popup.options)
84+
end,
85+
})
6986

7087
current_popup = popup_menu
7188

@@ -82,8 +99,7 @@ function popup.create_window(window_options)
8299

83100
local buffer = vim.api.nvim_create_buf(false, true)
84101

85-
window_options.row = math.floor(((vim.o.lines - window_options.height) / 2) - 1)
86-
window_options.col = math.floor((vim.o.columns - window_options.width) / 2)
102+
window_options.row, window_options.col = popup.calculate_position(window_options)
87103

88104
local window = vim.api.nvim_open_win(buffer, true, window_options)
89105

@@ -156,6 +172,9 @@ function popup.close(popup_menu)
156172
if vim.api.nvim_win_is_valid(popup_menu.popup.window) then
157173
vim.api.nvim_win_close(popup_menu.popup.window, true)
158174
end
175+
176+
vim.api.nvim_clear_autocmds({ group = "GrapplePopup" })
177+
159178
current_popup = nil
160179
end
161180

0 commit comments

Comments
 (0)