44 lines
1.2 KiB
Lua
44 lines
1.2 KiB
Lua
local M = {}
|
|
|
|
---@return number width, number height
|
|
function M.get_terminal_size()
|
|
local width = vim.o.columns
|
|
local height = vim.o.lines
|
|
return width, height
|
|
end
|
|
|
|
---@param width number width in percentage of screen width (0.75, 0.5, etc)
|
|
---@param height number height in percentage of screen height (0.75, 0.5, etc)
|
|
---@return number buffer, number window
|
|
function M.create_floating_window_in_center(width, height)
|
|
local bufnr = vim.api.nvim_create_buf(false, true) -- not listed, scratch buffer
|
|
|
|
local max_width, max_height = M.get_terminal_size()
|
|
local win_width = math.floor(max_width * width)
|
|
local win_height = math.floor(max_height * height)
|
|
|
|
local winnr = vim.api.nvim_open_win(bufnr, true, {
|
|
relative = "editor",
|
|
width = win_width,
|
|
height = win_height,
|
|
row = (max_height - win_height) / 2,
|
|
col = (max_width - win_width) / 2,
|
|
focusable = true,
|
|
style = "minimal",
|
|
})
|
|
|
|
return bufnr, winnr
|
|
end
|
|
|
|
---@param bufnr number
|
|
---@param content string
|
|
function M.set_buffer_text(bufnr, content)
|
|
local lines = {}
|
|
for s in content:gmatch("[^\r\n]+") do
|
|
table.insert(lines, s)
|
|
end
|
|
vim.api.nvim_buf_set_lines(bufnr, 0, vim.tbl_count(lines), false, lines)
|
|
end
|
|
|
|
return M
|