toggleterm.lua (3893B)
1 local vim = vim 2 local autoRun = "horizontal" 3 local default = "vertical" 4 local status_ok, toggleterm = pcall(require, "toggleterm") 5 if not status_ok then 6 return 7 end 8 9 toggleterm.setup({ 10 size = function(term) 11 if term.direction == "horizontal" then 12 return 20 13 else 14 return 60 15 end 16 end, 17 open_mapping = [[<C-t>]], 18 hide_numbers = true, 19 shade_filetypes = {}, 20 shade_terminals = true, 21 shading_factor = 2, 22 start_in_insert = true, 23 insert_mappings = true, 24 persist_size = true, 25 direction = default, 26 close_on_exit = true, 27 shell = vim.o.shell, 28 float_opts = { 29 border = "curved", 30 winblend = 0, 31 highlights = { 32 border = "Normal", 33 background = "Normal", 34 }, 35 }, 36 }) 37 38 function _G.set_terminal_keymaps() 39 local opts = { noremap = true } 40 vim.api.nvim_buf_set_keymap(0, "t", "<esc>", [[<C-\><C-n>]], opts) 41 vim.api.nvim_buf_set_keymap(0, "t", "jk", [[<C-\><C-n>]], opts) 42 end 43 44 vim.cmd("autocmd! TermOpen term://* lua set_terminal_keymaps()") 45 local Terminal = require("toggleterm.terminal").Terminal 46 47 -- Define toggle functions 48 49 function _RUN_SCRIPT() 50 local buffname = vim.api.nvim_buf_get_name(0) 51 local filepath = vim.fn.fnamemodify(buffname, ":p") 52 local script_run = Terminal:new({ 53 cmd = "run " .. filepath, 54 hidden = true, 55 close_on_exit = false, 56 direction = autoRun, 57 persist_size = true, 58 }) 59 60 script_run:toggle() 61 end 62 63 function _RUN_TEST() 64 local buffname = vim.api.nvim_buf_get_name(0) 65 local filepath = vim.fn.fnamemodify(buffname, ":p") 66 local script_test = Terminal:new({ 67 cmd = "run " .. filepath .. " --test", 68 direction = autoRun, 69 persist_size = true, 70 hidden = true, 71 close_on_exit = false, 72 }) 73 script_test:toggle() 74 end 75 76 function _RUN_REPL() 77 local buffname = vim.api.nvim_buf_get_name(0) 78 local filepath = vim.fn.fnamemodify(buffname, ":p") 79 local script_test = Terminal:new({ 80 cmd = "run " .. filepath .. " --repl", 81 direction = autoRun, 82 persist_size = true, 83 hidden = true, 84 close_on_exit = false, 85 }) 86 script_test:toggle() 87 end 88 89 function _RUN_MIX() 90 local buffname = vim.api.nvim_buf_get_name(0) 91 local filepath = vim.fn.fnamemodify(buffname, ":p") 92 local script_test = Terminal:new({ 93 cmd = "run " .. filepath .. " --mix", 94 direction = autoRun, 95 persist_size = true, 96 hidden = true, 97 close_on_exit = false, 98 }) 99 script_test:toggle() 100 end 101 102 function _RUN_BUILD() 103 local buffname = vim.api.nvim_buf_get_name(0) 104 local filepath = vim.fn.fnamemodify(buffname, ":p") 105 local script_build = Terminal:new({ 106 cmd = "run " .. filepath .. " --build", 107 hidden = true, 108 direction = autoRun, 109 persist_size = true, 110 close_on_exit = false, 111 }) 112 script_build:toggle() 113 end 114 115 function _SEND_BIN() 116 local buffname = vim.api.nvim_buf_get_name(0) 117 local filepath = vim.fn.fnamemodify(buffname, ":p") 118 local sendToServer = "run " .. filepath .. " --build && scp ./bin/* Igris.local:/home/igris/exps" 119 local script_send = Terminal:new({ 120 cmd = sendToServer, 121 hidden = true, 122 direction = autoRun, 123 persist_size = true, 124 close_on_exit = false, 125 }) 126 script_send:toggle() 127 end 128 129 function _LAZYGIT_TOGGLE() 130 local lazygit = Terminal:new({ cmd = "lazygit", hidden = true, direction = "float" }) 131 132 lazygit:toggle() 133 end 134 135 -- Set keymaps 136 vim.keymap.set("n", "<leader>mr", _RUN_SCRIPT, { noremap = true, silent = true, desc = "run script" }) 137 vim.keymap.set("n", "<leader>mt", _RUN_TEST, { noremap = true, silent = true, desc = "run test(s)" }) 138 vim.keymap.set("n", "<leader>mi", _RUN_REPL, { noremap = true, silent = true, desc = "run REPL" }) 139 vim.keymap.set("n", "<leader>mm", _RUN_MIX, { noremap = true, silent = true, desc = "run with MIX" }) 140 vim.keymap.set("n", "<leader>mb", _RUN_BUILD, { noremap = true, silent = true, desc = "build project" }) 141 vim.keymap.set("n", "<leader>ms", _SEND_BIN, { noremap = true, silent = true, desc = "send binaries to server" }) 142 vim.keymap.set("n", "<leader>ml", _LAZYGIT_TOGGLE, { noremap = true, silent = true, desc = "lazygit" })