|  |  | @ -191,29 +191,24 @@ local function setup_buffer_keymaps() | 
			
		
	
		
		
			
				
					
					|  |  |  |         end |  |  |  |         end | 
			
		
	
		
		
			
				
					
					|  |  |  | 	end |  |  |  | 	end | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	-- function that checks if the current line starts with the string "- [ ]" or "- [x]" and toggles the x |  |  |  | 	-- Toggles the checkbox [ ] <-> [x] for lines starting with -, *, +, or # | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     -- (Will be updated in Step 2 to handle *, +) |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	local function toggle_todo() |  |  |  | 	local function toggle_todo() | 
			
		
	
		
		
			
				
					
					|  |  |  | 		local openpattern = "%- %[[ ]%]" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		local closedpattern = "%- %[[x]%]" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		local titleopenpattern = "# %[[ ]%]" -- Keep title toggle for now? Or remove? Let's keep it. |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		local titleclosedpattern = "# %[[x]%]" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		local line = vim.api.nvim_get_current_line() |  |  |  | 		local line = vim.api.nvim_get_current_line() | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |         -- Pattern captures: | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		if string.match(line, openpattern) then |  |  |  |         -- 1: Prefix (indentation, marker '-', '*', '+', or '#', and whitespace) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			line = string.gsub(line, openpattern, "- [x]", 1) -- Replace only first instance |  |  |  |         -- 2: State (' ' or 'x') | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			vim.api.nvim_set_current_line(line) |  |  |  |         -- 3: Rest of the line (after ']') | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		elseif string.match(line, closedpattern) then |  |  |  | 		local prefix, state, rest = string.match(line, "^([%s]*[%-#%*%+]%s*)%[([ x])%](.*)") | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			line = string.gsub(line, closedpattern, "- [ ]", 1) -- Replace only first instance |  |  |  | 
 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			vim.api.nvim_set_current_line(line) |  |  |  | 		if prefix then -- Check if the pattern matched (i.e., it's a toggleable line) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		elseif string.match(line, titleopenpattern) then |  |  |  | 			-- Determine the new state | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			line = string.gsub(line, titleopenpattern, "# [x]", 1) |  |  |  | 			local new_state = (state == ' ') and 'x' or ' ' | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			vim.api.nvim_set_current_line(line) |  |  |  | 			-- Reconstruct the line with the new state | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		elseif string.match(line, titleclosedpattern) then |  |  |  | 			local new_line = prefix .. "[" .. new_state .. "]" .. rest | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			line = string.gsub(line, titleclosedpattern, "# [ ]", 1) |  |  |  | 			-- Update the current line | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			vim.api.nvim_set_current_line(line) |  |  |  | 			vim.api.nvim_set_current_line(new_line) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		end |  |  |  | 		end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         -- If the pattern didn't match, do nothing. | 
			
		
	
		
		
			
				
					
					|  |  |  | 	end |  |  |  | 	end | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	-- Set up buffer-local keymaps |  |  |  | 	-- Set up buffer-local keymaps | 
			
		
	
	
		
		
			
				
					|  |  | 
 |