diff --git a/.config/nvim/after/plugin/nvim-cmp.lua b/.config/nvim/after/plugin/nvim-cmp.lua index ba4ca44..e6b5441 100644 --- a/.config/nvim/after/plugin/nvim-cmp.lua +++ b/.config/nvim/after/plugin/nvim-cmp.lua @@ -63,6 +63,7 @@ cmp.setup({ }), sources = { { name = "copilot", group_index = 2 }, + { name = "zk" }, { name = "nvim_lsp", keyword_length = 8 }, { name = "luasnip", max_item_count = 16 }, { name = "path" }, diff --git a/.config/nvim/lua/zk/cmp.lua b/.config/nvim/lua/zk/cmp.lua new file mode 100644 index 0000000..e3e234d --- /dev/null +++ b/.config/nvim/lua/zk/cmp.lua @@ -0,0 +1,49 @@ +local cmp = require("cmp") + +local source = {} + +local function get_markdown_files(base) + local items = {} + local pattern = base .. "/**/*.md" + local files = vim.fn.glob(pattern, false, true) + for _, file in ipairs(files) do + local label = file:gsub("^%./", ""):gsub("%.md$", "") + table.insert(items, { label = label }) + end + return items +end + +function source:complete(params, callback) + local cursor_before_line = params.context.cursor_before_line + local cursor_after_line = params.context.cursor_after_line or "" + + local trigger = cursor_before_line:match("%[[^%]]*%]%(([^)]*)$") + + if trigger ~= nil then + local items = get_markdown_files(".") + local next_char = cursor_after_line:sub(1, 1) + + for _, item in ipairs(items) do + if next_char == ")" then + item.insertText = item.label + else + item.insertText = item.label .. ")" + end + end + + callback(items) + else + callback({}) + end +end + +function source:get_trigger_characters() + return { "(" } +end + +function source:is_available() + local ft = vim.bo.filetype + return ft == "markdown" or ft == "pandoc" +end + +cmp.register_source("zk", source) diff --git a/.config/nvim/lua/zk.lua b/.config/nvim/lua/zk/init.lua similarity index 98% rename from .config/nvim/lua/zk.lua rename to .config/nvim/lua/zk/init.lua index dcd366d..bc81058 100644 --- a/.config/nvim/lua/zk.lua +++ b/.config/nvim/lua/zk/init.lua @@ -1,3 +1,5 @@ +require("zk.cmp") + vim.cmd([[ let s:zk_preview_enabled = 0 let s:live_server_job = -1