nvim-nix/nvim/lua/terminal.lua
2025-11-26 02:23:32 +03:00

97 lines
2.4 KiB
Lua

local Terminal = {}
Terminal.close_augroup = "close_augroup"
Terminal.set_keymaps = function(bufnr)
local opts = { buffer = bufnr }
vim.keymap.set("t", "<c-\\><c-\\>", [[<C-\><C-n>]], opts)
vim.keymap.set("t", "<C-h>", [[<C-\><C-N><C-w>h]], opts)
vim.keymap.set("t", "<C-j>", [[<C-\><C-N><C-w>j]], opts)
vim.keymap.set("t", "<C-k>", [[<C-\><C-N><C-w>k]], opts)
vim.keymap.set("t", "<C-l>", [[<C-\><C-N><C-w>l]], opts)
vim.keymap.set("t", "<C-w>", [[<C-\><C-n><C-w>]], opts)
vim.keymap.set({ "n" }, { "<A-q>", "<leader>q", "<space>q" }, function()
vim.api.nvim_win_close(vim.api.nvim_get_current_win(), true)
end, opts)
vim.keymap.set({ "t" }, { "<A-q>" }, function()
vim.api.nvim_win_close(vim.api.nvim_get_current_win(), true)
end, opts)
end
Terminal.configure = function()
local opts = {
swapfile = false,
buflisted = false,
relativenumber = false,
number = false,
readonly = true,
scl = "no",
statuscolumn = "",
cursorline = false,
cursorcolumn = false,
winfixbuf = false,
winfixheight = true,
winfixwidth = true,
}
for key, value in pairs(opts) do
vim.opt_local[key] = value
end
end
local au_id = vim.api.nvim_create_augroup("terminal_nvim", { clear = true })
vim.api.nvim_create_autocmd({ "WinEnter", "BufWinEnter", "TermOpen" }, {
group = au_id,
callback = function(args)
if vim.startswith(vim.api.nvim_buf_get_name(args.buf), "term://") then
vim.cmd("startinsert!")
end
end,
})
vim.api.nvim_create_autocmd({ "TermOpen" }, {
callback = function(params)
if vim.b[params.buf]["term_ignore"] == true then
return
end
Terminal.configure()
Terminal.set_keymaps(params.buf)
vim.api.nvim_create_autocmd({ "TermClose" }, {
callback = function()
vim.schedule(function()
pcall(vim.api.nvim_buf_delete, params.buf, { force = true })
end)
vim.cmd("let &stl = &stl") -- redrawstatus | redrawtabline
end,
group = au_id,
desc = "on_term_close",
buffer = params.buf,
})
end,
group = au_id,
desc = "on_term_open",
})
Terminal.open = function(command, split_dir)
if command == "" or command == nil then
local shell = vim.o.shell
command = shell
end
if split_dir == "" or split_dir == nil then
split_dir = "tabnew"
end
vim.cmd(split_dir .. " | redraw! | terminal " .. command)
local bufnr = vim.api.nvim_get_current_buf()
return bufnr
end
return Terminal