@@ -242,62 +242,67 @@ local fancy_floating_markdown = function(contents, opts)
242
242
return bufnr , winnr
243
243
end
244
244
245
- -- Modify hover callback
246
- function M .modifyCallback ()
247
- local callback = ' textDocument/hover'
248
- local default_callback = vim .lsp .callbacks [callback ]
249
- vim .lsp .callbacks [callback ] = function (_ , method , result )
250
- -- if M.winnr ~= nil and api.nvim_win_is_valid(M.winnr) then
251
- -- api.nvim_win_close(M.winnr, true)
252
- -- end
253
- if vim .fn .pumvisible () == 1 then
254
- M .focusable_float (method , function ()
255
- if not (result and result .contents ) then
256
- -- return { 'No information available' }
257
- return
258
- end
259
- local markdown_lines = vim .lsp .util .convert_input_to_markdown_lines (result .contents )
260
- markdown_lines = vim .lsp .util .trim_empty_lines (markdown_lines )
261
- if vim .tbl_isempty (markdown_lines ) then
262
- -- return { 'No information available' }
263
- return
264
- end
265
- local bufnr , winnr
266
- -- modified to open hover window align to popupmenu
245
+ local callback = ' textDocument/hover'
246
+ local default_callback = vim .lsp .callbacks [callback ]
267
247
268
- local position = vim .fn .pum_getpos ()
269
- -- Set max width option to avoid overlapping with popup menu
270
- local total_column = api .nvim_get_option (' columns' )
271
- local align
272
- if position [' col' ] < total_column / 2 then
273
- align = ' right'
274
- else
275
- align = ' left'
276
- end
277
- bufnr , winnr = fancy_floating_markdown (markdown_lines , {
278
- pad_left = 1 ; pad_right = 1 ;
279
- col = position [' col' ]; width = position [' width' ]; row = position [' row' ]- 1 ;
280
- align = align
281
- })
282
- M .winnr = winnr
248
+ function callback_function (_ , method , result )
249
+ -- if M.winnr ~= nil and api.nvim_win_is_valid(M.winnr) then
250
+ -- api.nvim_win_close(M.winnr, true)
251
+ -- end
252
+ if vim .fn .pumvisible () == 1 then
253
+ M .focusable_float (method , function ()
254
+ if not (result and result .contents ) then
255
+ -- return { 'No information available' }
256
+ return
257
+ end
258
+ local markdown_lines = vim .lsp .util .convert_input_to_markdown_lines (result .contents )
259
+ markdown_lines = vim .lsp .util .trim_empty_lines (markdown_lines )
260
+ if vim .tbl_isempty (markdown_lines ) then
261
+ -- return { 'No information available' }
262
+ return
263
+ end
264
+ local bufnr , winnr
265
+ -- modified to open hover window align to popupmenu
283
266
284
- vim .lsp .util .close_preview_autocmd ({" CursorMoved" , " BufHidden" , " InsertCharPre" }, winnr )
285
- local hover_len = # vim .api .nvim_buf_get_lines (bufnr ,0 ,- 1 ,false )[1 ]
286
- local win_width = vim .api .nvim_win_get_width (0 )
287
- if hover_len > win_width then
288
- vim .api .nvim_win_set_width (winnr ,math.min (hover_len ,win_width ))
289
- vim .api .nvim_win_set_height (winnr ,math.ceil (hover_len / win_width ))
290
- vim .wo [winnr ].wrap = true
291
- end
292
- return bufnr , winnr
293
- end )
294
- else
295
- default_callback (_ , method , result , _ )
296
- end
267
+ local position = vim .fn .pum_getpos ()
268
+ -- Set max width option to avoid overlapping with popup menu
269
+ local total_column = api .nvim_get_option (' columns' )
270
+ local align
271
+ if position [' col' ] < total_column / 2 then
272
+ align = ' right'
273
+ else
274
+ align = ' left'
275
+ end
276
+ bufnr , winnr = fancy_floating_markdown (markdown_lines , {
277
+ pad_left = 1 ; pad_right = 1 ;
278
+ col = position [' col' ]; width = position [' width' ]; row = position [' row' ]- 1 ;
279
+ align = align
280
+ })
281
+ M .winnr = winnr
282
+
283
+ vim .lsp .util .close_preview_autocmd ({" CursorMoved" , " BufHidden" , " InsertCharPre" }, winnr )
284
+ local hover_len = # vim .api .nvim_buf_get_lines (bufnr ,0 ,- 1 ,false )[1 ]
285
+ local win_width = vim .api .nvim_win_get_width (0 )
286
+ if hover_len > win_width then
287
+ vim .api .nvim_win_set_width (winnr ,math.min (hover_len ,win_width ))
288
+ vim .api .nvim_win_set_height (winnr ,math.ceil (hover_len / win_width ))
289
+ vim .wo [winnr ].wrap = true
290
+ end
291
+ return bufnr , winnr
292
+ end )
293
+ else
294
+ default_callback (_ , method , result , _ )
297
295
end
298
296
end
299
297
300
298
M .autoOpenHoverInPopup = function (manager )
299
+ for _ , client in pairs (vim .lsp .buf_get_clients (0 )) do
300
+ default_callback = client .config .callbacks [' textDocument/hover' ] or vim .lsp .callbacks [' textDocument/hover' ]
301
+ if default_callback ~= callback_function then
302
+ client .config .callbacks [' textDocument/hover' ] = callback_function
303
+ end
304
+ end
305
+
301
306
local bufnr = api .nvim_get_current_buf ()
302
307
if api .nvim_call_function (' pumvisible' , {}) == 1 then
303
308
-- Auto open hover
0 commit comments