all repos — dotfiles @ 0521931fb5b8a18045e51d4d17d9c91f21a79a95

my *nix dotfiles

nvim/lua/fuzzy/buffers.lua (view raw)

 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
local fn = vim.fn
local cmd = vim.cmd
local M = {}

function M.fzy_buffers()
  local buffers = {}

  -- list of buffers
  local nbuf = fn.range(1, fn.bufnr('$'))

  -- filter out buffers that don't have 'buflisted' set
  for _, n in ipairs(nbuf) do
    if fn.buflisted(n) then
      buffers[fn.bufname(n)] = n
    end
  end

  -- write buffer names to file to feed to fzy
  local buffile = fn.tempname()
  local f = io.open(buffile, "a")
  for b, _ in pairs(buffers) do
    f:write(b, '\n')
  end
  f:close()

  local fzy_cmd = {
    'fzy -p "buf > " ',
    '< ' .. buffile,
  }

  require('fzy/fzy').fzy_search(table.concat(fzy_cmd), function(stdout)
    -- strip '\n'
    local selected, _ = stdout:gsub('\n', '')
    cmd('bd!')

    cmd('buffer ' .. buffers[ selected ])
    -- housekeeping
    os.remove(buffile)
  end
  )

end

return M