diff options
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/muwiki/config.lua | 41 | ||||
| -rw-r--r-- | lua/muwiki/files.lua | 4 | ||||
| -rw-r--r-- | lua/muwiki/init.lua | 2 | ||||
| -rw-r--r-- | lua/muwiki/links/creation.lua | 2 | ||||
| -rw-r--r-- | lua/muwiki/links/open.lua | 2 |
5 files changed, 19 insertions, 32 deletions
diff --git a/lua/muwiki/config.lua b/lua/muwiki/config.lua index d9b6661..2a89427 100644 --- a/lua/muwiki/config.lua +++ b/lua/muwiki/config.lua @@ -52,7 +52,8 @@ function M.setup(opts) end end -function M.get_wiki_path(name) +-- 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 @@ -70,40 +71,26 @@ function M.get_wiki_path(name) return M.options.dirs[1].path end -function M.get_wiki_root_for_file(filepath) - if not M.options.dirs or #M.options.dirs == 0 then - return nil +-- 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 normalized_path = vim.fs.normalize(filepath) + local filepath = vim.api.nvim_buf_get_name(bufnr) + local normalized = vim.fs.normalize(filepath) - for _, dir in ipairs(M.options.dirs) do - if vim.startswith(normalized_path, dir.path) then + 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 -function M.get_wiki_root_for_buffer(bufnr) - bufnr = bufnr or 0 - local ok, cached = pcall(vim.api.nvim_buf_get_var, bufnr, 'muwiki_root') - if ok then - return cached - end - - local root = M.get_wiki_root_for_file(vim.api.nvim_buf_get_name(bufnr)) - if root then - pcall(vim.api.nvim_buf_set_var, bufnr, 'muwiki_root', root) - end - return root -end - -function M.is_wiki_buffer(bufnr) - bufnr = bufnr or 0 - return vim.bo[bufnr].filetype == 'markdown' - and M.get_wiki_root_for_buffer(bufnr) ~= nil -end - return M diff --git a/lua/muwiki/files.lua b/lua/muwiki/files.lua index 851feb4..6ec2bc2 100644 --- a/lua/muwiki/files.lua +++ b/lua/muwiki/files.lua @@ -26,7 +26,7 @@ function M.open_external(url) end function M.open_index(name) - local wiki_path = config.get_wiki_path(name) + local wiki_path = config.wiki_path(name) if not wiki_path then return end @@ -70,7 +70,7 @@ function M.open_wiki_file(filepath) local exists = fs.file_exists(filepath) if not exists and config.options.create_missing_dirs then - local wiki_root = config.get_wiki_root_for_file(vim.api.nvim_buf_get_name(0)) + local wiki_root = config.wiki_root(0) if wiki_root then local mode = config.options.create_missing_dirs diff --git a/lua/muwiki/init.lua b/lua/muwiki/init.lua index 6dc088f..a898c88 100644 --- a/lua/muwiki/init.lua +++ b/lua/muwiki/init.lua @@ -4,7 +4,7 @@ local M = {} local config = require('muwiki.config') local function wiki_buffer() - return config.is_wiki_buffer(0) + return config.wiki_root(0) ~= nil end M.setup = function(opts) diff --git a/lua/muwiki/links/creation.lua b/lua/muwiki/links/creation.lua index 0b31b10..81c45a6 100644 --- a/lua/muwiki/links/creation.lua +++ b/lua/muwiki/links/creation.lua @@ -52,7 +52,7 @@ function M.create_link() vim.api.nvim_buf_set_text(0, start_row, start_col, end_row, end_col, { link_text }) vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes('<Esc>', true, false, true), 'n', false) - local wiki_root = config.get_wiki_root_for_file(vim.api.nvim_buf_get_name(0)) + local wiki_root = config.wiki_root(0) if not wiki_root then vim.notify('Not in a wiki buffer', vim.log.levels.ERROR) return diff --git a/lua/muwiki/links/open.lua b/lua/muwiki/links/open.lua index 5afec53..c8a1233 100644 --- a/lua/muwiki/links/open.lua +++ b/lua/muwiki/links/open.lua @@ -7,7 +7,7 @@ local url_handlers = require('muwiki.links.url_handlers') local M = {} local function get_wiki_root_or_notify() - local wiki_root = config.get_wiki_root_for_buffer(0) + local wiki_root = config.wiki_root(0) if not wiki_root then vim.notify('Not in a wiki buffer', vim.log.levels.ERROR) return nil |
