dot

NixOS dotfiles
git clone https://git.echoz.io/dot.git
Log | Files | Refs

winbar.nix (1711B)


      1 {
      2   programs.neovim.customPlugins.winbar = {
      3     "plugin/winbar.lua" = # lua
      4       ''
      5         vim.api.nvim_create_autocmd(
      6           {'BufEnter', 'BufAdd', 'BufDelete', 'BufLeave', 'BufModifiedSet', 'BufWrite'},
      7           {
      8             group = vim.api.nvim_create_augroup("WinBarBuffers", { clear = true }),
      9             pattern = "*",
     10             callback = function()
     11               local buffers = {}
     12               local current = vim.api.nvim_win_get_buf(0)
     13 
     14               for _, bufnr in ipairs(vim.api.nvim_list_bufs()) do
     15                 if vim.bo[bufnr].buflisted then
     16                   local name = vim.fn.fnamemodify(vim.fn.bufname(bufnr), ":t")
     17                   if name == "" then name = "[No name]" end
     18 
     19                   local highlight = bufnr == current and "WinBar" or "WinBarNC"
     20                   local modified = vim.bo[bufnr].modified and "*" or ""
     21 
     22                   table.insert(buffers, string.format(
     23                     "%%#%s# %d:%s%s %%*",
     24                     highlight, bufnr, name, modified
     25                   ))
     26                 end
     27               end
     28 
     29               if #buffers > 1 and vim.bo[current].buflisted then
     30                 vim.opt_local.winbar = table.concat(buffers)
     31                 vim.keymap.set({'n','v'}, '<C-n>', ':bn<cr>', { buffer = current })
     32                 vim.keymap.set({'n','v'}, '<C-p>', ':bp<cr>', { buffer = current })
     33 
     34               else
     35                 vim.opt_local.winbar = ""
     36                 pcall(function()
     37                   vim.keymap.del({'n','v'}, '<C-n>', { buffer = current })
     38                   vim.keymap.del({'n','v'}, '<C-p>', { buffer = current })
     39                 end)
     40               end
     41             end
     42           }
     43         )
     44       '';
     45   };
     46 }