Follows logic of other toggle maps for neovim, i.e. <leader>tt for buffer-term and <leader>tT for floating term.
85 lines
3 KiB
Lua
85 lines
3 KiB
Lua
return { -- simple programmable terminal toggling for nvim
|
|
{
|
|
"akinsho/nvim-toggleterm.lua",
|
|
init = function(_)
|
|
if require("core.util").is_available("which-key") then
|
|
require("which-key").add({ "<leader>t", group = "terminal" })
|
|
end
|
|
end,
|
|
config = function()
|
|
require("toggleterm").setup({
|
|
open_mapping = [[<leader>tt]],
|
|
insert_mappings = false, -- don't map the key in insert mode
|
|
terminal_mappings = false,
|
|
})
|
|
|
|
local Terminal = require("toggleterm.terminal").Terminal
|
|
|
|
local function custom_term_set_toggle_key(term)
|
|
vim.keymap.set("t", "<C-\\>", function()
|
|
term:toggle()
|
|
end, { silent = true, buffer = true, desc = "terminal" })
|
|
end
|
|
|
|
local custom_term_default_style = function(cmd)
|
|
return {
|
|
cmd = cmd,
|
|
hidden = true,
|
|
direction = "float",
|
|
float_opts = { border = "curved" },
|
|
on_open = custom_term_set_toggle_key,
|
|
}
|
|
end
|
|
local terms = {
|
|
lazygit = Terminal:new(custom_term_default_style("lazygit")),
|
|
python = Terminal:new(custom_term_default_style(function()
|
|
for _, exec in pairs({ "py", "ptipython", "ipython", "ptpython", "python" }) do
|
|
if vim.fn.executable(exec) > 0 then
|
|
return exec
|
|
end
|
|
end
|
|
end)),
|
|
euporie = Terminal:new(custom_term_default_style(function()
|
|
local kernel = vim.b.sessionfile
|
|
if kernel then
|
|
return "euporie-console --connection-file '" .. kernel .. "'"
|
|
end
|
|
return "euporie-console"
|
|
end)),
|
|
}
|
|
-- have user decide between floating or split
|
|
local function toggle_split_or_float(term, bang, vertsize)
|
|
vertsize = vertsize or vim.o.columns * 0.4
|
|
if not bang then
|
|
term.direction = "float"
|
|
term:toggle()
|
|
else
|
|
term.direction = "vertical"
|
|
term:resize(vertsize)
|
|
term:toggle()
|
|
end
|
|
end
|
|
|
|
vim.api.nvim_create_user_command("Lazygit", function(opts)
|
|
toggle_split_or_float(terms.lazygit, opts.bang, vim.o.columns * 0.6)
|
|
end, { desc = "Toggle floating Lazygit terminal", bang = true })
|
|
vim.api.nvim_create_user_command("Pythonterm", function(opts)
|
|
toggle_split_or_float(terms.python, opts.bang)
|
|
end, { desc = "Toggle floating Python terminal", bang = true })
|
|
vim.api.nvim_create_user_command("Euporieterm", function(opts)
|
|
toggle_split_or_float(terms.euporie, opts.bang)
|
|
end, { desc = "Toggle floating Euporie terminal", bang = true })
|
|
end,
|
|
cmd = { "ToggleTerm", "TermExec", "Lazygit", "Pythonterm", "Euporieterm" },
|
|
keys = {
|
|
{ "<leader>tt", ":ToggleTerm<cr>", desc = "terminal buffer" },
|
|
{ "<leader>tT", ":ToggleTerm direction='float'<cr>", desc = "terminal floating" },
|
|
{ "<leader>tg", ":Lazygit<cr>", desc = "git floating" },
|
|
{ "<leader>tG", ":Lazygit!<cr>", desc = "git buffer" },
|
|
{ "<leader>tp", ":Pythonterm<cr>", desc = "python floating" },
|
|
{ "<leader>tP", ":Pythonterm!<cr>", desc = "python buffer" },
|
|
{ "<leader>te", ":Euporieterm<cr>", desc = "euporie floating" },
|
|
{ "<leader>tE", ":Euporieterm!<cr>", desc = "euporie buffer" },
|
|
},
|
|
},
|
|
}
|