LLS
Interactive C++17 / SQLite task + account tracker. Type commands at the > prompt.
Build
Requires CMake >= 3.14 and a C++17 compiler. SQLite is taken from the system if installed; otherwise CMake downloads the amalgamation (needs network once).
# optional, system SQLite:
# Debian/Ubuntu: sudo apt install libsqlite3-dev
# Fedora: sudo dnf install sqlite-devel
# Arch: sudo pacman -S sqlite
cmake -S . -B build
cmake --build build
./build/lls [database-file] # default: tasks.db
Commands
acc add <name> tsk add <name> [acc] [status]
acc del <name> tsk del <name>
acc rename <name> <new> tsk rename <name> <new>
acc ls tsk reacc <name> <new|->
tsk restat <name> <new>
tsk notes <name> (opens your editor)
tsk ls
disp tsk (hide|show)
disp tsk level (hide|show) (prompt|limit-reset|testing|wait|uploading|frozen|done|all)
disp acc (hide|show)
disp acc level (hide|show) (busy|free|all)
disp (show current settings)
db save | db backup [file] | db restore <file>
editor [command | default] (show / set the editor used by tsk notes)
help | quit
Names containing spaces go in double quotes: tsk add "Breeze A" Acrux testing.
Statuses and times
prompt (free to accept prompts), limit-reset, testing, wait <time>,
uploading, frozen, done. limit-reset is normally computed: a wait
task shows as Limit reset once its time has passed (it can also be set by
hand; limit reset with a space works too). Old databases that say
available are converted to prompt on load.
Times may be 24-hour or 12-hour: wait 16:30, wait 4:30pm, wait 4 pm,
wait 12:05am. Without am/pm the time is read as 24-hour (6:40 = 06:40).
A time that has already passed today is stored as tomorrow.
Prompt keys
Up/Down history (saved between sessions), Left/Right/Home/End editing, Ctrl-Left/Right word jump, Tab completion (commands, task and account names, statuses, levels, editors, file paths; press Tab twice-ish to list options), Ctrl-A/E, Ctrl-U/K/W, Ctrl-L clear, Ctrl-C cancel line, Ctrl-D quit. Pressing Enter on an empty line redraws the panels (waits expire with time).
Editor
tsk notes <name> opens the notes in an external editor. Use editor nvim
(or vim, vi, nano, code --wait, ...) to choose one; editor default
goes back to $VISUAL / $EDITOR / nano / vim / vi. The choice is stored in
~/.config/task_tracker/config (history is in the same folder).
How it works
- Data lives in an in-memory SQLite database.
db savewrites it to the file,db backupwrites a copy,db restoreloads a file. Onquityou are asked to save if there are unsaved changes. - The stored status is never shown directly: a
waittask displays asWait HH:MMuntil that time passes, then asLimit reset. Tasks are sorted by the computed status. The panels are cleared and redrawn after changes. - Account panel: one row per account.
Busywhile any of its tasks is Testing or Wait (those tasks are listed), otherwiseFree(seeDisplay::renderAccounts/StatusUtil::isBusyto change the rules). - Deleting an account leaves its tasks unassigned (
-). - Names are case-insensitive; the original spelling is kept.
- Notes live in the database (SQLite TEXT, binary-safe, SQLite's default limit is ~1 GB). Multi-line notes show on one line in the table, in full.
Layout
include/ headers (declarations only, no inline definitions)
src/ implementations