A minimalist curses-based terminal task manager that allows you to manage your tasks with keyboard navigation.
- Simple task management with Todo/Done status
- Task prioritization (Low, Medium, High)
- Keyboard navigation
- Edit task title and priority
- Sort tasks by priority or creation date
- Filter tasks by status
- Data persistence in JSON format
- Custom data file path support
- Python 3.6+
- Standard library only (no external dependencies)
Run the application:
# Use default tasks.json file
python main.py
# Use a custom data file
python main.py -f /path/to/custom-tasks.json-f, --file FILE Path to task data file (default: tasks.json)
The repository includes an example data file with sample tasks for demonstration:
python main.py -f example-tasks.jsonjor↓: Move downkor↑: Move upa: Add a new taske: Edit the selected task's titlep: Edit the selected task's prioritys: Sort by priority (ascending → descending → none)c: Sort by creation date (ascending → descending → none)Space: Toggle task status (Todo/Done)d: Delete selected taskt: Filter Todo tasks (press again to show all)f: Filter Done tasks (press again to show all)q: Quit the application
The codebase consists of three main components:
-
Data Model (
task_model.py):- Defines task data structure and operations
- Handles JSON file persistence
-
User Interface (
task_tui.py):- Manages the curses-based terminal UI
- Processes keyboard input and user interactions
- Handles task display, sorting, and filtering
-
Application Entry (
main.py):- Initializes the application
- Sets up error handling
- Processes command line arguments
All task data is automatically saved to the specified JSON file whenever changes are made.
Each task has the following properties:
- Title: The name or description of the task
- Creation Date: Automatically set when the task is created
- Priority: Low, Medium, or High
- Status: Todo or Done
