|  |  | @ -245,6 +245,9 @@ local function setup_buffer_keymaps() | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |             else |  |  |  |             else | 
			
		
	
		
		
			
				
					
					|  |  |  |                 -- Line is not indented, terminate the list |  |  |  |                 -- Line is not indented, terminate the list | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 -- ===== DEBUGGING START ===== | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 vim.notify(string.format("[Todoer Debug] Terminating list on line %d. Setting line to empty string.", lnum), vim.log.levels.WARN) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 -- ===== DEBUGGING END ===== | 
			
		
	
		
		
			
				
					
					|  |  |  |                 -- Replace the line with an empty string |  |  |  |                 -- Replace the line with an empty string | 
			
		
	
		
		
			
				
					
					|  |  |  |                 vim.api.nvim_buf_set_lines(0, lnum - 1, lnum, false, { "" }) |  |  |  |                 vim.api.nvim_buf_set_lines(0, lnum - 1, lnum, false, { "" }) | 
			
		
	
		
		
			
				
					
					|  |  |  |                 -- Now, manually insert a newline below using the API |  |  |  |                 -- Now, manually insert a newline below using the API | 
			
		
	
	
		
		
			
				
					|  |  | @ -266,11 +269,10 @@ local function setup_buffer_keymaps() | 
			
		
	
		
		
			
				
					
					|  |  |  | 	-- indent line if tab is pressed when line is a todo (Will be refactored in Step 4) |  |  |  | 	-- indent line if tab is pressed when line is a todo (Will be refactored in Step 4) | 
			
		
	
		
		
			
				
					
					|  |  |  | 	local function press_tab() |  |  |  | 	local function press_tab() | 
			
		
	
		
		
			
				
					
					|  |  |  | 		local current_line = vim.api.nvim_get_current_line() |  |  |  | 		local current_line = vim.api.nvim_get_current_line() | 
			
		
	
		
		
			
				
					
					|  |  |  | 		-- Check if current line matches the patterns (Only checks '-' marker currently) |  |  |  | 		-- Updated pattern to match -, *, + markers | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         -- TODO: Update pattern to match *, + as well |  |  |  | 		local pattern = "^%s*[%-%*%+]%s+%[[ x]%]" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		local pattern = "^%s*%- %[[ x]%]" |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		if string.match(current_line, pattern) then |  |  |  | 		if string.match(current_line, pattern) then | 
			
		
	
		
		
			
				
					
					|  |  |  | 			-- print("tab pressed, allegedly") -- Removed print |  |  |  | 			-- Still using feedkeys for now, will be refactored later | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("<C-t>", true, false, true), "i", false) |  |  |  | 			vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("<C-t>", true, false, true), "i", false) | 
			
		
	
		
		
			
				
					
					|  |  |  |             return "" -- Action handled by feedkeys |  |  |  |             return "" -- Action handled by feedkeys | 
			
		
	
		
		
			
				
					
					|  |  |  | 		else |  |  |  | 		else | 
			
		
	
	
		
		
			
				
					|  |  | @ -282,11 +284,10 @@ local function setup_buffer_keymaps() | 
			
		
	
		
		
			
				
					
					|  |  |  | 	-- indent line if shift tab is pressed when line is a todo (Will be refactored in Step 4) |  |  |  | 	-- indent line if shift tab is pressed when line is a todo (Will be refactored in Step 4) | 
			
		
	
		
		
			
				
					
					|  |  |  | 	local function press_shift_tab() |  |  |  | 	local function press_shift_tab() | 
			
		
	
		
		
			
				
					
					|  |  |  | 		local current_line = vim.api.nvim_get_current_line() |  |  |  | 		local current_line = vim.api.nvim_get_current_line() | 
			
		
	
		
		
			
				
					
					|  |  |  | 		-- Check if current line matches the patterns (Only checks '-' marker currently) |  |  |  | 		-- Updated pattern to match -, *, + markers | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         -- TODO: Update pattern to match *, + as well |  |  |  | 		local pattern = "^%s*[%-%*%+]%s+%[[ x]%]" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		local pattern = "^%s*%- %[[ x]%]" |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 		if string.match(current_line, pattern) then |  |  |  | 		if string.match(current_line, pattern) then | 
			
		
	
		
		
			
				
					
					|  |  |  | 			-- print("shift tab pressed, allegedly") -- Removed print |  |  |  | 			-- Still using feedkeys for now, will be refactored later | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("<C-d>", true, false, true), "i", false) |  |  |  | 			vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("<C-d>", true, false, true), "i", false) | 
			
		
	
		
		
			
				
					
					|  |  |  |             return "" -- Action handled by feedkeys |  |  |  |             return "" -- Action handled by feedkeys | 
			
		
	
		
		
			
				
					
					|  |  |  | 		else |  |  |  | 		else | 
			
		
	
	
		
		
			
				
					|  |  | @ -302,6 +303,7 @@ local function setup_buffer_keymaps() | 
			
		
	
		
		
			
				
					
					|  |  |  |         -- 1: Prefix (indentation, marker '-', '*', '+', or '#', and whitespace) |  |  |  |         -- 1: Prefix (indentation, marker '-', '*', '+', or '#', and whitespace) | 
			
		
	
		
		
			
				
					
					|  |  |  |         -- 2: State (' ' or 'x') |  |  |  |         -- 2: State (' ' or 'x') | 
			
		
	
		
		
			
				
					
					|  |  |  |         -- 3: Rest of the line (after ']') |  |  |  |         -- 3: Rest of the line (after ']') | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         -- Adjusted pattern slightly to ensure it captures # correctly too if needed | 
			
		
	
		
		
			
				
					
					|  |  |  | 		local prefix, state, rest = string.match(line, "^([%s]*[%-#%*%+]%s*)%[([ x])%](.*)") |  |  |  | 		local prefix, state, rest = string.match(line, "^([%s]*[%-#%*%+]%s*)%[([ x])%](.*)") | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if prefix then -- Check if the pattern matched (i.e., it's a toggleable line) |  |  |  | 		if prefix then -- Check if the pattern matched (i.e., it's a toggleable line) | 
			
		
	
	
		
		
			
				
					|  |  | 
 |