URI:
       12-functions.lua - dotfiles - dark dots
  HTML git clone https://git.drkhsh.at/dotfiles
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
       12-functions.lua (2884B)
       ---
            1 local autocmd = vim.api.nvim_create_autocmd
            2 local augroup = vim.api.nvim_create_augroup
            3 
            4 -- restore cursor position when opening file
            5 -- https://github.com/neovim/neovim/issues/16339
            6 autocmd("BufRead", {
            7         callback = function(opts)
            8                 vim.api.nvim_create_autocmd("BufWinEnter", {
            9                         once = true,
           10                         buffer = opts.buf,
           11                         callback = function()
           12                                 local ft = vim.bo[opts.buf].filetype
           13                                 local last_known_line = vim.api.nvim_buf_get_mark(opts.buf, '"')[1]
           14                                 if
           15                                         not (ft:match("commit") and ft:match("rebase"))
           16                                         and last_known_line > 1
           17                                         and last_known_line <= vim.api.nvim_buf_line_count(opts.buf)
           18                                 then
           19                                         vim.api.nvim_feedkeys([[g`"]], "nx", false)
           20                                 end
           21                         end,
           22                 })
           23         end,
           24 })
           25 
           26 -- show tabline only when >1 tab
           27 autocmd("BufEnter", {
           28         callback = vim.schedule_wrap(function()
           29                 local n_listed_bufs = 0
           30                 for _, buf_id in ipairs(vim.api.nvim_list_bufs()) do
           31                         if vim.fn.buflisted(buf_id) == 1 then
           32                                 n_listed_bufs = n_listed_bufs + 1
           33                         end
           34                 end
           35 
           36                 vim.o.showtabline = n_listed_bufs > 1 and 2 or 0
           37         end),
           38         desc = "Update tabline based on the number of listed buffers",
           39 })
           40 
           41 -- highlights yanked text
           42 autocmd("TextYankPost", {
           43         callback = function()
           44                 vim.highlight.on_yank({
           45                         higroup = "IncSearch",
           46                         timeout = 40,
           47                 })
           48         end,
           49 })
           50 
           51 -- resize splits with terminal window
           52 autocmd({ "VimResized" }, {
           53         group = vim.api.nvim_create_augroup("EqualizeSplits", {}),
           54         callback = function()
           55                 local current_tab = vim.api.nvim_get_current_tabpage()
           56                 vim.cmd("tabdo wincmd =")
           57                 vim.api.nvim_set_current_tabpage(current_tab)
           58         end,
           59         desc = "Resize splits with terminal window",
           60 })
           61 
           62 -- create directories when needed, when saving a file
           63 vim.api.nvim_create_autocmd("BufWritePre", {
           64   group = vim.api.nvim_create_augroup("auto_create_dir", { clear = true }),
           65   callback = function(event)
           66     local file = vim.loop.fs_realpath(event.match) or event.match
           67 
           68     vim.fn.mkdir(vim.fn.fnamemodify(file, ":p:h"), "p")
           69     local backup = vim.fn.fnamemodify(file, ":p:~:h")
           70     backup = backup:gsub("[/\\]", "%%")
           71     vim.go.backupext = backup
           72   end,
           73 })
           74 
           75 -- show cursor line only in active window
           76 vim.api.nvim_create_autocmd({ "InsertLeave", "WinEnter" }, {
           77   callback = function()
           78     local ok, cl = pcall(vim.api.nvim_win_get_var, 0, "auto-cursorline")
           79     if ok and cl then
           80       vim.wo.cursorline = true
           81       vim.api.nvim_win_del_var(0, "auto-cursorline")
           82     end
           83   end,
           84 })
           85 vim.api.nvim_create_autocmd({ "InsertEnter", "WinLeave" }, {
           86   callback = function()
           87     local cl = vim.wo.cursorline
           88     if cl then
           89       vim.api.nvim_win_set_var(0, "auto-cursorline", cl)
           90       vim.wo.cursorline = false
           91     end
           92   end,
           93 })
           94 
           95 -- auto insert in :terminal
           96 vim.api.nvim_create_autocmd({ "TermOpen", "WinEnter" }, { pattern = "term://*", command = "startinsert" })
           97 
           98 -- TODO.txt
           99 vim.api.nvim_create_autocmd({'BufRead', 'BufNewFile'}, {
          100         pattern = 'TODO*.txt',
          101         command = 'set filetype=todotxt'
          102 })