@@ -37,6 +37,15 @@ local popup = {}
37
37
38
38
local current_popup = nil
39
39
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
+
40
49
--- @return Grapple.PopupMenu
41
50
function popup .current ()
42
51
if current_popup == nil then
@@ -66,6 +75,14 @@ function popup.open(window_options, popup_handler, popup_state)
66
75
popup .close (popup_menu )
67
76
end ,
68
77
})
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
+ })
69
86
70
87
current_popup = popup_menu
71
88
@@ -82,8 +99,7 @@ function popup.create_window(window_options)
82
99
83
100
local buffer = vim .api .nvim_create_buf (false , true )
84
101
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 )
87
103
88
104
local window = vim .api .nvim_open_win (buffer , true , window_options )
89
105
@@ -156,6 +172,9 @@ function popup.close(popup_menu)
156
172
if vim .api .nvim_win_is_valid (popup_menu .popup .window ) then
157
173
vim .api .nvim_win_close (popup_menu .popup .window , true )
158
174
end
175
+
176
+ vim .api .nvim_clear_autocmds ({ group = " GrapplePopup" })
177
+
159
178
current_popup = nil
160
179
end
161
180
0 commit comments