mirror of
				https://github.com/marianozunino/nvim.git
				synced 2025-10-29 11:50:41 -03:00 
			
		
		
		
	
		
			
				
	
	
		
			103 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 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
 |