mirror of
https://github.com/marianozunino/nvim.git
synced 2025-06-28 18:43:50 -03:00
chore: add hugo+knap
This commit is contained in:
parent
d75777ef85
commit
a0591215a8
9 changed files with 222 additions and 31 deletions
103
lua/plugins/hugo.lua
Normal file
103
lua/plugins/hugo.lua
Normal file
|
@ -0,0 +1,103 @@
|
|||
local M = {
|
||||
"phelipetls/vim-hugo",
|
||||
}
|
||||
|
||||
M.config = function()
|
||||
local function is_hugo_project()
|
||||
local config_files = { "hugo.toml", "hugo.yaml", "hugo.json" }
|
||||
for _, file in ipairs(config_files) do
|
||||
if vim.fn.glob(file) ~= "" then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function get_archetypes()
|
||||
local kinds = {}
|
||||
local archetype_paths = {
|
||||
"archetypes/",
|
||||
"themes/*/archetypes/",
|
||||
}
|
||||
|
||||
for _, path in ipairs(archetype_paths) do
|
||||
local files = vim.fn.glob(path .. "*.md", false, true)
|
||||
for _, file in ipairs(files) do
|
||||
local kind = vim.fn.fnamemodify(file, ":t:r")
|
||||
table.insert(kinds, kind)
|
||||
end
|
||||
end
|
||||
return kinds
|
||||
end
|
||||
|
||||
local function get_content_completions(lead)
|
||||
local search_path = lead:match("^content/") and lead or "content/" .. lead
|
||||
local matches = vim.fn.glob("content/**/*", false, true)
|
||||
|
||||
local completions = {}
|
||||
for _, match in ipairs(matches) do
|
||||
local display = match:gsub("^content/", "")
|
||||
if match:match("^" .. vim.pesc(search_path)) then
|
||||
if vim.fn.isdirectory(match) == 2 then
|
||||
display = display .. "/"
|
||||
end
|
||||
table.insert(completions, display)
|
||||
end
|
||||
end
|
||||
|
||||
return completions
|
||||
end
|
||||
|
||||
local function run_hugo_command(args)
|
||||
local cmd = "hugo " .. table.concat(args, " ")
|
||||
vim.cmd("!" .. cmd)
|
||||
end
|
||||
|
||||
local function hugo_complete_arglead(lead, cmd_line, _)
|
||||
cmd_line = cmd_line:gsub("%s+", " ")
|
||||
|
||||
local parts = vim.split(cmd_line, " ")
|
||||
|
||||
local basic_subcommands = {
|
||||
"server",
|
||||
"new",
|
||||
"help",
|
||||
"version",
|
||||
"config",
|
||||
}
|
||||
|
||||
if #parts <= 2 then
|
||||
return vim.tbl_filter(function(sub)
|
||||
return sub:match("^" .. vim.pesc(lead or ""))
|
||||
end, basic_subcommands)
|
||||
end
|
||||
|
||||
if parts[2] == "new" then
|
||||
if #parts == 3 then
|
||||
return { "content" }
|
||||
end
|
||||
|
||||
if parts[3] == "content" then
|
||||
-- If the previous part is -k or --kind
|
||||
if parts[#parts - 1] == "-k" or parts[#parts - 1] == "--kind" then
|
||||
return get_archetypes()
|
||||
end
|
||||
|
||||
return get_content_completions(lead)
|
||||
end
|
||||
end
|
||||
|
||||
return {}
|
||||
end
|
||||
|
||||
if is_hugo_project() then
|
||||
vim.api.nvim_create_user_command("Hugo", function(opts)
|
||||
run_hugo_command(opts.fargs)
|
||||
end, {
|
||||
nargs = "*",
|
||||
complete = hugo_complete_arglead,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
Loading…
Add table
Add a link
Reference in a new issue