A lightweight, highly responsive Terminal User Interface (TUI) application written in modern C++ for managing categorized tasks, assignments, and activities. Built on top of ncurses, this application is optimized for performance, snappiness, and zero screen flickering.
- Categorized Tasks: Organize tasks into different lists/categories (e.g., Inbox, Work, Personal).
- Task Types:
- Activity: Tasks with a designated start date/time.
- Assignment: Tasks with a designated deadline date/time.
- Completed Tasks Visual Group: Completed tasks automatically move to a distinct visual section at the bottom of the list.
- Sorting & Reordering:
- Sort categories alphabetically or shift their positions manually.
- Sort tasks alphabetically, by date/time (earliest/latest), or shift task priorities up/down manually.
- Task Snooze/Postponement (
p): Postpone a task's start/due date by +1 Hour, +1 Day, or +1 Week instantly through a fast selection picker. - Task Transfer/Movement (
m): Move a task out of its current category list and directly into any other user-selected category. - Direct Calendar Picker: Prompts for date/time by directly opening an interactive visual calendar grid with keyboard navigation (
hjkl/ arrows), month switching (</>), date clearing (n), and time input (HH:MM). - Color Theme Selector (
t/:theme): Switch between visual color schemes (default,dracula,nord,gruvbox,monokai,tokyo-night) directly from an interactive dialog or command bar.
- Double-Buffered Rendering: Utilizes
wnoutrefresh()anddoupdate()to update the terminal window in a single frame update, preventing any screen flickering. - Zero ESC Delay: Configured with a
25msESC timeout for instant dialog cancellation responsiveness. - Vim-Style Navigation: Support for standard vim keys (
j/kto navigate list items,h/lto switch pane focus). - Interactive Real-Time Filter/Search (
/): Drops input focus into a bottom border text search field. As you type, the task pane filters titles in real-time. - Relative Countdown Display: Displays a dynamic, relative countdown (e.g.
(In 2 days, 3 hours)or(Overdue by 5 hours)) underneath the static timestamp in the Task Details Pane.
- XDG Base Directory Compliance: Saves configuration dynamically to
$XDG_CONFIG_HOME/dotui/tasks.txt. Falls back to$HOME/.config/dotui/tasks.txtif$XDG_CONFIG_HOMEis unset. Parent directories are created automatically on startup. - Extended Serialization: Employs a clean, flat-file serialization piping layout to save and load task states efficiently.
- Language: C++17 (compiled using
g++) - UI Library:
ncurses(terminal display and keyboard event processing library) - Build System:
GNU Make
Task-Management-TUI/
├── src/
│ ├── main.cpp # Application entry point & main event/drawing loop
│ ├── app/ # Application state management & command execution loop
│ ├── ui/ # Ncurses drawing, modals, calendar picker & themes
│ ├── input/ # Keybindings & mode handling
│ ├── persistence/ # Serialization & theme configuration parser
│ └── core/ # Data structures (Task, List, ThemeColors)
├── Makefile # Build instructions
├── TODO.md # Project roadmap and completed tracker
└── README.md # Documentation (This file)
The interface is divided into pane columns: Categories Pane on the left and Tasks Pane + Task Details Pane on the right.
Tab: Switch focus between the Categories pane and the Tasks pane.h/l: Vim-style pane switching (pressinghin Tasks pane switches to Categories, pressinglin Categories pane switches to Tasks)./: Drop focus to the bottom search bar (type query and pressEnterto scroll matches, pressEscto clear search).t: Open the interactive Theme Selection dialog.?: Open the full-screen live keybindings overlay.:: Open command bar (:new <title>,:sort,:theme <name>,:quit).q: Save progress and exit.
| Key | Categories Focused | Tasks Focused |
|---|---|---|
Up / Down or k / j |
Navigate through categories | Navigate through tasks |
Space |
N/A | Toggle selected task completion |
n or a |
Create a new Category | Create a new Task (opens Calendar Picker & time input) |
e |
Rename selected Category | Edit selected Task (Title, Description, Date/Time) |
d or x |
Delete selected Category | Delete selected Task |
s |
Open Sort/Shift menu for Categories | Open Sort/Shift menu for Tasks |
t |
Select Color Theme | Select Color Theme |
p |
N/A | Snooze task (postpone date/time by +1 hour, +1 day, or +1 week) |
m |
N/A | Move task to a different Category list |
Make sure you have a C++ compiler supporting C++17 and the ncurses development library installed.
On Fedora / RHEL / CentOS:
sudo dnf install gcc-c++ ncurses-devel makeOn Debian / Ubuntu:
sudo apt-get install g++ libncurses5-dev libncursesw5-dev makeOn macOS (using Homebrew):
brew install ncurses-
Clone this repository:
git clone https://github.com/your-username/Task-Management-TUI.git cd Task-Management-TUI -
Build the binary target:
make
-
Install the application:
- System-wide installation (installs to
/usr/local/bin):sudo make install
- User-only installation (installs to your home directory, e.g.
~/.local/bin):make install PREFIX=$HOME/.local
- System-wide installation (installs to
-
Run the application from anywhere:
dotui
Data is serialized to the XDG config folder ($HOME/.config/dotui/tasks.txt). The serialization format uses plain piping:
- Category format:
L|<Category Name> - Task format:
T|<Completed (0/1)>|<Type (ACT/ASM)>|<Title>|<Description>|<DateTime>
Example contents of tasks.txt:
L|Inbox
T|0|ACT|Prepare meeting|Prepare presentation slides|2026-07-15 10:00
T|1|ASM|Write essay|Submit via portal|2026-07-17 17:00
L|Work
T|0|ACT|Team Sync|Discuss sprint goals|2026-07-13 09:00