Testing out a tasks folder for a custom plugin
This commit is contained in:
87
lua/markdown_organizer/init.lua
Normal file
87
lua/markdown_organizer/init.lua
Normal file
@ -0,0 +1,87 @@
|
||||
local M = {}
|
||||
|
||||
-- Function to determine fold level for each line
|
||||
local function fold_completed_tasks(lnum)
|
||||
local line = vim.fn.getline(lnum)
|
||||
|
||||
-- Check if the line contains a completed task
|
||||
if line:match("%- %[X%]") then
|
||||
return ">1" -- Start a fold at level 1
|
||||
end
|
||||
|
||||
return "0" -- No fold
|
||||
end
|
||||
|
||||
-- Function to hide completed tasks using foldexpr
|
||||
function M.hide_completed()
|
||||
local count = 0
|
||||
local pattern = "%- %[X%]" -- Pattern to match completed tasks: "- [X]"
|
||||
|
||||
-- Get all lines in the current buffer
|
||||
local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
|
||||
|
||||
-- Count completed tasks
|
||||
for _, line in ipairs(lines) do
|
||||
if line:match(pattern) then
|
||||
count = count + 1
|
||||
end
|
||||
end
|
||||
|
||||
-- If no completed tasks found, notify and return
|
||||
if count == 0 then
|
||||
vim.notify("No completed tasks found", vim.log.levels.INFO)
|
||||
return
|
||||
end
|
||||
|
||||
-- Save current folding settings
|
||||
local old_foldmethod = vim.wo.foldmethod
|
||||
local old_foldexpr = vim.wo.foldexpr
|
||||
|
||||
-- Set up folding based on expression
|
||||
vim.wo.foldmethod = "expr"
|
||||
vim.wo.foldexpr = "v:lua.require'markdown_organizer'.fold_expr(v:lnum)"
|
||||
|
||||
-- Close all folds to hide completed tasks
|
||||
vim.cmd("normal! zM")
|
||||
|
||||
-- Notify user of how many tasks were hidden
|
||||
vim.notify("Hidden " .. count .. " completed tasks", vim.log.levels.INFO)
|
||||
|
||||
-- Add autocmd to restore original folding settings when leaving buffer
|
||||
vim.api.nvim_create_autocmd("BufLeave", {
|
||||
buffer = 0,
|
||||
callback = function()
|
||||
vim.wo.foldmethod = old_foldmethod
|
||||
vim.wo.foldexpr = old_foldexpr
|
||||
end,
|
||||
once = true
|
||||
})
|
||||
end
|
||||
|
||||
-- Expose the fold expression function to be used by foldexpr
|
||||
function M.fold_expr(lnum)
|
||||
return fold_completed_tasks(lnum)
|
||||
end
|
||||
|
||||
-- Function to restore normal folding
|
||||
function M.show_completed()
|
||||
-- Reset folding settings to default
|
||||
vim.wo.foldmethod = "manual"
|
||||
vim.wo.foldexpr = "0"
|
||||
|
||||
-- Open all folds
|
||||
vim.cmd("normal! zR")
|
||||
|
||||
vim.notify("Showing all tasks", vim.log.levels.INFO)
|
||||
end
|
||||
|
||||
-- Register the commands
|
||||
vim.api.nvim_create_user_command("HideCompleted", function()
|
||||
M.hide_completed()
|
||||
end, {})
|
||||
|
||||
vim.api.nvim_create_user_command("ShowCompleted", function()
|
||||
M.show_completed()
|
||||
end, {})
|
||||
|
||||
return M
|
||||
Reference in New Issue
Block a user