aboutsummaryrefslogtreecommitdiff
path: root/nvim/lua/config/autocmds.lua
blob: 29532f909b44e091f8bdfd48a5dd36f78d21530d (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
-- https://github.com/nvim-treesitter/nvim-treesitter/blob/main/doc/nvim-treesitter.txt
local treesitter_languages = require("config.treesitter").languages
local extra_filetypes = require("config.filetypes").extra

local function enable_treesitter_features()
  if not pcall(vim.treesitter.start) then return end

  vim.wo.foldmethod = "expr"
  vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()"
  vim.bo.indentexpr = "v:lua.require('nvim-treesitter').indentexpr()"
end

-- Fuehrt zwei Listen zu einer neuen zusammen, ohne die Eingaben zu veraendern.
local function merge(list, extra)
  local merged = { table.unpack(list) }
  for _, item in ipairs(extra) do
    table.insert(merged, item)
  end
  return merged
end

vim.api.nvim_create_autocmd("FileType", {
  pattern = merge(treesitter_languages, extra_filetypes),
  callback = enable_treesitter_features,
})

-- https://github.com/nvim-tree/nvim-tree.lua/wiki/Auto-Close
vim.api.nvim_create_autocmd("QuitPre", {
  callback = function()
    local invalid_win = {}
    local wins = vim.api.nvim_list_wins()

    for _, w in ipairs(wins) do
      local bufname = vim.api.nvim_buf_get_name(vim.api.nvim_win_get_buf(w))
      if bufname:match("NvimTree_") ~= nil then table.insert(invalid_win, w) end
    end

    if #invalid_win == #wins - 1 then
      -- Should quit, so we close all invalid windows.
      for _, w in ipairs(invalid_win) do
        vim.api.nvim_win_close(w, true)
      end
    end
  end,
})

vim.api.nvim_create_autocmd("LspAttach", {
  callback = function(event)
    local client = vim.lsp.get_client_by_id(event.data.client_id)
    local keymaps = require("config.keymaps")
    keymaps.lsp(event.buf, client)
  end,
})