--- The `:Heph ` user-command surface. Tactical/Organizational task --- views (next/list/capture/...) arrive with slice 11b; this is the knowledge- --- base core (journal, links). local M = {} --- subcommand -> handler(args: string[]) M.subs = { today = function() require("heph.journal").open() end, journal = function(args) require("heph.journal").open(args[1]) end, follow = function() require("heph.link").follow() end, open = function(args) if args[1] then require("heph.node").open(args[1]) end end, } --- `:Heph` entry point. function M.run(opts) local args = opts.fargs local sub = args[1] if not sub then require("heph.util").notify("usage: :Heph <" .. table.concat(M.names(), "|") .. ">", vim.log.levels.WARN) return end local handler = M.subs[sub] if not handler then require("heph.util").notify("unknown subcommand: " .. sub, vim.log.levels.ERROR) return end local ok, err = pcall(handler, vim.list_slice(args, 2)) if not ok then require("heph.util").notify(tostring(err), vim.log.levels.ERROR) end end --- Sorted subcommand names. function M.names() local names = vim.tbl_keys(M.subs) table.sort(names) return names end --- Completion: subcommand names at the first position. function M.complete(arglead, cmdline, _cursorpos) -- Only complete the subcommand token (first arg after :Heph). if cmdline:match("^%s*Heph%s+%S*$") then return vim.tbl_filter(function(n) return n:find(arglead, 1, true) == 1 end, M.names()) end return {} end return M