# Todoer.nvim - Enhanced TODO Management for Neovim A Neovim plugin that provides enhanced TODO list management with smart handling of checkboxes, indentation, and list items in markdown and other text formats. ## Features ✅ **Current Functionality:** - Smart TODO item creation with `ti`, `ta`, `to` - Toggle checkboxes with `tt` - Remove TODO markup with `td` - Smart Enter key handling in insert mode: - Creates new TODO items with proper indentation - Handles empty TODO items by outdenting or terminating lists - Tab/Shift-Tab indentation for TODO items - Supports multiple list markers: `-`, `*`, `+` - Works with markdown, text, and norg files by default ## Known Issues 🐛 **Current Bugs:** - Tab indentation handling still uses feedkeys and needs refactoring - Shift-Tab behavior may not be consistent with spaces vs tabs - Enter key () handling has several issues: - Doesn't properly handle empty lines after TODO items - Cursor positioning can be incorrect in some cases - Outdenting behavior is inconsistent - Edge cases with mixed indentation (spaces + tabs) not fully handled - Cursor positioning could be improved in several scenarios - Debug output is currently only enabled for Tab/Shift-Tab but not other operations ## Roadmap 📌 **Planned Improvements:** - [ ] Refactor tab indentation to use proper buffer operations - [ ] Fix Enter key handling for all cases - [ ] Add consistent debug output for all operations - [ ] Improve cursor positioning logic - [ ] Handle empty lines and edge cases better - [ ] Add support for numbered lists - [ ] Add support for nested TODO items with proper indentation - [ ] Add visual selection operations for multiple TODOs - [ ] Add commands for archiving completed items - [ ] Add support for custom TODO markers - [ ] Add support for custom checkbox states (e.g., `[ ]`, `[x]`, `[-]`) ## Installation Using [lazy.nvim](https://github.com/folke/lazy.nvim): ```lua { 'your-username/todoer.nvim', config = function() require('todoer').setup({ -- Optional: override default filetypes filetypes = { 'markdown', 'text', 'norg' } }) end } ``` ## Debugging Recommendations To help diagnose issues, you can: 1. Add `debug_line()` calls to key functions like `press_enter()` 2. Create a debug mode that can be toggled via: ```lua local debug_mode = false ``` 3. Make debug output more structured with timestamps and operation types 4. Log cursor positions before/after operations 5. Add validation of line states after modifications Example debug output format: ``` [DEBUG] [TIMESTAMP] [OPERATION] Line: 42 Before: {indent=" ", marker="-", is_todo=true} After: {indent=" ", marker="-", is_todo=true} Cursor: {lnum=42, col=6} -> {lnum=43, col=4} ``` ## Configuration Default configuration: ```lua { filetypes = { "markdown", "text", "norg" } -- Filetypes to activate the plugin for } ``` ## Keybindings Normal Mode: - `ti` - Convert line to TODO (cursor after `] `) - `ta` - Convert line to TODO (cursor at end) - `to` - Insert new TODO line below - `tt` - Toggle checkbox state - `td` - Remove TODO markup Insert Mode: - `` - Smart enter behavior for TODO items - `` - Indent TODO item - `` - Outdent TODO item