|
@@ -41,26 +41,59 @@ M.config = function()
|
|
|
-- lvim.builtin.terminal.execs[#lvim.builtin.terminal.execs+1] = {"gdb", "tg", "GNU Debugger"}
|
|
|
-- TODO: pls add mappings in which key and refactor this
|
|
|
execs = {
|
|
|
- { vim.o.shell, "<M-1>", "Horizontal Terminal", "horizontal", 10 },
|
|
|
- { vim.o.shell, "<M-2>", "Vertical Terminal", "vertical", 60 },
|
|
|
+ { vim.o.shell, "<M-1>", "Horizontal Terminal", "horizontal", 0.3 },
|
|
|
+ { vim.o.shell, "<M-2>", "Vertical Terminal", "vertical", 0.3 },
|
|
|
{ vim.o.shell, "<M-3>", "Float Terminal", "float", nil },
|
|
|
},
|
|
|
}
|
|
|
end
|
|
|
|
|
|
+--- Get current buffer size
|
|
|
+---@return {width: number, height: number}
|
|
|
+local function get_buf_size()
|
|
|
+ local cbuf = vim.api.nvim_get_current_buf()
|
|
|
+ local bufinfo = vim.tbl_filter(function(buf)
|
|
|
+ return buf.bufnr == cbuf
|
|
|
+ end, vim.fn.getwininfo(vim.api.nvim_get_current_win()))[1]
|
|
|
+ if bufinfo == nil then
|
|
|
+ return { width = -1, height = -1 }
|
|
|
+ end
|
|
|
+ return { width = bufinfo.width, height = bufinfo.height }
|
|
|
+end
|
|
|
+
|
|
|
+--- Get the dynamic terminal size in cells
|
|
|
+---@param direction number
|
|
|
+---@param size integer
|
|
|
+---@return integer
|
|
|
+local function get_dynamic_terminal_size(direction, size)
|
|
|
+ size = size or lvim.builtin.terminal.size
|
|
|
+ if direction ~= "float" and tostring(size):find(".", 1, true) then
|
|
|
+ size = math.min(size, 1.0)
|
|
|
+ local buf_sizes = get_buf_size()
|
|
|
+ local buf_size = direction == "horizontal" and buf_sizes.height or buf_sizes.width
|
|
|
+ return buf_size * size
|
|
|
+ else
|
|
|
+ return size
|
|
|
+ end
|
|
|
+end
|
|
|
+
|
|
|
M.setup = function()
|
|
|
local terminal = require "toggleterm"
|
|
|
terminal.setup(lvim.builtin.terminal)
|
|
|
|
|
|
for i, exec in pairs(lvim.builtin.terminal.execs) do
|
|
|
+ local direction = exec[4] or lvim.builtin.terminal.direction
|
|
|
+
|
|
|
local opts = {
|
|
|
cmd = exec[1],
|
|
|
keymap = exec[2],
|
|
|
label = exec[3],
|
|
|
-- NOTE: unable to consistently bind id/count <= 9, see #2146
|
|
|
count = i + 100,
|
|
|
- direction = exec[4] or lvim.builtin.terminal.direction,
|
|
|
- size = exec[5] or lvim.builtin.terminal.size,
|
|
|
+ direction = direction,
|
|
|
+ size = function()
|
|
|
+ return get_dynamic_terminal_size(direction, exec[5])
|
|
|
+ end,
|
|
|
}
|
|
|
|
|
|
M.add_exec(opts)
|
|
@@ -79,7 +112,7 @@ M.add_exec = function(opts)
|
|
|
end
|
|
|
|
|
|
vim.keymap.set({ "n", "t" }, opts.keymap, function()
|
|
|
- M._exec_toggle { cmd = opts.cmd, count = opts.count, direction = opts.direction, size = opts.size }
|
|
|
+ M._exec_toggle { cmd = opts.cmd, count = opts.count, direction = opts.direction, size = opts.size() }
|
|
|
end, { desc = opts.label, noremap = true, silent = true })
|
|
|
end
|
|
|
|