aboutsummaryrefslogtreecommitdiff
path: root/nvim/lua/plugins/toggleterm.lua
blob: f47d0abfdde31e086eda5dc18a4df6861634b6ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
local init = function()
  local keymap = vim.keymap
  keymap.set("n", "<C-t>", ":ToggleTerm<Enter>:startinsert<Enter>",
    { noremap = true, silent = true, desc = "Terminal (ToggleTerm)" }) -- Terminal
  keymap.set("t", "<C-t>", "<C-\\><C-n>:ToggleTerm<Enter>")
  keymap.set("n", "<Space>g", ":ToggleLazyGit<Enter>",
    { noremap = true, silent = true, desc = "LazyGit (ToggleTerm)" }) -- LazyGit
end

local config = function()
  require("toggleterm").setup {
    autochdir = false,
    direction = "float",
    -- open_mapping = [[<c-t>]],
    -- terminal_mappings = true,
    start_in_insert = false,
    float_opts = {
      border = "curved",
    },
    on_open = function(term)
      local cwd = vim.fn.getcwd()
      if term.dir ~= cwd then
        term:send("cd " .. cwd .. " && clear")
        term.dir = cwd
      end
    end,
  }
  local Terminal = require("toggleterm.terminal").Terminal
  local opts = {
    noremap = true, -- non-recursive
    silent = true,  -- do not show message
  }

  -- LazyGit
  local lazygit = Terminal:new({
    cmd = "lazygit",
    dir = "git_dir",
    direction = "float",
    float_opts = {
      border = "curved",
    },
    -- function to run on opening the terminal
    on_open = function(term)
      vim.cmd("startinsert!")
      vim.api.nvim_buf_set_keymap(term.bufnr, "n", "q", ":close<Enter>", opts)
    end,
    -- function to run on closing the terminal
    on_close = function()
      vim.cmd("startinsert!")
    end,
  })
  local function toggle_lazygit()
    lazygit:toggle()
  end
  vim.api.nvim_create_user_command("ToggleLazyGit", toggle_lazygit, {})
end

return {
  "akinsho/toggleterm.nvim",
  lazy = true,
  cmd = { "ToggleTerm", "ToggleLazyGit" },
  init = init,
  config = config,
}