dotfiles/symlinks/config/nvim/lua/vimwiki_extensions.lua

80 lines
2.3 KiB
Lua

-------------------------------------------------------------------------------
-- - Vimwiki extensions library -
-- Relies on vimwiki-reviews-lua for its vimwiki API
-------------------------------------------------------------------------------
local api = require('vimwiki_reviews.vimwiki_api')
local utils = require('vimwiki_reviews.utils')
local templates = require('vimwiki_reviews.templates')
local Path = require('plenary.path')
local scandir = require('plenary.scandir')
local M = {}
-- Gets path to any dir of provided vimwiki (by index)
function M.get_vimwiki_subdir(vimwiki_index, directory)
vimwiki_index = api.normalize_vimwiki_index(vimwiki_index)
local vimwiki = vim.g.vimwiki_list[vimwiki_index]
return vimwiki.path .. directory .. '/'
end
function M.get_directory_index(vimwiki_index, directory)
local dir = M.get_vimwiki_subdir(vimwiki_index, directory)
local path = Path:new(dir):expand()
local entries = scandir.scan_dir(
path,
{
hidden = false,
add_dirs = false,
respect_gitignore = true,
depth = 1
})
local index = {}
for _,entry in pairs(entries) do
local filename = utils.get_filename_from_path(entry)
local ext = api.get_vimwiki_extension(vimwiki_index)
local noext = string.gsub(filename, ext, '')
index[noext] = filename
end
table.sort(index)
return index
end
-- Open subdirectory index file
function M.open_subdirectory_index_file(vimwiki_index, subdirectory)
local dir = M.get_vimwiki_subdir(vimwiki_index, subdirectory)
local ext = api.get_vimwiki_extension(vimwiki_index)
local filename = dir .. 'index' .. ext
vim.cmd('edit ' .. filename)
local index = M.get_directory_index(vimwiki_index, subdirectory)
local builder = templates.for_vimwiki(vimwiki_index)
local lines = {
builder.header(1, subdirectory:sub(1,1):upper()..subdirectory:sub(2)),
'',
}
-- Add items
for title, fname in pairs(index) do
if (title ~= 'index')
then
title = string.gsub(title, '-', ' ')
title = title:sub(1,1):upper()..title:sub(2)
table.insert(lines, builder.list_item(builder.link(fname, title)))
end
end
local buf = vim.api.nvim_get_current_buf()
vim.api.nvim_buf_set_lines(buf, 0, -1, false, {}) -- Clear out
vim.api.nvim_buf_set_lines(buf, 0, -1, false, lines) -- Put new contents
end
return M