alejo 04fa2b1b20 On branch main
Your branch is up to date with 'origin/main'.

Accounts:
the account panel now sorts from most free to least free. Fewer Busy tasks come first, and ties go alphabetically.

Tasks:
they now sort by status, then account A–Z, then wait time, then task name.

Status order:
Limit reset, Testing, Prompt, Wait, Uploading, Frozen, Done.

Account order: it ignores case. Tasks with no account come last in their status group.
Wait time: it only matters among tasks that have the same status and the same account.

Changes to be committed:
	modified:   README.md
	modified:   include/Status.h
	modified:   include/StringUtil.h
	modified:   src/Display.cpp
	modified:   src/Status.cpp
	modified:   src/StringUtil.cpp
2026-10-17 11:59:35 -03:00
2026-10-17 11:59:35 -03:00
2026-10-17 11:59:35 -03:00
2026-10-17 03:29:11 -03:00
2026-10-17 03:40:01 -03:00
2026-10-17 11:59:35 -03:00

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 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 computed status (Limit reset, Testing, Prompt, Wait, Uploading, Frozen, Done), then account A-Z (unassigned last), then wait time, then name. The panels are cleared and redrawn after changes.
  • Account panel: one row per account, sorted from most free to least free. Busy while any of its tasks is Testing or Wait (those tasks are listed), otherwise Free; fewer busy tasks sorts first, ties by name (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). The task table shows - when a task has no notes, otherwise the number of lines (e.g. 3 lines); open them with tsk notes <name>.

Layout

include/   headers (declarations only, no inline definitions)
src/       implementations
S
Description
No description provided
Readme
365 KiB
0 Stars 1 Watchers 0 Forks
Languages
C++ 73%
Python 19.4%
C 5.8%
CMake 1.8%