local fs = require('muwiki.fs') local M = {} M.options = { dirs = nil, index_file = 'index.md', date_fmt = '%Y-%m-%d', use_template = false, template = [[ title: ${title} date: ${date} ]], text_extensions = { 'md', 'txt' }, use_external_handlers = false, external_handlers = { { name = 'xdg-open', cmd = 'xdg-open', pattern = '.*', }, }, create_missing_dirs = false, } function M.setup(opts) opts = opts or {} if opts.dirs then M.options.dirs = {} for _, dir in ipairs(opts.dirs) do local path = vim.fs.normalize(dir.path) if not vim.endswith(path, '/') then path = path .. '/' end table.insert(M.options.dirs, { name = dir.name, path = path }) end end for key, value in pairs(opts) do if key == 'dirs' then -- handled above elseif M.options[key] ~= nil then M.options[key] = value end end for _, dir in ipairs(M.options.dirs or {}) do if not fs.dir_exists(dir.path) then vim.notify('Wiki directory not found: ' .. dir.path, vim.log.levels.WARN) end end end -- Lookup wiki path by name (e.g., "default" -> "~/wiki/") function M.wiki_path(name) if not M.options.dirs or #M.options.dirs == 0 then vim.notify('MuWiki: No dirs configured. See :help muwiki-configuration', vim.log.levels.ERROR) return nil end if name then for _, dir in ipairs(M.options.dirs) do if dir.name == name then return dir.path end end vim.notify(string.format('Wiki "%s" not found, using default', name), vim.log.levels.WARN) end return M.options.dirs[1].path end -- Find which wiki contains this buffer's file (cached per-buffer) function M.wiki_root(bufnr) bufnr = bufnr or 0 if vim.b[bufnr].muwiki_root ~= nil then return vim.b[bufnr].muwiki_root or nil end local filepath = vim.api.nvim_buf_get_name(bufnr) local normalized = vim.fs.normalize(filepath) for _, dir in ipairs(M.options.dirs or {}) do if vim.startswith(normalized, dir.path) then vim.b[bufnr].muwiki_root = dir.path return dir.path end end vim.b[bufnr].muwiki_root = false return nil end return M