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:
luukvbaal
2025-04-21 13:48:26 +02:00
committed by GitHub
parent 98ec3fdf74
commit 7ba043f0f3
10 changed files with 423 additions and 185 deletions

View File

@@ -177,33 +177,25 @@ describe('API/win', function()
local win = curwin()
feed('gg')
screen:expect {
grid = [[
local s1 = [[
^prologue |
|*8
]],
}
]]
screen:expect(s1)
-- cursor position is at beginning
eq({ 1, 0 }, api.nvim_win_get_cursor(win))
-- move cursor to end
api.nvim_win_set_cursor(win, { 101, 0 })
screen:expect {
grid = [[
screen:expect([[
|*7
^epilogue |
|
]],
}
]])
-- move cursor to the beginning again
api.nvim_win_set_cursor(win, { 1, 0 })
screen:expect {
grid = [[
^prologue |
|*8
]],
}
screen:expect(s1)
-- move focus to new window
command('new')
@@ -211,8 +203,7 @@ describe('API/win', function()
-- sanity check, cursor position is kept
eq({ 1, 0 }, api.nvim_win_get_cursor(win))
screen:expect {
grid = [[
local s2 = [[
^ |
{1:~ }|*2
{3:[No Name] }|
@@ -220,13 +211,12 @@ describe('API/win', function()
|*2
{2:[No Name] [+] }|
|
]],
}
]]
screen:expect(s2)
-- move cursor to end
api.nvim_win_set_cursor(win, { 101, 0 })
screen:expect {
grid = [[
screen:expect([[
^ |
{1:~ }|*2
{3:[No Name] }|
@@ -234,22 +224,11 @@ describe('API/win', function()
epilogue |
{2:[No Name] [+] }|
|
]],
}
]])
-- move cursor to the beginning again
api.nvim_win_set_cursor(win, { 1, 0 })
screen:expect {
grid = [[
^ |
{1:~ }|*2
{3:[No Name] }|
prologue |
|*2
{2:[No Name] [+] }|
|
]],
}
screen:expect(s2)
-- curwin didn't change back
neq(win, curwin())
@@ -860,8 +839,14 @@ describe('API/win', function()
end)
describe('text_height', function()
local screen, ns, X
before_each(function()
screen = Screen.new(45, 22)
ns = api.nvim_create_namespace('')
X = api.nvim_get_vvar('maxcol')
end)
it('validation', function()
local X = api.nvim_get_vvar('maxcol')
insert([[
aaa
bbb
@@ -901,6 +886,10 @@ describe('API/win', function()
"Invalid 'end_vcol': out of range",
pcall_err(api.nvim_win_text_height, 0, { end_row = 2, end_vcol = X + 1 })
)
eq(
"Invalid 'max_height': out of range",
pcall_err(api.nvim_win_text_height, 0, { max_height = 0 })
)
eq(
"'start_vcol' is higher than 'end_vcol'",
pcall_err(
@@ -912,8 +901,6 @@ describe('API/win', function()
end)
it('with two diff windows', function()
local X = api.nvim_get_vvar('maxcol')
local screen = Screen.new(45, 22)
exec([[
set diffopt+=context:2 number
let expr = 'printf("%08d", v:val) .. repeat("!", v:val)'
@@ -923,8 +910,7 @@ describe('API/win', function()
windo diffthis
]])
feed('24gg')
screen:expect {
grid = [[
screen:expect([[
{7: }{8: }{23:----------------}│{7: }{8: 1 }{22:00000001! }|
{7: }{8: }{23:----------------}│{7: }{8: 2 }{22:00000002!! }|
{7: }{8: 1 }00000003!!! │{7: }{8: 3 }00000003!!! |
@@ -947,80 +933,155 @@ describe('API/win', function()
{7: }{8: 41 }{22:00000050!!!!!!!!}│{7: }{8: }{23:----------------}|
{2:[No Name] [+] }{3:[No Name] [+] }|
|
]],
}
]])
screen:try_resize(45, 3)
screen:expect {
grid = [[
screen:expect([[
{7: }{8: 19 }00000028!!!!!!!!│{7: }{8: 24 }^00000028!!!!!!!!|
{2:[No Name] [+] }{3:[No Name] [+] }|
|
]],
}
eq({ all = 20, fill = 5 }, api.nvim_win_text_height(1000, {}))
eq({ all = 20, fill = 5 }, api.nvim_win_text_height(1001, {}))
eq({ all = 20, fill = 5 }, api.nvim_win_text_height(1000, { start_row = 0 }))
eq({ all = 20, fill = 5 }, api.nvim_win_text_height(1001, { start_row = 0 }))
eq({ all = 15, fill = 0 }, api.nvim_win_text_height(1000, { end_row = -1 }))
eq({ all = 15, fill = 0 }, api.nvim_win_text_height(1000, { end_row = 40 }))
eq({ all = 20, fill = 5 }, api.nvim_win_text_height(1001, { end_row = -1 }))
eq({ all = 20, fill = 5 }, api.nvim_win_text_height(1001, { end_row = 40 }))
eq({ all = 10, fill = 5 }, api.nvim_win_text_height(1000, { start_row = 23 }))
eq({ all = 13, fill = 3 }, api.nvim_win_text_height(1001, { start_row = 18 }))
eq({ all = 11, fill = 0 }, api.nvim_win_text_height(1000, { end_row = 23 }))
eq({ all = 11, fill = 5 }, api.nvim_win_text_height(1001, { end_row = 18 }))
eq({ all = 11, fill = 0 }, api.nvim_win_text_height(1000, { start_row = 3, end_row = 39 }))
eq({ all = 11, fill = 3 }, api.nvim_win_text_height(1001, { start_row = 1, end_row = 34 }))
eq({ all = 9, fill = 0 }, api.nvim_win_text_height(1000, { start_row = 4, end_row = 38 }))
eq({ all = 9, fill = 3 }, api.nvim_win_text_height(1001, { start_row = 2, end_row = 33 }))
eq({ all = 9, fill = 0 }, api.nvim_win_text_height(1000, { start_row = 5, end_row = 37 }))
eq({ all = 9, fill = 3 }, api.nvim_win_text_height(1001, { start_row = 3, end_row = 32 }))
eq({ all = 9, fill = 0 }, api.nvim_win_text_height(1000, { start_row = 17, end_row = 25 }))
eq({ all = 9, fill = 3 }, api.nvim_win_text_height(1001, { start_row = 15, end_row = 20 }))
eq({ all = 7, fill = 0 }, api.nvim_win_text_height(1000, { start_row = 18, end_row = 24 }))
eq({ all = 7, fill = 3 }, api.nvim_win_text_height(1001, { start_row = 16, end_row = 19 }))
eq({ all = 6, fill = 5 }, api.nvim_win_text_height(1000, { start_row = -1 }))
eq({ all = 5, fill = 5 }, api.nvim_win_text_height(1000, { start_row = -1, start_vcol = X }))
]])
eq({ all = 20, fill = 5, end_row = 40, end_vcol = 53 }, api.nvim_win_text_height(1000, {}))
eq({ all = 20, fill = 5, end_row = 40, end_vcol = 58 }, api.nvim_win_text_height(1001, {}))
eq(
{ all = 0, fill = 0 },
{ all = 20, fill = 5, end_row = 40, end_vcol = 53 },
api.nvim_win_text_height(1000, { start_row = 0 })
)
eq(
{ all = 20, fill = 5, end_row = 40, end_vcol = 58 },
api.nvim_win_text_height(1001, { start_row = 0 })
)
eq(
{ all = 15, fill = 0, end_row = 40, end_vcol = 53 },
api.nvim_win_text_height(1000, { end_row = -1 })
)
eq(
{ all = 15, fill = 0, end_row = 40, end_vcol = 53 },
api.nvim_win_text_height(1000, { end_row = 40 })
)
eq(
{ all = 20, fill = 5, end_row = 40, end_vcol = 58 },
api.nvim_win_text_height(1001, { end_row = -1 })
)
eq(
{ all = 20, fill = 5, end_row = 40, end_vcol = 58 },
api.nvim_win_text_height(1001, { end_row = 40 })
)
eq(
{ all = 10, fill = 5, end_row = 40, end_vcol = 53 },
api.nvim_win_text_height(1000, { start_row = 23 })
)
eq(
{ all = 13, fill = 3, end_row = 40, end_vcol = 58 },
api.nvim_win_text_height(1001, { start_row = 18 })
)
eq(
{ all = 11, fill = 0, end_row = 23, end_vcol = 36 },
api.nvim_win_text_height(1000, { end_row = 23 })
)
eq(
{ all = 11, fill = 5, end_row = 18, end_vcol = 36 },
api.nvim_win_text_height(1001, { end_row = 18 })
)
eq(
{ all = 11, fill = 0, end_row = 39, end_vcol = 52 },
api.nvim_win_text_height(1000, { start_row = 3, end_row = 39 })
)
eq(
{ all = 11, fill = 3, end_row = 34, end_vcol = 52 },
api.nvim_win_text_height(1001, { start_row = 1, end_row = 34 })
)
eq(
{ all = 9, fill = 0, end_row = 25, end_vcol = 0 },
api.nvim_win_text_height(1000, { start_row = 4, end_row = 38 })
)
eq(
{ all = 9, fill = 3, end_row = 20, end_vcol = 0 },
api.nvim_win_text_height(1001, { start_row = 2, end_row = 33 })
)
eq(
{ all = 9, fill = 0, end_row = 25, end_vcol = 0 },
api.nvim_win_text_height(1000, { start_row = 5, end_row = 37 })
)
eq(
{ all = 9, fill = 3, end_row = 20, end_vcol = 0 },
api.nvim_win_text_height(1001, { start_row = 3, end_row = 32 })
)
eq(
{ all = 9, fill = 0, end_row = 25, end_vcol = 0 },
api.nvim_win_text_height(1000, { start_row = 17, end_row = 25 })
)
eq(
{ all = 9, fill = 3, end_row = 20, end_vcol = 0 },
api.nvim_win_text_height(1001, { start_row = 15, end_row = 20 })
)
eq(
{ all = 7, fill = 0, end_row = 24, end_vcol = 37 },
api.nvim_win_text_height(1000, { start_row = 18, end_row = 24 })
)
eq(
{ all = 7, fill = 3, end_row = 19, end_vcol = 37 },
api.nvim_win_text_height(1001, { start_row = 16, end_row = 19 })
)
eq(
{ all = 6, fill = 5, end_row = 40, end_vcol = 53 },
api.nvim_win_text_height(1000, { start_row = -1 })
)
eq(
{ all = 5, fill = 5, end_row = 40, end_vcol = 53 },
api.nvim_win_text_height(1000, { start_row = -1, start_vcol = X })
)
eq(
{ all = 0, fill = 0, end_row = 40, end_vcol = 53 },
api.nvim_win_text_height(1000, { start_row = -1, start_vcol = X, end_row = -1 })
)
eq(
{ all = 0, fill = 0 },
{ all = 0, fill = 0, end_row = 40, end_vcol = 53 },
api.nvim_win_text_height(
1000,
{ start_row = -1, start_vcol = X, end_row = -1, end_vcol = X }
)
)
eq(
{ all = 1, fill = 0 },
{ all = 1, fill = 0, end_row = 40, end_vcol = 53 },
api.nvim_win_text_height(
1000,
{ start_row = -1, start_vcol = 0, end_row = -1, end_vcol = X }
)
)
eq({ all = 3, fill = 2 }, api.nvim_win_text_height(1001, { end_row = 0 }))
eq({ all = 2, fill = 2 }, api.nvim_win_text_height(1001, { end_row = 0, end_vcol = 0 }))
eq(
{ all = 2, fill = 2 },
{ all = 3, fill = 2, end_row = 0, end_vcol = 11 },
api.nvim_win_text_height(1001, { end_row = 0 })
)
eq(
{ all = 2, fill = 2, end_row = 0, end_vcol = 0 },
api.nvim_win_text_height(1001, { end_row = 0, end_vcol = 0 })
)
eq(
{ all = 2, fill = 2, end_row = 0, end_vcol = 0 },
api.nvim_win_text_height(1001, { start_row = 0, end_row = 0, end_vcol = 0 })
)
eq(
{ all = 0, fill = 0 },
{ all = 0, fill = 0, end_row = 0, end_vcol = 0 },
api.nvim_win_text_height(1001, { start_row = 0, start_vcol = 0, end_row = 0, end_vcol = 0 })
)
eq(
{ all = 1, fill = 0 },
{ all = 1, fill = 0, end_row = 0, end_vcol = 11 },
api.nvim_win_text_height(1001, { start_row = 0, start_vcol = 0, end_row = 0, end_vcol = X })
)
eq({ all = 11, fill = 5 }, api.nvim_win_text_height(1001, { end_row = 18 }))
eq(
{ all = 9, fill = 3 },
{ all = 11, fill = 5, end_row = 18, end_vcol = 36 },
api.nvim_win_text_height(1001, { end_row = 18 })
)
eq(
{ all = 9, fill = 3, end_row = 18, end_vcol = 36 },
api.nvim_win_text_height(1001, { start_row = 0, start_vcol = 0, end_row = 18 })
)
eq({ all = 10, fill = 5 }, api.nvim_win_text_height(1001, { end_row = 18, end_vcol = 0 }))
eq(
{ all = 8, fill = 3 },
{ all = 10, fill = 5, end_row = 18, end_vcol = 0 },
api.nvim_win_text_height(1001, { end_row = 18, end_vcol = 0 })
)
eq(
{ all = 8, fill = 3, end_row = 18, end_vcol = 0 },
api.nvim_win_text_height(
1001,
{ start_row = 0, start_vcol = 0, end_row = 18, end_vcol = 0 }
@@ -1029,13 +1090,10 @@ describe('API/win', function()
end)
it('with wrapped lines', function()
local X = api.nvim_get_vvar('maxcol')
local screen = Screen.new(45, 22)
exec([[
set number cpoptions+=n
call setline(1, repeat([repeat('foobar-', 36)], 3))
]])
local ns = api.nvim_create_namespace('')
api.nvim_buf_set_extmark(
0,
ns,
@@ -1050,8 +1108,7 @@ describe('API/win', function()
200,
{ virt_text = { { ('!'):rep(75), 'Search' } }, virt_text_pos = 'inline' }
)
screen:expect {
grid = [[
screen:expect([[
{8: 1 }^foobar-foobar-foobar-foobar-foobar-foobar|
-foobar-foobar-foobar-foobar-foobar-foobar-fo|
obar-foobar-foobar-foobar-foobar-foobar-fooba|
@@ -1074,142 +1131,187 @@ describe('API/win', function()
{10:!!!!!!!!!}ar-foobar-foobar-foobar-foobar-fooba|
r-foobar-foobar- |
|
]],
}
]])
screen:try_resize(45, 2)
screen:expect {
grid = [[
screen:expect([[
{8: 1 }^foobar-foobar-foobar-foobar-foobar-foobar|
|
]],
}
eq({ all = 21, fill = 0 }, api.nvim_win_text_height(0, {}))
eq({ all = 6, fill = 0 }, api.nvim_win_text_height(0, { start_row = 0, end_row = 0 }))
eq({ all = 7, fill = 0 }, api.nvim_win_text_height(0, { start_row = 1, end_row = 1 }))
eq({ all = 8, fill = 0 }, api.nvim_win_text_height(0, { start_row = 2, end_row = 2 }))
]])
eq({ all = 21, fill = 0, end_row = 2, end_vcol = 327 }, api.nvim_win_text_height(0, {}))
eq(
{ all = 0, fill = 0 },
{ all = 6, fill = 0, end_row = 0, end_vcol = 252 },
api.nvim_win_text_height(0, { start_row = 0, end_row = 0 })
)
eq(
{ all = 7, fill = 0, end_row = 1, end_vcol = 267 },
api.nvim_win_text_height(0, { start_row = 1, end_row = 1 })
)
eq(
{ all = 8, fill = 0, end_row = 2, end_vcol = 327 },
api.nvim_win_text_height(0, { start_row = 2, end_row = 2 })
)
eq(
{ all = 0, fill = 0, end_row = 1, end_vcol = 0 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 0, end_row = 1, end_vcol = 0 })
)
eq(
{ all = 1, fill = 0 },
{ all = 1, fill = 0, end_row = 1, end_vcol = 41 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 0, end_row = 1, end_vcol = 41 })
)
eq(
{ all = 2, fill = 0 },
{ all = 2, fill = 0, end_row = 1, end_vcol = 42 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 0, end_row = 1, end_vcol = 42 })
)
eq(
{ all = 2, fill = 0 },
{ all = 2, fill = 0, end_row = 1, end_vcol = 86 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 0, end_row = 1, end_vcol = 86 })
)
eq(
{ all = 3, fill = 0 },
{ all = 3, fill = 0, end_row = 1, end_vcol = 87 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 0, end_row = 1, end_vcol = 87 })
)
eq(
{ all = 6, fill = 0 },
{ all = 6, fill = 0, end_row = 1, end_vcol = 266 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 0, end_row = 1, end_vcol = 266 })
)
eq(
{ all = 7, fill = 0 },
{ all = 7, fill = 0, end_row = 1, end_vcol = 267 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 0, end_row = 1, end_vcol = 267 })
)
eq(
{ all = 7, fill = 0 },
{ all = 7, fill = 0, end_row = 1, end_vcol = 267 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 0, end_row = 1, end_vcol = 311 })
)
eq(
{ all = 7, fill = 0 },
{ all = 7, fill = 0, end_row = 1, end_vcol = 267 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 0, end_row = 1, end_vcol = 312 })
)
eq(
{ all = 7, fill = 0 },
{ all = 7, fill = 0, end_row = 1, end_vcol = 267 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 0, end_row = 1, end_vcol = X })
)
eq(
{ all = 7, fill = 0 },
{ all = 7, fill = 0, end_row = 1, end_vcol = 267 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 40, end_row = 1, end_vcol = X })
)
eq(
{ all = 6, fill = 0 },
{ all = 6, fill = 0, end_row = 1, end_vcol = 267 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 41, end_row = 1, end_vcol = X })
)
eq(
{ all = 6, fill = 0 },
{ all = 6, fill = 0, end_row = 1, end_vcol = 267 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 85, end_row = 1, end_vcol = X })
)
eq(
{ all = 5, fill = 0 },
{ all = 5, fill = 0, end_row = 1, end_vcol = 267 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 86, end_row = 1, end_vcol = X })
)
eq(
{ all = 2, fill = 0 },
{ all = 2, fill = 0, end_row = 1, end_vcol = 267 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 265, end_row = 1, end_vcol = X })
)
eq(
{ all = 1, fill = 0 },
{ all = 1, fill = 0, end_row = 1, end_vcol = 267 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 266, end_row = 1, end_vcol = X })
)
eq(
{ all = 1, fill = 0 },
{ all = 1, fill = 0, end_row = 1, end_vcol = 267 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 310, end_row = 1, end_vcol = X })
)
eq(
{ all = 0, fill = 0 },
{ all = 0, fill = 0, end_row = 1, end_vcol = 267 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 311, end_row = 1, end_vcol = X })
)
eq(
{ all = 1, fill = 0 },
{ all = 1, fill = 0, end_row = 1, end_vcol = 131 },
api.nvim_win_text_height(0, { start_row = 1, start_vcol = 86, end_row = 1, end_vcol = 131 })
)
eq(
{ all = 1, fill = 0 },
{ all = 1, fill = 0, end_row = 1, end_vcol = 266 },
api.nvim_win_text_height(
0,
{ start_row = 1, start_vcol = 221, end_row = 1, end_vcol = 266 }
)
)
eq({ all = 18, fill = 0 }, api.nvim_win_text_height(0, { start_row = 0, start_vcol = 131 }))
eq({ all = 19, fill = 0 }, api.nvim_win_text_height(0, { start_row = 0, start_vcol = 130 }))
eq({ all = 20, fill = 0 }, api.nvim_win_text_height(0, { end_row = 2, end_vcol = 311 }))
eq({ all = 21, fill = 0 }, api.nvim_win_text_height(0, { end_row = 2, end_vcol = 312 }))
eq(
{ all = 17, fill = 0 },
{ all = 18, fill = 0, end_row = 2, end_vcol = 327 },
api.nvim_win_text_height(0, { start_row = 0, start_vcol = 131 })
)
eq(
{ all = 19, fill = 0, end_row = 2, end_vcol = 327 },
api.nvim_win_text_height(0, { start_row = 0, start_vcol = 130 })
)
eq(
{ all = 20, fill = 0, end_row = 2, end_vcol = 311 },
api.nvim_win_text_height(0, { end_row = 2, end_vcol = 311 })
)
eq(
{ all = 21, fill = 0, end_row = 2, end_vcol = 312 },
api.nvim_win_text_height(0, { end_row = 2, end_vcol = 312 })
)
eq(
{ all = 17, fill = 0, end_row = 2, end_vcol = 311 },
api.nvim_win_text_height(
0,
{ start_row = 0, start_vcol = 131, end_row = 2, end_vcol = 311 }
)
)
eq(
{ all = 19, fill = 0 },
{ all = 19, fill = 0, end_row = 2, end_vcol = 312 },
api.nvim_win_text_height(
0,
{ start_row = 0, start_vcol = 130, end_row = 2, end_vcol = 312 }
)
)
eq({ all = 16, fill = 0 }, api.nvim_win_text_height(0, { start_row = 0, start_vcol = 221 }))
eq({ all = 17, fill = 0 }, api.nvim_win_text_height(0, { start_row = 0, start_vcol = 220 }))
eq({ all = 14, fill = 0 }, api.nvim_win_text_height(0, { end_row = 2, end_vcol = 41 }))
eq({ all = 15, fill = 0 }, api.nvim_win_text_height(0, { end_row = 2, end_vcol = 42 }))
eq(
{ all = 9, fill = 0 },
{ all = 16, fill = 0, end_row = 2, end_vcol = 327 },
api.nvim_win_text_height(0, { start_row = 0, start_vcol = 221 })
)
eq(
{ all = 17, fill = 0, end_row = 2, end_vcol = 327 },
api.nvim_win_text_height(0, { start_row = 0, start_vcol = 220 })
)
eq(
{ all = 14, fill = 0, end_row = 2, end_vcol = 41 },
api.nvim_win_text_height(0, { end_row = 2, end_vcol = 41 })
)
eq(
{ all = 15, fill = 0, end_row = 2, end_vcol = 42 },
api.nvim_win_text_height(0, { end_row = 2, end_vcol = 42 })
)
eq(
{ all = 9, fill = 0, end_row = 2, end_vcol = 41 },
api.nvim_win_text_height(0, { start_row = 0, start_vcol = 221, end_row = 2, end_vcol = 41 })
)
eq(
{ all = 11, fill = 0 },
{ all = 11, fill = 0, end_row = 2, end_vcol = 42 },
api.nvim_win_text_height(0, { start_row = 0, start_vcol = 220, end_row = 2, end_vcol = 42 })
)
exec('call setline(1, "foo")')
eq(
{ all = 1, fill = 0, end_row = 0, end_vcol = 3 },
api.nvim_win_text_height(0, { max_height = 1 })
)
eq(
{ all = 8, fill = 0, end_row = 1, end_vcol = 41 },
api.nvim_win_text_height(0, { max_height = 2 })
)
eq(
{ all = 2, fill = 0, end_row = 1, end_vcol = 1 },
api.nvim_win_text_height(0, { max_height = 2, end_row = 1, end_vcol = 1 })
)
eq(
{ all = 8, fill = 0, end_row = 1, end_vcol = 41 },
api.nvim_win_text_height(0, { max_height = 2, end_row = 2, end_vcol = 1 })
)
end)
it('with virtual lines around a fold', function()
local X = api.nvim_get_vvar('maxcol')
local screen = Screen.new(45, 10)
screen:try_resize(45, 10)
exec([[
call setline(1, range(1, 8))
3,6fold
]])
local ns = api.nvim_create_namespace('TEST')
api.nvim_buf_set_extmark(
0,
ns,
@@ -1236,21 +1338,85 @@ describe('API/win', function()
{1:~ }|
|
]])
eq({ all = 8, fill = 3 }, api.nvim_win_text_height(0, {}))
eq({ all = 5, fill = 2 }, api.nvim_win_text_height(0, { end_row = 2 }))
eq({ all = 5, fill = 2 }, api.nvim_win_text_height(0, { end_row = 2, end_vcol = X }))
eq({ all = 5, fill = 2 }, api.nvim_win_text_height(0, { end_row = 2, end_vcol = 90 }))
eq({ all = 5, fill = 2 }, api.nvim_win_text_height(0, { end_row = 2, end_vcol = 46 }))
eq({ all = 5, fill = 2 }, api.nvim_win_text_height(0, { end_row = 2, end_vcol = 45 }))
eq({ all = 5, fill = 2 }, api.nvim_win_text_height(0, { end_row = 2, end_vcol = 1 }))
eq({ all = 4, fill = 2 }, api.nvim_win_text_height(0, { end_row = 2, end_vcol = 0 }))
eq({ all = 6, fill = 3 }, api.nvim_win_text_height(0, { start_row = 2 }))
eq({ all = 4, fill = 1 }, api.nvim_win_text_height(0, { start_row = 2, start_vcol = 0 }))
eq({ all = 4, fill = 1 }, api.nvim_win_text_height(0, { start_row = 2, start_vcol = 44 }))
eq({ all = 3, fill = 1 }, api.nvim_win_text_height(0, { start_row = 2, start_vcol = 45 }))
eq({ all = 3, fill = 1 }, api.nvim_win_text_height(0, { start_row = 2, start_vcol = 89 }))
eq({ all = 3, fill = 1 }, api.nvim_win_text_height(0, { start_row = 2, start_vcol = 90 }))
eq({ all = 3, fill = 1 }, api.nvim_win_text_height(0, { start_row = 2, start_vcol = X }))
eq({ all = 8, fill = 3, end_row = 7, end_vcol = 1 }, api.nvim_win_text_height(0, {}))
eq(
{ all = 5, fill = 2, end_row = 2, end_vcol = 0 },
api.nvim_win_text_height(0, { end_row = 2 })
)
eq(
{ all = 5, fill = 2, end_row = 2, end_vcol = 0 },
api.nvim_win_text_height(0, { end_row = 2, end_vcol = X })
)
eq(
{ all = 5, fill = 2, end_row = 2, end_vcol = 0 },
api.nvim_win_text_height(0, { end_row = 2, end_vcol = 90 })
)
eq(
{ all = 5, fill = 2, end_row = 2, end_vcol = 0 },
api.nvim_win_text_height(0, { end_row = 2, end_vcol = 46 })
)
eq(
{ all = 5, fill = 2, end_row = 2, end_vcol = 0 },
api.nvim_win_text_height(0, { end_row = 2, end_vcol = 45 })
)
eq(
{ all = 5, fill = 2, end_row = 2, end_vcol = 0 },
api.nvim_win_text_height(0, { end_row = 2, end_vcol = 1 })
)
eq(
{ all = 4, fill = 2, end_row = 2, end_vcol = 0 },
api.nvim_win_text_height(0, { end_row = 2, end_vcol = 0 })
)
eq(
{ all = 6, fill = 3, end_row = 7, end_vcol = 1 },
api.nvim_win_text_height(0, { start_row = 2 })
)
eq(
{ all = 4, fill = 1, end_row = 7, end_vcol = 1 },
api.nvim_win_text_height(0, { start_row = 2, start_vcol = 0 })
)
eq(
{ all = 4, fill = 1, end_row = 7, end_vcol = 1 },
api.nvim_win_text_height(0, { start_row = 2, start_vcol = 44 })
)
eq(
{ all = 3, fill = 1, end_row = 7, end_vcol = 1 },
api.nvim_win_text_height(0, { start_row = 2, start_vcol = 45 })
)
eq(
{ all = 3, fill = 1, end_row = 7, end_vcol = 1 },
api.nvim_win_text_height(0, { start_row = 2, start_vcol = 89 })
)
eq(
{ all = 3, fill = 1, end_row = 7, end_vcol = 1 },
api.nvim_win_text_height(0, { start_row = 2, start_vcol = 90 })
)
eq(
{ all = 3, fill = 1, end_row = 7, end_vcol = 1 },
api.nvim_win_text_height(0, { start_row = 2, start_vcol = X })
)
end)
it('with virt_lines above max_height row', function()
screen:try_resize(45, 10)
exec('call setline(1, range(1, 7) + ["foo"->repeat(20)])')
api.nvim_buf_set_extmark(0, ns, 6, 0, { virt_lines = { { { 'VIRT LINE 1' } } } })
screen:expect([[
^1 |
2 |
3 |
4 |
5 |
6 |
7 |
VIRT LINE 1 |
foofoofoofoofoofoofoofoofoofoofoofoofoofoo{1:@@@}|
|
]])
eq(
{ all = 10, fill = 1, end_row = 7, end_vcol = 45 },
api.nvim_win_text_height(0, { max_height = api.nvim_win_get_height(0) })
)
end)
end)