------------------------------------------------------------------------------- -- - 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