vitorpy's Dotfiles
1return {
2 "akinsho/toggleterm.nvim",
3 version = "*",
4 config = function()
5 require("toggleterm").setup({
6 size = 20,
7 open_mapping = [[<c-\>]],
8 hide_numbers = true,
9 shade_terminals = true,
10 start_in_insert = true,
11 insert_mappings = true,
12 terminal_mappings = true,
13 persist_size = true,
14 direction = "float",
15 close_on_exit = true,
16 shell = vim.o.shell,
17 float_opts = {
18 border = "curved",
19 winblend = 0,
20 },
21 })
22
23 local Terminal = require("toggleterm.terminal").Terminal
24
25 -- Track current terminal index
26 local term_idx = 1
27 local terminals = {}
28
29 -- Function to get or create terminal
30 local function get_terminal(idx)
31 if not terminals[idx] then
32 terminals[idx] = Terminal:new({
33 count = idx,
34 direction = "float",
35 on_close = function()
36 terminals[idx] = nil
37 end,
38 })
39 end
40 return terminals[idx]
41 end
42
43 -- Toggle current terminal
44 vim.keymap.set("n", "<leader>t", function()
45 get_terminal(term_idx):toggle()
46 end, { desc = "Toggle terminal" })
47
48 -- Create new terminal (next tab)
49 vim.keymap.set("n", "<leader>tn", function()
50 term_idx = term_idx + 1
51 get_terminal(term_idx):toggle()
52 end, { desc = "New terminal tab" })
53
54 -- Cycle to next terminal
55 vim.keymap.set("n", "<leader>]", function()
56 get_terminal(term_idx):close()
57 term_idx = term_idx % 10 + 1
58 get_terminal(term_idx):open()
59 end, { desc = "Next terminal" })
60
61 -- Cycle to previous terminal
62 vim.keymap.set("n", "<leader>[", function()
63 get_terminal(term_idx):close()
64 term_idx = term_idx - 1
65 if term_idx < 1 then term_idx = 10 end
66 get_terminal(term_idx):open()
67 end, { desc = "Previous terminal" })
68
69 -- Close current terminal
70 vim.keymap.set("n", "<leader>tc", function()
71 get_terminal(term_idx):shutdown()
72 terminals[term_idx] = nil
73 end, { desc = "Close terminal" })
74
75 -- Exit terminal mode
76 vim.keymap.set("t", "<esc>", [[<C-\><C-n>]], { desc = "Exit terminal mode" })
77
78 -- Pass C-c to terminal
79 vim.keymap.set("t", "<C-c>", "<C-c>", { desc = "Send C-c to terminal" })
80 end,
81}