first commit

This commit is contained in:
alejo committed 2026-10-17 03:28:15 -03:00
commit dab19ace02
1 file changed
+86
+86
View File
@@ -0,0 +1,86 @@
# Task Tracker
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/task_tracker [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 save` writes it to the file,
`db backup` writes a copy, `db restore` loads a file. On `quit` you are asked
to save if there are unsaved changes.
* The stored status is never shown directly: a `wait` task displays as
`Wait HH:MM` until that time passes, then as `Limit reset`. Tasks are sorted
by the computed status. The panels are cleared and redrawn after changes.
* Account panel: one row per account. `Busy` while any of its tasks is
Testing or Wait (those tasks are listed), otherwise `Free`
(see `Display::renderAccounts` / `StatusUtil::isBusy` to 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