first commit
This commit is contained in:
commit
dab19ace02
1 file changed
+86
@@ -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
|
||||
Reference in new issue
Block a user