mirror of
https://github.com/neovim/neovim.git
synced 2026-04-23 15:55:36 +00:00
feat(api): add "max_height" argument to nvim_win_text_height (#32835)
Useful to e.g. limit the height to the window height, avoiding unnecessary work. Or to find out how many buffer lines beyond "start_row" take up a certain number of logical lines (returned in "end_row" and "end_vcol").
This commit is contained in:
13
runtime/lua/vim/_meta/api.lua
generated
13
runtime/lua/vim/_meta/api.lua
generated
@@ -2526,9 +2526,20 @@ function vim.api.nvim_win_set_width(window, width) end
|
||||
--- When omitted include the whole line.
|
||||
--- - end_vcol: Ending virtual column index on "end_row",
|
||||
--- 0-based exclusive, rounded up to full screen lines.
|
||||
--- When omitted include the whole line.
|
||||
--- When 0 only include diff filler and virtual lines above
|
||||
--- "end_row". When omitted include the whole line.
|
||||
--- - max_height: Don't add the height of lines below the row
|
||||
--- for which this height is reached. Useful to e.g. limit the
|
||||
--- height to the window height, avoiding unnecessary work. Or
|
||||
--- to find out how many buffer lines beyond "start_row" take
|
||||
--- up a certain number of logical lines (returned in
|
||||
--- "end_row" and "end_vcol").
|
||||
--- @return table<string,any> # Dict containing text height information, with these keys:
|
||||
--- - all: The total number of screen lines occupied by the range.
|
||||
--- - fill: The number of diff filler or virtual lines among them.
|
||||
--- - end_row: The row on which the returned height is reached (first row of
|
||||
--- a closed fold).
|
||||
--- - end_vcol: Ending virtual column in "end_row" where "max_height" or the returned
|
||||
--- height is reached. 0 if "end_row" is a closed fold.
|
||||
---
|
||||
function vim.api.nvim_win_text_height(window, opts) end
|
||||
|
||||
1
runtime/lua/vim/_meta/api_keysets.lua
generated
1
runtime/lua/vim/_meta/api_keysets.lua
generated
@@ -318,6 +318,7 @@ error('Cannot require a meta file')
|
||||
--- @field end_row? integer
|
||||
--- @field start_vcol? integer
|
||||
--- @field end_vcol? integer
|
||||
--- @field max_height? integer
|
||||
|
||||
--- @class vim.api.keyset.xdl_diff
|
||||
--- @field on_hunk? fun(start_a: integer, count_a: integer, start_b: integer, count_b: integer): integer?
|
||||
|
||||
@@ -1649,9 +1649,10 @@ function M.open_floating_preview(contents, syntax, opts)
|
||||
vim.treesitter.start(floating_bufnr)
|
||||
if not opts.height then
|
||||
-- Reduce window height if TS highlighter conceals code block backticks.
|
||||
local conceal_height = api.nvim_win_text_height(floating_winnr, {}).all
|
||||
if conceal_height < api.nvim_win_get_height(floating_winnr) then
|
||||
api.nvim_win_set_height(floating_winnr, conceal_height)
|
||||
local win_height = api.nvim_win_get_height(floating_winnr)
|
||||
local text_height = api.nvim_win_text_height(floating_winnr, { max_height = win_height }).all
|
||||
if text_height < win_height then
|
||||
api.nvim_win_set_height(floating_winnr, text_height)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user